bug(sdk): HTTP API can not handle digit only stream names

Abierto
#4,274 1 comentario 0 reacciones 1 asignado Ver en GitHub

Los mantenedores suelen responder en 1 día

@haubur ya está trabajando en esto.

Desde el 23/9/2026.

Evaluación

Este issue todavía no se ha evaluado.

Descripción

bug rust
Bug description

Relates to #4155 and discussed in #4249

Situation
On HTTP transport sending Identifiers does not carry IdKind info.

Problem
The HTTP client sends ids through as_cow_str(), and the server parses path ids with from_str_value(), which tries u32 first. A digit-only name is then interpreted as an id instead of a name, which e.g binds consumers to no stream (not found) or another stream (with that id).

Solution
The HTTP API needs a way to differentiate between IdKinds (numeric and string).

Currently failing integration tests here.

Affected area / component

Rust SDK

Deployment

None

Versions

No response

Hardware / environment

No response

Sample code

No response

Logs

No response

Iggy server config

No response

Reproduction

Three integration tests here

One example pasted for convenience:

use iggy::prelude::*;
use integration::iggy_harness;

const DIGITS_ONLY_NAME: &str = "424242";

#[iggy_harness(test_client_transport = [Tcp, Http])]
async fn given_digit_only_stream_name_when_getting_the_stream_should_resolve_it_by_name(
    harness: &TestHarness,
) {
    let client = harness.root_client().await.unwrap();

    let created = client.create_stream(DIGITS_ONLY_NAME).await.unwrap();
    let stream_id = Identifier::named(DIGITS_ONLY_NAME).unwrap();

    // Should get the correct stream by casting the name into an Identifier.
    // If it fails, the server casts the the digit only name into an Identifier with IdKind::Numeric
    // and looks for that id rather the name.
    let fetched = client
        .get_stream(&stream_id)
        .await
        .unwrap()
        .unwrap_or_else(|| {
            panic!(
                "stream named {DIGITS_ONLY_NAME} must resolve by name, \
                 not as id {DIGITS_ONLY_NAME}"
            )
        });

    assert_eq!(fetched.name, DIGITS_ONLY_NAME);
    assert_eq!(fetched.id, created.id);
}
Contribution
  • I'm willing to submit a pull request to fix this bug
Good first issue
  • I think this could be a good first issue for a new contributor
Lenguaje dominante
Rust
Estrellas
5.2k
Forks
516
Merge medio
2 d 17 h
PR fusionados (30 d)
155

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de apache/iggy

Todos los issues de apache/iggy

Issues similares

Más issues de Rust

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.