{"record":{"id":"1f9e2a6daeeda09a","repo":"linera-io/linera-protocol","slug":"we-should-have-one-two-or-three-parts","errorCode":null,"errorMessage":"We should have one, two or three parts","messagePattern":"We should have one, two or three parts","errorType":"validation","errorClass":"anyhow","httpStatus":null,"severity":"error","filePath":"linera-storage-runtime/src/storage_config.rs","lineNumber":175,"sourceCode":"                    .expect(\"validated by the parts length check above\");\n                let spawn_mode = match spawn_mode_name {\n                    \"spawn_blocking\" => Ok(RocksDbSpawnMode::SpawnBlocking),\n                    \"block_in_place\" => Ok(RocksDbSpawnMode::BlockInPlace),\n                    \"runtime\" => Ok(RocksDbSpawnMode::get_spawn_mode_from_runtime()),\n                    _ => Err(anyhow!(\"Failed to parse {spawn_mode_name} as a spawn_mode\")),\n                }?;\n                let namespace = if parts.len() == 2 {\n                    DEFAULT_NAMESPACE.to_string()\n                } else {\n                    parts[2].to_string()\n                };\n                let inner_storage_config = InnerStorageConfig::RocksDb { path, spawn_mode };\n                return Ok(StorageConfig {\n                    inner_storage_config,\n                    namespace,\n                });\n            }\n            bail!(\"We should have one, two or three parts\");\n        }\n        #[cfg(feature = \"scylladb\")]\n        if let Some(s) = input.strip_prefix(SCYLLA_DB) {\n            let mut uri: Option<String> = None;\n            let mut namespace: Option<String> = None;\n            let parse_error: &'static str = \"Correct format is tcp:db_hostname:port.\";\n            if !s.is_empty() {\n                let mut parts = s.split(':');\n                while let Some(part) = parts.next() {\n                    match part {\n                        \"tcp\" => {\n                            let address = parts.next().ok_or_else(|| {\n                                anyhow!(\"Failed to find address for {s}. {parse_error}\")\n                            })?;\n                            let port_str = parts.next().ok_or_else(|| {\n                                anyhow!(\"Failed to find port for {s}. {parse_error}\")\n                            })?;\n                            let port = NonZeroU16::from_str(port_str).map_err(|_| {","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/linera-io/linera-protocol/blob/6c226ddcb332ef55118dc8d0aafbd093d5420899/linera-storage-runtime/src/storage_config.rs#L157-L193","documentation":"Raised while parsing a `rocksdb:` storage configuration in `StorageConfig::from_str` (linera-storage-runtime). After the prefix, the remainder is split on ':' and only 1 (directory), 2 (directory:spawn_mode), or 3 (directory:spawn_mode:namespace) parts are accepted; this bail fires for any other count (typically 4+ parts).","triggerScenarios":"Passing `rocksdb:/tmp/db:block_in_place:my_ns:extra`; a directory path or namespace containing colons; accidentally repeating a segment.","commonSituations":"Appending a segment copied from a scylladb/dual config string; absolute paths with stray colons; scripts concatenating config pieces with ':' separators.","solutions":["Reduce to `rocksdb:<directory>`, `rocksdb:<directory>:<spawn_mode>`, or `rocksdb:<directory>:<spawn_mode>:<namespace>`","Remove the extra colon-separated segment","Use directory paths and namespaces without ':' characters"],"exampleFix":"# before\n--storage rocksdb:/tmp/db:block_in_place:my_ns:extra\n\n# after\n--storage rocksdb:/tmp/db:block_in_place:my_ns","handlingStrategy":"validation","validationCode":"// Rust: pre-validate a rocksdb storage string before FromStr\nfn is_valid_rocksdb_config(s: &str) -> bool {\n    let Some(rest) = s.strip_prefix(\"rocksdb:\") else { return false };\n    (1..=3).contains(&rest.split(':').count())\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Allowed forms: rocksdb:<dir> | rocksdb:<dir>:<spawn_mode> | rocksdb:<dir>:<spawn_mode>:<namespace>","Keep directories and namespaces free of ':' characters"],"tags":["config","parsing","rocksdb","linera-storage"],"backgroundTag":"connection-string-parse-error","analyzedSha":"6c226ddcb332ef55118dc8d0aafbd093d5420899","analyzedAt":"2026-08-22T22:49:09.787Z","schemaVersion":2},"datasetVersion":"2026-08-23T01:17:44.959Z"}