risingwavelabs/risingwave · error · ConcurrentRequestError

all request confluent registry all timeout, {context} {}

Error message

all request confluent registry all timeout, {context}
{}

What it means

ConcurrentRequestError is thrown by the Confluent Schema Registry client when every concurrent attempt to reach the registry fails (all futures in the fan-out return either a RequestError or a tokio JoinError). The message embeds the request context and the per-attempt error reports so the developer can see why each request failed. It effectively means the client could not get a successful response from any registry replica.

Source

Thrown at src/connector/src/schema/schema_registry/client.rs:118

                    .unwrap_or(DEFAULT_RETRIES_MAX),
            },
        }
    }
}

/// An client for communication with schema registry
#[derive(Debug)]
pub struct Client {
    inner: reqwest::Client,
    url: Vec<Url>,
    username: Option<String>,
    password: Option<String>,

    retry_config: SchemaRegistryRetryConfig,
}

#[derive(Debug, thiserror::Error)]
#[error("all request confluent registry all timeout, {context}\n{}", errs.iter().map(|e| format!("\t{}", e.as_report())).join("\n"))]
pub struct ConcurrentRequestError {
    errs: Vec<itertools::Either<RequestError, tokio::task::JoinError>>,
    context: String,
}

type SrResult<T> = Result<T, ConcurrentRequestError>;

#[derive(thiserror::Error, Debug)]
pub enum SchemaRegistryClientError {
    #[error(transparent)]
    InvalidOption(#[from] InvalidOptionError),
    #[error("read ca file error: {0}")]
    ReadFile(#[source] std::io::Error),
    #[error("parse ca file error: {0}")]
    ParsePem(#[source] reqwest::Error),
    #[error("build schema registry client error: {0}")]
    Build(#[source] reqwest::Error),
}

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Check connectivity from the RisingWave host: curl the registry URL (e.g. curl http://registry:8081/subjects).
  2. Verify the registry connection options (host/port, auth) in the CREATE SOURCE/TABLE WITH clause.
  3. Inspect the per-attempt errors printed after the context line — they show the root cause (DNS, TLS, timeout).
  4. If using retries, increase SchemaRegistryRetryConfig limits; if infra-related, fix networking or restart the registry service.

Example fix

// before
CREATE SOURCE s (...) WITH (
  connector = 'kafka',
  schema.registry = 'http://schema-registry.internal:8081'
);
// after
CREATE SOURCE s (...) WITH (
  connector = 'kafka',
  schema.registry = 'http://schema-registry:8081'
);
Defensive patterns

Strategy: retry

Validate before calling

// pre-flight: ensure registry is reachable
let resp = reqwest::get(format!("{}/subjects", registry_url)).await?;
assert!(resp.status().is_success(), "registry unreachable");

Try / catch

match client.get_schema_by_id(id).await {
    Ok(schema) => schema,
    Err(e) => {
        tracing::error!(error = ?e, "all registry attempts failed; check per-attempt errors");
        return Err(e.into());
    }
}

Prevention

When it happens

Trigger: Calling any client method (e.g. fetching a schema by ID or registering a schema) that fans out requests via Client, when every spawned reqwest task fails — network unreachable, DNS failure, TLS errors, or all tasks panicking (JoinError).

Common situations: Schema registry hostname wrong or unresolvable, registry service down, firewall/security-group blocking the port, TLS certificate issues, or container networking (e.g. docker-compose service name not reachable from the RisingWave process).

Understand the failure class

Background: Request timed out: what client-side request timeouts mean across libraries (Request timed out, TIMED_OUT, APITimeoutError) — this error's family across 39 libraries.

Related errors


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/9ef4e6b03bbc4c01. Report an issue: GitHub.