risingwavelabs/risingwave · error · RequestError::Send
confluent registry send req error: {0}
Error message
confluent registry send req error: {0} What it means
RequestError::Send is returned when the HTTP request to the Confluent Schema Registry itself fails at the transport level, wrapping the underlying reqwest::Error (connect, DNS, timeout, TLS, or redirect errors). No HTTP response was received, so this is a network/transport failure rather than a server-side rejection.
Source
Thrown at src/connector/src/schema/schema_registry/util.rs:89
}
let schema_id = cursor
.read_i32::<BigEndian>()
.map_err(|_| WireFormatError::NoSchemaId)?;
Ok((schema_id, cursor))
}
pub(crate) struct SchemaRegistryCtx {
pub username: Option<String>,
pub password: Option<String>,
pub client: reqwest::Client,
pub path: Vec<String>,
}
#[derive(Debug, thiserror::Error)]
pub enum RequestError {
#[error("confluent registry send req error: {0}")]
Send(#[source] reqwest::Error),
#[error("confluent registry parse resp error: {0}")]
Json(#[source] reqwest::Error),
#[error(transparent)]
Unsuccessful(ErrorResp),
}
pub(crate) async fn req_inner<T>(
ctx: Arc<SchemaRegistryCtx>,
mut url: Url,
method: Method,
) -> Result<T, RequestError>
where
T: DeserializeOwned + Send + Sync + 'static,
{
url.path_segments_mut()
.expect("constructor validated URL can be a base")
.extend(&ctx.path);View on GitHub (pinned to 6469eb736d)
Solutions
- Confirm the registry URL is reachable from the RisingWave host (curl the /subjects endpoint).
- Check the registry service status and logs (is it up? healthy?).
- Verify DNS/networking (docker/k8s service names, ports, security groups).
- Check the wrapped reqwest::Error for the precise layer (connect vs timeout vs TLS) and fix accordingly; if timeouts, tune retry/timeout config.
Example fix
// before schema.registry = 'http://schema-registy:8081' # typo // after schema.registry = 'http://schema-registry:8081'
Defensive patterns
Strategy: retry
Validate before calling
// pre-flight reachability check
let status = reqwest::get(format!("{}/subjects", registry_url))
.await?.status();
assert!(status.is_success(), "registry not reachable: {}", status); Try / catch
match req_inner(&ctx).await {
Ok(v) => v,
Err(RequestError::Send(e)) => {
tracing::warn!(error = ?e, "transport error to registry; retrying");
retry_with_backoff().await
}
Err(e) => return Err(e.into()),
} Prevention
- Validate registry URL/hostname and port in WITH options.
- Pre-flight connectivity checks from RisingWave nodes.
- Monitor registry availability and network paths.
- Distinguish connect vs timeout errors to tune retry policy.
When it happens
Trigger: Any registry HTTP call (req_inner) where sending the request fails: registry unreachable, DNS resolution failure, TLS handshake failure, or request timeout.
Common situations: Wrong registry URL/port in WITH options, registry down or overloaded, network partition, DNS issues in containers, or TLS cert mismatch.
Understand the failure class
Background: 'Something went wrong' / 'Request failed (500)' / 'HTTP error! status: 404' — what failed HTTP requests actually mean and how to find the real cause — this error's family across 28 libraries.
Related errors
- request error
- schema registry client error: {0}
- Vault API returned error status: {} - {}
- Malformed response: {message}
- all request confluent registry all timeout, {context} {}
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/de446049150b4a7f.
Report an issue: GitHub.