{"record":{"id":"32cae003ed60d550","repo":"risingwavelabs/risingwave","slug":"unknown-sink-connector-sink-name","errorCode":null,"errorMessage":"Unknown sink connector: {sink_name}","messagePattern":"Unknown sink connector: (.+?)","errorType":"validation","errorClass":"ConnectorError","httpStatus":null,"severity":"error","filePath":"src/connector/src/allow_alter_on_fly_fields.rs","lineNumber":530,"sourceCode":"}\n\n/// Checks if all given fields are allowed to be altered on the fly for the specified sink connector.\n/// Returns Ok(()) if all fields are allowed, otherwise returns a `ConnectorError`.\npub fn check_sink_allow_alter_on_fly_fields(\n    sink_name: &str,\n    fields: &[String],\n) -> crate::error::ConnectorResult<()> {\n    // TODO(#24846): JDBC sink currently uses `()` as sink config type in `for_all_sinks!`,\n    // so it cannot have an isolated key in `SINK_ALLOW_ALTER_ON_FLY_FIELDS`.\n    // Reuse the JDBC entry in `CONNECTION_ALLOW_ALTER_ON_FLY_FIELDS` for now.\n    // TODO(#24846): remove this special case after JDBC sink has a dedicated config type\n    // and allow-alter fields are generated directly into `SINK_ALLOW_ALTER_ON_FLY_FIELDS`.\n    let allowed_fields = if sink_name == JdbcSink::SINK_NAME {\n        CONNECTION_ALLOW_ALTER_ON_FLY_FIELDS.get(JdbcSink::SINK_NAME)\n    } else {\n        // Convert sink name to the type name key\n        let Some(type_name) = sink_properties::sink_name_to_config_type_name(sink_name) else {\n            return Err(ConnectorError::from(anyhow::anyhow!(\n                \"Unknown sink connector: {sink_name}\"\n            )));\n        };\n        SINK_ALLOW_ALTER_ON_FLY_FIELDS.get(type_name)\n    };\n    let Some(allowed_fields) = allowed_fields else {\n        return Err(ConnectorError::from(anyhow::anyhow!(\n            \"No allow_alter_on_fly fields registered for sink: {sink_name}\"\n        )));\n    };\n    for field in fields {\n        if !allowed_fields.contains(field) {\n            return Err(ConnectorError::from(anyhow::anyhow!(\n                \"Field '{field}' is not allowed to be altered on the fly for sink: {sink_name}\"\n            )));\n        }\n    }\n    Ok(())","sourceCodeStart":512,"sourceCodeEnd":548,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/allow_alter_on_fly_fields.rs#L512-L548","documentation":"check_sink_allow_alter_on_fly_fields could not map sink_name to a registered sink configuration type, so no allow_alter_on_fly allowlist exists. The sink connector name is unrecognized for on-the-fly field alteration (note: JDBC sinks are special-cased via CONNECTION_ALLOW_ALTER_ON_FLY_FIELDS).","triggerScenarios":"ALTER SINK (alter on the fly) where the sink's connector name fails sink_name_to_config_type_name: typo, unsupported sink, or a sink removed in this build.","commonSituations":"Typos like connector='deltlake' instead of 'deltalake'; using a sink not available in the deployment (e.g. enterprise-only); upgrading RW and connector names changing.","solutions":["Correct the sink connector name spelling in the WITH clause","Verify supported sink connectors for your RW version","Ensure the sink type is compiled/registered (check build features or enterprise edition)"],"exampleFix":"// before\nCREATE SINK sk FROM t WITH (connector = 'redis_s', ...);\n// after\nCREATE SINK sk FROM t WITH (connector = 'redis', ...);","handlingStrategy":"validation","validationCode":"const KNOWN_SINKS: &[&str] = &[\"kafka\",\"iceberg\",\"jdbc\",\"redis\",\"deltalake\" /*...*/];\nif !KNOWN_SINKS.contains(&sink_name) {\n    return Err(format!(\"unknown sink connector: {sink_name}\"));\n}","typeGuard":null,"tryCatchPattern":"match res {\n    Err(e) if e.to_string().starts_with(\"Unknown sink connector\") => {\n        // show list of valid sink connectors to the user\n    }\n    other => other?,\n}","preventionTips":["Use constants for sink connector names, never raw strings","Validate WITH connector values against the RW version's supported sinks","Watch for connector renames in upgrade notes"],"tags":["sink","connector","configuration"],"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"}