{"record":{"id":"5286642160b6bdac","repo":"risingwavelabs/risingwave","slug":"parsing-default-namespace-failed","errorCode":null,"errorMessage":"parsing default namespace failed","messagePattern":"parsing default namespace failed","errorType":"exception","errorClass":"SinkError::Mongodb","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/mongodb.rs","lineNumber":411,"sourceCode":"}\n\nimpl MongodbSinkWriter {\n    pub async fn new(\n        name: String,\n        config: MongodbConfig,\n        schema: Schema,\n        pk_indices: Vec<usize>,\n        is_append_only: bool,\n    ) -> Result<Self> {\n        let client = config.common.build_client().await?;\n\n        let default_namespace =\n            config\n                .common\n                .collection_name\n                .parse()\n                .map_err(|err: mongodb::error::Error| {\n                    SinkError::Mongodb(anyhow!(err).context(\"parsing default namespace failed\"))\n                })?;\n\n        let coll_name_field_index =\n            config\n                .collection_name_field\n                .as_ref()\n                .and_then(|coll_name_field| {\n                    schema\n                        .names_str()\n                        .iter()\n                        .position(|&name| coll_name_field == name)\n                });\n\n        let col_indices = if let Some(coll_name_field_index) = coll_name_field_index\n            && config.drop_collection_name_field\n        {\n            (0..schema.fields.len())\n                .filter(|idx| *idx != coll_name_field_index)","sourceCodeStart":393,"sourceCodeEnd":429,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/mongodb.rs#L393-L429","documentation":"When constructing the sink (`new`), the configured `collection_name` is re-parsed into a MongoDB `Namespace` to obtain the default target (database + collection). A parse failure here is wrapped as 'parsing default namespace failed'. This is the runtime-constructor counterpart of the validate-time check (error 743), surfacing when the sink is instantiated (e.g., after recovery) even if validation was bypassed.","triggerScenarios":"Instantiating the mongodb sink with a `collection_name` that is not a valid `db.collection` namespace — e.g., missing separator, empty string, invalid characters.","commonSituations":"Config drift between validate and create; sinks created before stricter validation; programmatic/SDK-driven sink creation with a malformed name; recovery re-running `new` on stored options.","solutions":["Fix the `collection` option to be in `database.collection` form with valid characters.","Drop and recreate the sink with a corrected collection name.","Check the wrapped mongodb::error::Error in the chain for the exact parse failure reason."],"exampleFix":"// before\nlet config = MongodbConfig::from_btreemap(properties_with(collection = \"justcoll\"));\n// after\nlet config = MongodbConfig::from_btreemap(properties_with(collection = \"mydb.justcoll\"));","handlingStrategy":"try-catch","validationCode":"// reuse the same check as error 743 before constructing the sink\nif (!/^[^\\s.]+\\.[^\\s.]+$/.test(options.collection ?? \"\")) {\n  throw new Error(`invalid namespace: ${options.collection}`);\n}","typeGuard":null,"tryCatchPattern":"try {\n  const sink = await MongodbSink::new(config, ...);\n} catch (e) {\n  if (String(e).includes(\"parsing default namespace failed\")) {\n    // fix collection.name to database.collection form, then recreate the sink\n  }\n  throw e;\n}","preventionTips":["Validate collection.name at config-load time","Centralize namespace parsing in one helper","Recreate sinks whose stored options predate stricter validation"],"tags":["mongodb","sink","namespace","config"],"backgroundTag":"invalid-argument-format","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}