{"record":{"id":"d3426581dbba9f09","repo":"risingwavelabs/risingwave","slug":"missing-config-d34265","errorCode":null,"errorMessage":"missing config: {}","messagePattern":"missing config: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/stream/src/from_proto/sink.rs","lineNumber":253,"sourceCode":"            }\n            if let Some(password) = jdbc_url.password {\n                properties_with_secret.insert(\"password\".to_owned(), password);\n            }\n            if let Some(table_name) = properties_with_secret.get(\"table.name\") {\n                properties_with_secret.insert(\"table\".to_owned(), table_name.clone());\n            }\n            if let Some(schema_name) = properties_with_secret.get(\"schema.name\") {\n                properties_with_secret.insert(\"schema\".to_owned(), schema_name.clone());\n            }\n            // TODO(kwannoel): Do we need to handle jdbc.query.timeout?\n        }\n\n        let connector = {\n            let sink_type = properties_with_secret\n                .get(CONNECTOR_TYPE_KEY)\n                .ok_or_else(|| {\n                    StreamExecutorError::from((\n                        SinkError::Config(anyhow!(\"missing config: {}\", CONNECTOR_TYPE_KEY)),\n                        sink_id,\n                    ))\n                })?;\n\n            let sink_type_str = sink_type.to_lowercase();\n            match_sink_name_str!(\n                sink_type_str.as_str(),\n                SinkType,\n                Ok(SinkType::SINK_NAME),\n                |other: &str| {\n                    Err(StreamExecutorError::from((\n                        SinkError::Config(anyhow!(\"unsupported sink connector {}\", other)),\n                        sink_id,\n                    )))\n                }\n            )?\n        };\n","sourceCodeStart":235,"sourceCodeEnd":271,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/stream/src/from_proto/sink.rs#L235-L271","documentation":"The sink executor requires a `connector` entry in the sink's user properties to select which sink implementation to build. The property is absent, so sink construction fails with a config error wrapped together with the sink ID. This fails at executor startup rather than dropping the sink silently.","triggerScenarios":"Creating a sink without `WITH (connector = '...')` (or the property being lost between meta and the compute node), so `properties_with_secret.get(CONNECTOR_TYPE_KEY)` returns None in `new_boxed_executor`.","commonSituations":"Typo such as `connecter` or `type` instead of `connector`; creating a sink through an API/client that drops WITH options; restoring from a state where properties were not persisted; older clients not supporting the connector option.","solutions":["Add the connector option: `CREATE SINK s FROM t WITH (connector = 'kafka', ...)`.","Check for typos in the property key — it must be exactly `connector`.","Drop and recreate the sink so the options are re-persisted and propagated.","Check the sink's properties via the catalog (`SHOW SINKS` / rw_catalog) to confirm the option is stored."],"exampleFix":"-- before\nCREATE SINK s FROM t WITH (format = 'debezium');\n-- after\nCREATE SINK s FROM t WITH (connector = 'kafka', properties.bootstrap.server = 'localhost:9092', format = 'debezium');","handlingStrategy":"validation","validationCode":"-- Verify the connector option exists before relying on the sink\nSELECT name, properties FROM rw_catalog.rw_sinks WHERE name = 'my_sink';\n-- properties must contain key 'connector'","typeGuard":null,"tryCatchPattern":"// application-side: catch sink creation/startup failure and inspect properties\ntry {\n    createSink(props);\n} catch (e) {\n    if (String(e).includes('missing config: connector')) {\n        // re-create sink with connector option set\n    }\n}","preventionTips":["Always include `connector = '<name>'` in CREATE SINK WITH options.","Check for key typos (`connector`, not `connecter`).","Verify persisted properties via the catalog after creating a sink.","Upgrade clients/drivers that may drop WITH options."],"tags":["sink","configuration","connector"],"backgroundTag":"missing-required-config-field","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"}