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

  1. Confirm the registry URL is reachable from the RisingWave host (curl the /subjects endpoint).
  2. Check the registry service status and logs (is it up? healthy?).
  3. Verify DNS/networking (docker/k8s service names, ports, security groups).
  4. 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

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


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