{"record":{"id":"1a38af2653641bfe","repo":"risingwavelabs/risingwave","slug":"connector-is-not-supported","errorCode":null,"errorMessage":"connector '{}' is not supported","messagePattern":"connector '(.+?)' is not supported","errorType":"validation","errorClass":"anyhow::Error (ConnectorResult)","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/mod.rs","lineNumber":488,"sourceCode":"            format_desc: format_desc_with_secret,\n            db_name: sink_catalog.db_name,\n            sink_from_name: sink_catalog.sink_from_name,\n        })\n    }\n}\n\npub fn enforce_secret_sink(props: &impl WithPropertiesExt) -> ConnectorResult<()> {\n    use crate::enforce_secret::EnforceSecret;\n\n    let connector = props\n        .get_connector()\n        .ok_or_else(|| anyhow!(\"Must specify 'connector' in WITH clause\"))?;\n    let key_iter = props.key_iter();\n    match_sink_name_str!(\n        connector.as_str(),\n        PropType,\n        PropType::enforce_secret(key_iter),\n        |other| bail!(\"connector '{}' is not supported\", other)\n    )\n}\n\npub static GLOBAL_SINK_METRICS: LazyLock<SinkMetrics> =\n    LazyLock::new(|| SinkMetrics::new(&GLOBAL_METRICS_REGISTRY));\n\n#[derive(Clone)]\npub struct SinkMetrics {\n    pub sink_commit_duration: LabelGuardedHistogramVec,\n    pub connector_sink_rows_received: LabelGuardedIntCounterVec,\n\n    // Log store writer metrics\n    pub log_store_first_write_epoch: LabelGuardedIntGaugeVec,\n    pub log_store_latest_write_epoch: LabelGuardedIntGaugeVec,\n    pub log_store_write_rows: LabelGuardedIntCounterVec,\n\n    // Log store reader metrics\n    pub log_store_latest_read_epoch: LabelGuardedIntGaugeVec,","sourceCodeStart":470,"sourceCodeEnd":506,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/mod.rs#L470-L506","documentation":"After extracting the connector name, `enforce_secret_sink` dispatches it via `match_sink_name_str!` to `PropType::enforce_secret`; an unrecognized connector name falls into the fallback arm which bails with this message. The connector exists syntactically but is not a registered sink connector in this build.","triggerScenarios":"Calling `enforce_secret_sink` (via `gen_sink_plan`) with `connector` set to a name not matched by `match_sink_name_str!` — typo, source-only connector, or unsupported/unreleased connector.","commonSituations":"Typo like `connector='kafak'`; attempting a sink type not enabled in the deployed version; mixing up source and sink connector names.","solutions":["Use a supported sink connector name (see RisingWave sink docs)","Fix the typo in the WITH clause","Enable/upgrade to a version where the connector is supported"],"exampleFix":"// before\nWITH (connector = 's3_infected')\n// after\nWITH (connector = 'iceberg')","handlingStrategy":"validation","validationCode":"const SUPPORTED: &[&str] = &[\"kafka\", \"iceberg\", \"jdbc\", /* ... */];\nif let Some(c) = props.get(\"connector\") {\n    if !SUPPORTED.contains(&c.to_lowercase().as_str()) {\n        return Err(anyhow!(\"connector '{c}' is not supported\"));\n    }\n}","typeGuard":null,"tryCatchPattern":"enforce_secret_sink(&props).map_err(|e| {\n    if e.to_string().contains(\"is not supported\") {\n        anyhow!(\"unknown sink connector — see docs for supported list\")\n    } else { e }\n})?;","preventionTips":["Use only documented sink connector names","Verify connector support in the deployed RisingWave version","CI-lint CREATE SINK statements against a connector whitelist"],"tags":["rust","config","sink","connector"],"backgroundTag":"invalid-enum-value","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"}