{"record":{"id":"ce22fa19579bf812","repo":"quickwit-oss/quickwit","slug":"unsupported-split-recovery-metadata-format-version","errorCode":null,"errorMessage":"unsupported split recovery metadata format version: {version}","messagePattern":"unsupported split recovery metadata format version: (.+?)","errorType":"exception","errorClass":"io::Error (InvalidData)","httpStatus":null,"severity":"error","filePath":"quickwit/quickwit-proto/src/metastore/mod.rs","lineNumber":69,"sourceCode":"            .expect(\"encoding a protobuf into a Vec should not fail\");\n        output\n    }\n\n    /// Deserializes split recovery metadata embedded in a split bundle.\n    pub fn deserialize(mut bytes: &[u8]) -> io::Result<Self> {\n        use prost::Message;\n\n        if bytes.len() < SPLIT_RECOVERY_METADATA_HEADER_LEN\n            || &bytes[..SPLIT_RECOVERY_METADATA_MAGIC.len()] != SPLIT_RECOVERY_METADATA_MAGIC\n        {\n            return Err(io::Error::new(\n                io::ErrorKind::InvalidData,\n                \"invalid split recovery metadata magic number\",\n            ));\n        }\n        let version = bytes[SPLIT_RECOVERY_METADATA_MAGIC.len()];\n        if version != SPLIT_RECOVERY_METADATA_FORMAT_VERSION {\n            return Err(io::Error::new(\n                io::ErrorKind::InvalidData,\n                format!(\"unsupported split recovery metadata format version: {version}\"),\n            ));\n        }\n        bytes = &bytes[SPLIT_RECOVERY_METADATA_HEADER_LEN..];\n        Self::decode(bytes).map_err(|error| io::Error::new(io::ErrorKind::InvalidData, error))\n    }\n}\n\n#[cfg(test)]\nmod split_recovery_metadata_tests {\n    use super::SplitRecoveryMetadata;\n    use crate::types::{DocMappingUid, IndexUid};\n\n    #[test]\n    fn test_split_recovery_metadata_roundtrip_and_unknown_fields() {\n        let metadata = SplitRecoveryMetadata {\n            split_id: \"split-a\".to_string(),","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/quickwit-oss/quickwit/blob/a39730c5cdcd1a4fe798403737ae293999ea21f8/quickwit/quickwit-proto/src/metastore/mod.rs#L51-L87","documentation":"After the magic header validates, `SplitRecoveryMetadata::deserialize` reads a one-byte format version and compares it against SPLIT_RECOVERY_METADATA_FORMAT_VERSION. A valid envelope written by a different (older or newer) format version is rejected with InvalidData.","triggerScenarios":"Deserializing a blob whose magic matches but whose version byte differs from the current SPLIT_RECOVERY_METADATA_FORMAT_VERSION — typically data written by another Quickwit release.","commonSituations":"Rolling upgrades/downgrades where nodes with different versions read each other's recovery metadata; restoring backups produced by an older release; replaying queued messages from a previous format.","solutions":["Align all Quickwit nodes to one version so the format version matches.","Discard and regenerate recovery metadata created by the incompatible version.","If a migration is needed, upgrade through the release that supports the old version rather than jumping directly.","Inspect the version byte in the blob to identify which writer produced it."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"fn version_supported(bytes: &[u8]) -> bool {\n    bytes.len() >= 6 && bytes[5] == SPLIT_RECOVERY_METADATA_FORMAT_VERSION\n}","typeGuard":null,"tryCatchPattern":"match SplitRecoveryMetadata::deserialize(&bytes) {\n    Err(e) if e.to_string().contains(\"format version\") => {\n        // blob written by another Quickwit version: migrate or regenerate\n    }\n    other => other?,\n}","preventionTips":["Keep all cluster nodes on the same Quickwit version.","During rolling upgrades, finish draining old-format metadata before removing old binaries.","Record the writer version alongside serialized blobs for diagnostics."],"tags":["io","serialization","versioning","invalid-data"],"backgroundTag":"unsupported-enum-value","analyzedSha":"a39730c5cdcd1a4fe798403737ae293999ea21f8","analyzedAt":"2026-09-08T13:19:37.784Z","contentChangedAt":"2026-09-08T13:19:37.784Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}