{"record":{"id":"44489e9d23b95d27","repo":"hasura/graphql-engine","slug":"0-44489e","errorCode":null,"errorMessage":"{0}","messagePattern":"\\{0\\}","errorType":"exception","errorClass":"Error::Connector","httpStatus":null,"severity":"error","filePath":"v3/crates/execute/src/ndc/client.rs","lineNumber":52,"sourceCode":"    #[error(\"unable to decode JSON response from connector: {0}\")]\n    Serde(#[from] serde_json::Error),\n\n    #[error(\"UTF-8 error: {0}\")]\n    Utf8Error(#[from] std::string::FromUtf8Error),\n\n    #[error(\"IO error: {0}\")]\n    IOError(#[from] std::io::Error),\n\n    #[error(\"invalid connector base URL\")]\n    InvalidBaseURL,\n\n    #[error(\"invalid header value characters: {0}\")]\n    InvalidHeaderValue(#[from] reqwest::header::InvalidHeaderValue),\n\n    #[error(\"response received from connector is too large: {0}\")]\n    ResponseTooLarge(String),\n\n    #[error(\"{0}\")]\n    Connector(ConnectorError),\n\n    #[error(\"invalid connector error: {0}\")]\n    InvalidConnector(InvalidConnectorError),\n\n    #[error(\"Error while executing pre ndc request plugin: {0}\")]\n    PreNdcRequestPluginError(#[from] pre_ndc_request_plugin::execute::Error),\n\n    #[error(\"Error while executing pre ndc response plugin: {0}\")]\n    PreNdcResponsePluginError(#[from] pre_ndc_response_plugin::execute::Error),\n}\n\nimpl tracing_util::TraceableError for Error {\n    fn visibility(&self) -> tracing_util::ErrorVisibility {\n        match self {\n            // Invalid connector errors with 5xx status codes are considered user errors\n            // (connector implementation issues, not engine issues)\n            Self::InvalidConnector(InvalidConnectorError { status, .. })","sourceCodeStart":34,"sourceCodeEnd":70,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/v3/crates/execute/src/ndc/client.rs#L34-L70","documentation":"Transparent passthrough variant of the connector client's error enum: a nested ConnectorError is forwarded with its own message unchanged ('{0}'). It represents a structured error response received from the NDC connector over HTTP, distinct from transport-level issues like invalid headers (InvalidHeaderValue) or oversized responses (ResponseTooLarge).","triggerScenarios":"Any NDC HTTP request to a connector that returns a well-formed error response — the client parses it into ConnectorError and re-exposes it via this transparent variant (e.g. query errors, connector-side validation failures).","commonSituations":"Connector reports query/capability errors, connector and metadata version mismatch, or the connector backing a data source hits its own internal limits and reports them structurally.","solutions":["Read the inner ConnectorError message/response — it is the authoritative cause","Check the connector's own logs for the failing request","Verify metadata matches the connector's current schema and capabilities","Reproduce the request directly against the connector (curl) to isolate engine vs connector"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":"fn is_connector_error(e: &ClientError) -> bool { matches!(e, ClientError::Connector(_)) }","tryCatchPattern":"Match ClientError::Connector(err) and map err.error_response into the GraphQL error extensions so clients see the connector's structured error; log request_id for tracing.","preventionTips":["Reproduce failing requests directly against the connector to isolate causes","Monitor connector error rates and alert on spikes","Keep connector and metadata schemas in sync via contract tests"],"tags":["ndc","connector","http","passthrough","rust"],"backgroundTag":"connector-error-response","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}