{"record":{"id":"91a57d3fd0b2d5f3","repo":"bottlerocket-os/bottlerocket","slug":"keytoolongsnafu","errorCode":"KeyTooLongSnafu","errorMessage":"Key name beyond maximum length {name}: {max}","messagePattern":"Key name beyond maximum length (.+?): (.+?)","errorType":"validation","errorClass":"datastore::Error","httpStatus":null,"severity":"error","filePath":"sources/api/datastore/src/key.rs","lineNumber":200,"sourceCode":"    ///\n    /// Fails if the new key would be invalid, e.g. too long.\n    pub(super) fn append_key(&self, key: &Key) -> Result<Self> {\n        let our_segments = self.segments().iter();\n        let their_segments = key.segments().iter();\n\n        let new_segments: Vec<_> = our_segments.chain(their_segments).collect();\n        Self::from_segments(KeyType::Data, &new_segments)\n    }\n\n    /// Additional safety checks for parsed or generated keys.\n    fn check_key<S1, S2>(key_type: KeyType, name: S1, segments: &[S2]) -> Result<()>\n    where\n        S1: AsRef<str>,\n        S2: AsRef<str>,\n    {\n        let name = name.as_ref();\n\n        ensure!(\n            name.len() <= MAX_KEY_NAME_LENGTH,\n            error::KeyTooLongSnafu {\n                name,\n                max: MAX_KEY_NAME_LENGTH,\n            }\n        );\n\n        match key_type {\n            KeyType::Data => {\n                ensure!(\n                    !segments.is_empty(),\n                    error::InvalidKeySnafu {\n                        name,\n                        msg: \"data keys must have at least one segment\",\n                    }\n                );\n            }\n            KeyType::Meta => {","sourceCodeStart":182,"sourceCodeEnd":218,"githubUrl":"https://github.com/bottlerocket-os/bottlerocket/blob/0be31b34d2ff8a7558cd78b3a2e8035207f82597/sources/api/datastore/src/key.rs#L182-L218","documentation":"Key names are capped at MAX_KEY_NAME_LENGTH characters; `check_key` rejects any name longer than this during key construction. Long names would overflow filesystem filename limits or internal buffers downstream.","triggerScenarios":"Creating a Key (via parse/constructor paths that call check_key) whose name exceeds MAX_KEY_NAME_LENGTH — e.g. deeply nested dotted segments or a very long single segment from user/device IDs.","commonSituations":"Building keys by concatenating tenant + device + timestamp identifiers without checking length; importing legacy data with unrestricted key sizes.","solutions":["Shorten the key name before constructing the Key (hash or truncate long identifier portions)","Increase MAX_KEY_NAME_LENGTH if the deployment's filesystem supports longer names (and verify downstream consumers)","Split overly hierarchical keys into fewer segments"],"exampleFix":"// before\nlet key = Key::from_string(format!(\"{}.{}.{}\", tenant, device, raw_blob_id))?;\n// after\nlet short_id = sha256_hex(raw_blob_id.as_bytes())[..32].to_string();\nlet key = Key::from_string(format!(\"{}.{}.{}\", tenant, device, short_id))?;","handlingStrategy":"validation","validationCode":"name.len() <= MAX_KEY_NAME_LENGTH","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Hash long identifiers"],"tags":["datastore","key","validation"],"backgroundTag":"value-out-of-range","analyzedSha":"0be31b34d2ff8a7558cd78b3a2e8035207f82597","analyzedAt":"2026-09-10T14:35:41.363Z","contentChangedAt":"2026-09-10T14:35:41.363Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}