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

Aperta
#4,274 1 commento 0 reazioni 1 assegnatario Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@haubur ci sta già lavorando.

Dal 23/9/2026.

Valutazione

Questa issue non è ancora stata valutata.

Descrizione

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
Lingua principale
Rust
Stelle
5.2k
Fork
502
Merge medio
3g 11h
PR unite (30g)
143

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di apache/iggy

Tutte le issue di apache/iggy

Issue simili

Altre issue su Rust

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.