{"record":{"id":"351d30f32ee82ab5","repo":"influxdata/influxdb","slug":"unknown-ipc-message-type-0","errorCode":null,"errorMessage":"Unknown IPC message type: {0:?}","messagePattern":"Unknown IPC message type: (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"core/influxdb_iox_client/src/client/flight/mod.rs","lineNumber":72,"sourceCode":"    /// message as a dictionary batch returned `None`. Indicates malformed\n    /// Flight data from the server.\n    #[error(\"Message with header of type dictionary batch could not return a dictionary batch\")]\n    CouldNotGetDictionaryBatch,\n\n    /// Arrow Flight handshake failed.\n    #[error(\"Handshake failed: {0}\")]\n    HandshakeFailed(String),\n\n    /// Serializing the protobuf structs into bytes failed.\n    #[error(transparent)]\n    Serialization(#[from] prost::EncodeError),\n\n    /// Deserializing the protobuf structs from bytes failed.\n    #[error(transparent)]\n    Deserialization(#[from] prost::DecodeError),\n\n    /// Unknown IPC message type.\n    #[error(\"Unknown IPC message type: {0:?}\")]\n    UnknownMessageType(ipc::MessageHeader),\n\n    /// Unexpected schema change.\n    #[error(\"Unexpected schema change\")]\n    UnexpectedSchemaChange,\n}\n\nimpl Error {\n    /// Extracts the underlying tonic status, if any\n    pub fn tonic_status(&self) -> Option<&Status> {\n        if let Self::ArrowFlightError(FlightError::Tonic(status)) = self {\n            Some(status)\n        } else {\n            None\n        }\n    }\n}\n","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/influxdata/influxdb/blob/06200ef96ba82c5f6727e5038a83af8e722c6875/core/influxdb_iox_client/src/client/flight/mod.rs#L54-L90","documentation":"Error variant `UnknownMessageType(ipc::MessageHeader)` thrown while decoding the Arrow Flight IPC stream: the client received an IPC message whose header type it does not know how to handle. Indicates the server sent data outside the set of message types the client understands, i.e. malformed or unsupported Flight data.","triggerScenarios":"Reading a Flight data stream (`select`/query results) when the server emits an IPC `MessageHeader` variant not handled by the client's match (e.g. dictionary, tensor, or a newer IPC message type added on the server but not supported by this client version).","commonSituations":"Client and Arrow/Flight library version mismatch where the server encodes newer IPC message types; a corrupt or truncated IPC stream from a failing server; proxy/middleware rewriting Flight frames.","solutions":["Upgrade the influxdb_iox_client / arrow dependencies so client IPC support matches the server version","Check server logs for what message type it emitted and whether it is intentional","Rule out intermediaries (proxies) altering the gRPC stream","Capture the Debug value in the error to identify the exact unsupported header type","Pin matching versions of arrow-flight and datafusion on both sides"],"exampleFix":"// before\nlet batch = client.query(sql).await?;\n// after\nlet batch = client.query(sql).await.map_err(|e| {\n    if matches!(e, Error::UnknownMessageType(_)) {\n        eprintln!(\"server sent unsupported IPC frame; check client/server arrow version parity\");\n    }\n    e\n})?;","handlingStrategy":"try-catch","validationCode":"// check version parity of arrow-flight/arrow-ipc client vs server before decoding","typeGuard":"fn is_unknown_message_type(e: &Error) -> bool {\n    matches!(e, Error::UnknownMessageType(_))\n}","tryCatchPattern":"match stream.next().await {\n    Err(Error::UnknownMessageType(hdr)) => {\n        eprintln!(\"unsupported IPC frame {hdr:?}; upgrade client libs\");\n    }\n    other => { /* normal handling */ }\n}","preventionTips":["Pin matching arrow/arrow-flight versions on client and server","Log the Debug header type from the error for diagnosis","Avoid proxies that rewrite gRPC frames","Test against the exact server version deployed in production"],"tags":["arrow-flight","ipc","protocol","version-mismatch"],"backgroundTag":"unexpected-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"}