{"record":{"id":"de446049150b4a7f","repo":"risingwavelabs/risingwave","slug":"confluent-registry-send-req-error-0","errorCode":null,"errorMessage":"confluent registry send req error: {0}","messagePattern":"confluent registry send req error: (.+?)","errorType":"exception","errorClass":"RequestError::Send","httpStatus":null,"severity":"error","filePath":"src/connector/src/schema/schema_registry/util.rs","lineNumber":89,"sourceCode":"    }\n\n    let schema_id = cursor\n        .read_i32::<BigEndian>()\n        .map_err(|_| WireFormatError::NoSchemaId)?;\n\n    Ok((schema_id, cursor))\n}\n\npub(crate) struct SchemaRegistryCtx {\n    pub username: Option<String>,\n    pub password: Option<String>,\n    pub client: reqwest::Client,\n    pub path: Vec<String>,\n}\n\n#[derive(Debug, thiserror::Error)]\npub enum RequestError {\n    #[error(\"confluent registry send req error: {0}\")]\n    Send(#[source] reqwest::Error),\n    #[error(\"confluent registry parse resp error: {0}\")]\n    Json(#[source] reqwest::Error),\n    #[error(transparent)]\n    Unsuccessful(ErrorResp),\n}\n\npub(crate) async fn req_inner<T>(\n    ctx: Arc<SchemaRegistryCtx>,\n    mut url: Url,\n    method: Method,\n) -> Result<T, RequestError>\nwhere\n    T: DeserializeOwned + Send + Sync + 'static,\n{\n    url.path_segments_mut()\n        .expect(\"constructor validated URL can be a base\")\n        .extend(&ctx.path);","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/schema/schema_registry/util.rs#L71-L107","documentation":"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.","triggerScenarios":"Any registry HTTP call (req_inner) where sending the request fails: registry unreachable, DNS resolution failure, TLS handshake failure, or request timeout.","commonSituations":"Wrong registry URL/port in WITH options, registry down or overloaded, network partition, DNS issues in containers, or TLS cert mismatch.","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."],"exampleFix":"// before\nschema.registry = 'http://schema-registy:8081'  # typo\n// after\nschema.registry = 'http://schema-registry:8081'","handlingStrategy":"retry","validationCode":"// pre-flight reachability check\nlet status = reqwest::get(format!(\"{}/subjects\", registry_url))\n    .await?.status();\nassert!(status.is_success(), \"registry not reachable: {}\", status);","typeGuard":null,"tryCatchPattern":"match req_inner(&ctx).await {\n    Ok(v) => v,\n    Err(RequestError::Send(e)) => {\n        tracing::warn!(error = ?e, \"transport error to registry; retrying\");\n        retry_with_backoff().await\n    }\n    Err(e) => return Err(e.into()),\n}","preventionTips":["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."],"tags":["network","http","schema-registry"],"backgroundTag":"http-request-failed","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}