{"record":{"id":"d97cd2829e24d8ec","repo":"influxdata/influxdb","slug":"unknown-server-error-0","errorCode":null,"errorMessage":"Unknown server error: {0}","messagePattern":"Unknown server error: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"core/influxdb_iox_client/src/client/error.rs","lineNumber":69,"sourceCode":"    fn try_decode(status: &Status) -> Option<Self> {\n        generated_types::google::decode_not_found(status).next()\n    }\n}\n\nimpl ServerErrorDetails for PreconditionViolation {\n    fn try_decode(status: &Status) -> Option<Self> {\n        generated_types::google::decode_precondition_violation(status).next()\n    }\n}\n\n/// The errors returned by this client\n#[derive(Error, Debug)]\n#[expect(missing_docs)]\npub enum Error {\n    #[error(\"The operation was cancelled: {0}\")]\n    Cancelled(ServerError<()>),\n\n    #[error(\"Unknown server error: {0}\")]\n    Unknown(ServerError<()>),\n\n    #[error(\"Client specified an invalid argument: {0}\")]\n    InvalidArgument(Box<ServerError<FieldViolation>>),\n\n    #[error(\"Deadline expired before operation could complete: {0}\")]\n    DeadlineExceeded(ServerError<()>),\n\n    #[error(\"{0}\")]\n    NotFound(Box<ServerError<NotFound>>),\n\n    #[error(\"Some entity that we attempted to create already exists: {0}\")]\n    AlreadyExists(Box<ServerError<AlreadyExists>>),\n\n    #[error(\"The caller does not have permission to execute the specified operation: {0}\")]\n    PermissionDenied(ServerError<()>),\n\n    #[error(\"Some resource has been exhausted: {0}\")]","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/core/influxdb_iox_client/src/client/error.rs#L51-L87","documentation":"The `Error::Unknown` variant of the influxdb_iox_client client error enum. It wraps a `ServerError<()>` and is produced when the server returned a gRPC status code the client did not explicitly map (an unrecognized or unspecified status). It means the client cannot classify what went wrong on the server side.","triggerScenarios":"A gRPC/arrow-flight or HTTP call to an InfluxDB IOx server returned a status code outside the explicitly handled set (Cancelled, InvalidArgument, DeadlineExceeded, NotFound, etc.), or an 'UNKNOWN' status was transmitted, so the `From<ServerError>` conversion falls through to `Error::Unknown`.","commonSituations":"Talking to an IOx server of a different version that emits newer/renamed status codes; a proxy or load balancer returning a malformed error response; genuine server panics or crashes surfaced as an opaque gRPC UNKNOWN status.","solutions":["Inspect the wrapped ServerError payload (message, source) to see what the server actually returned.","Check client/server version compatibility; upgrade or downgrade the influxdb_iox_client crate to match the server.","Check server logs for the corresponding request to find the root cause (panic, internal error).","Retry the request if transient; report a bug with the full wrapped payload if the status is persistently unmapped."],"exampleFix":"// before\nlet err = client.query(request).await.unwrap();\n// after\nmatch client.query(request).await {\n    Ok(resp) => resp,\n    Err(e) => {\n        if let Error::Unknown(se) = &e {\n            tracing::error!(\"unmapped server status: {}\", se);\n        }\n        return Err(e);\n    }\n}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":"fn is_unknown(e: &Error) -> bool { matches!(e, Error::Unknown(_)) }","tryCatchPattern":"match result {\n    Err(Error::Unknown(se)) => { log::error!(\"unmapped server error: {se}\"); fallback_or_retry() }\n    other => other,\n}","preventionTips":["Keep client crate version aligned with the server version so all statuses are mapped.","Always log the wrapped ServerError payload, not just the display string.","Wrap IOx calls in a helper that classifies error variants centrally."],"tags":["grpc","network","api-error-response","influxdb"],"backgroundTag":"unexpected-api-response-shape","analyzedSha":"06200ef96ba82c5f6727e5038a83af8e722c6875","analyzedAt":"2026-09-19T12:55:30.003Z","contentChangedAt":"2026-09-19T12:55:30.003Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}