{"record":{"id":"3879152da21df878","repo":"nautechsystems/nautilus_trader","slug":"sbe-encoding-is-not-supported-for-redis-cache-payl","errorCode":null,"errorMessage":"SBE encoding is not supported for Redis cache payloads","messagePattern":"SBE encoding is not supported for Redis cache payloads","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/infrastructure/src/redis/queries.rs","lineNumber":96,"sourceCode":"    pub fn serialize_payload<T: Serialize>(\n        encoding: SerializationEncoding,\n        payload: &T,\n    ) -> anyhow::Result<Vec<u8>> {\n        match encoding {\n            SerializationEncoding::MsgPack => {\n                let mut value = serde_json::to_value(payload)?;\n                convert_timestamps(&mut value);\n                rmp_serde::to_vec(&value)\n                    .map_err(|e| anyhow::anyhow!(\"Failed to serialize msgpack `payload`: {e}\"))\n            }\n            SerializationEncoding::Json => {\n                let mut value = serde_json::to_value(payload)?;\n                convert_timestamps(&mut value);\n                serde_json::to_vec(&value)\n                    .map_err(|e| anyhow::anyhow!(\"Failed to serialize json `payload`: {e}\"))\n            }\n            SerializationEncoding::Sbe => {\n                anyhow::bail!(\"SBE encoding is not supported for Redis cache payloads\")\n            }\n            SerializationEncoding::Capnp => {\n                anyhow::bail!(\"Cap'n Proto encoding is not supported for Redis cache payloads\")\n            }\n        }\n    }\n\n    /// Deserializes the given byte slice `payload` into type `T` using the specified `encoding`.\n    ///\n    /// # Errors\n    ///\n    /// Returns an error if deserialization from the chosen encoding fails or converting to the target type fails.\n    pub fn deserialize_payload<T: DeserializeOwned>(\n        encoding: SerializationEncoding,\n        payload: &[u8],\n    ) -> anyhow::Result<T> {\n        let mut value = match encoding {\n            SerializationEncoding::MsgPack => rmp_serde::from_slice(payload)","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/nautechsystems/nautilus_trader/blob/18893faf8b356be3320add8de2f861b0b647cf06/crates/infrastructure/src/redis/queries.rs#L78-L114","documentation":"serialize_payload in the Redis query/cache layer supports only MsgPack and Json encodings for turning a payload into bytes stored in Redis. SBE (Simple Binary Encoding) has no serializer wired into this code path, so requesting it is rejected immediately with an anyhow error rather than producing corrupt or empty data.","triggerScenarios":"Calling serialize_payload (or the cache/query function that takes a SerializationSetting/SerializationEncoding) with SerializationEncoding::Sbe — e.g. a RedisCacheDatabase configured with an SBE serialization setting.","commonSituations":"Reusing a serialization config from a different integration (message bus / other backends do support SBE) when setting up the Redis cache; copy-pasted config where serialization setting is shared between clients.","solutions":["Change the cache serialization setting to SerializationEncoding::MsgPack or Json for Redis cache usage.","Separate the serialization config for the Redis client from any SBE-configured clients so SBE is not inherited.","If SBE support is genuinely needed for Redis cache payloads, implement the SBE branch in serialize_payload in crates/infrastructure/src/redis/queries.rs.","Validate the configured encoding at startup and fail fast with a clear config error before connecting."],"exampleFix":"// before\nlet settings = SerializationSettings { encoding: SerializationEncoding::Sbe, .. };\n// after\nlet settings = SerializationSettings { encoding: SerializationEncoding::MsgPack, .. };","handlingStrategy":"validation","validationCode":"// Rust: validate encoding before configuring the Redis cache\nfn supports_cache_encoding(e: SerializationEncoding) -> bool {\n    matches!(e, SerializationEncoding::MsgPack | SerializationEncoding::Json)\n}\nassert!(supports_cache_encoding(settings.encoding), \"Redis cache requires MsgPack or Json\");","typeGuard":"fn is_cache_compatible(e: &SerializationEncoding) -> bool {\n    matches!(e, SerializationEncoding::MsgPack | SerializationEncoding::Json)\n}","tryCatchPattern":"match serialize_payload(&payload, &settings) {\n    Ok(bytes) => { /* store */ }\n    Err(e) if e.to_string().contains(\"not supported for Redis cache\") => {\n        return Err(anyhow::anyhow!(\"config error: use MsgPack/Json for Redis cache\"));\n    }\n    Err(e) => return Err(e.into()),\n}","preventionTips":["Configure Redis cache clients with MsgPack or Json only.","Do not share a single SerializationSettings across SBE message-bus clients and the Redis cache.","Validate the encoding setting at client construction, not at first write.","Check the SerializationEncoding enum arms in serialize_payload before choosing an encoding."],"tags":["redis","serialization","unsupported-encoding","sbe"],"backgroundTag":"unsupported-operation","analyzedSha":"18893faf8b356be3320add8de2f861b0b647cf06","analyzedAt":"2026-09-08T20:49:34.690Z","contentChangedAt":"2026-09-08T20:49:34.690Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}