risingwavelabs/risingwave · error · SinkError

unsupported sink type {}

Error message

unsupported sink type {}

What it means

After resolving the sink's `connector` value to lowercase, the controller maps it to a `SinkType` via `match_sink_name_str!`. If the connector name does not correspond to any known sink type, the fallback closure returns `SinkError::Config("unsupported sink type <name>")`. Only connectors with registered SinkType implementations support runtime config alteration validation.

Source

Thrown at src/meta/src/controller/streaming_job.rs:3640

                // Validate that sink props can be altered
                match sink.properties.inner_ref().get(CONNECTOR_TYPE_KEY) {
                    Some(connector) => {
                        let connector_type = connector.to_lowercase();
                        check_sink_allow_alter_on_fly_fields(&connector_type, &prop_keys)
                            .map_err(|e| SinkError::Config(anyhow!(e)))?;

                        match_sink_name_str!(
                            connector_type.as_str(),
                            SinkType,
                            {
                                let mut new_sink_props = sink.properties.0.clone();
                                new_sink_props.extend(alter_props.clone());
                                SinkType::validate_alter_config_change(
                                    &new_sink_props,
                                    &alter_props,
                                )
                            },
                            |sink: &str| Err(SinkError::Config(anyhow!(
                                "unsupported sink type {}",
                                sink
                            )))
                        )?
                    }
                    None => {
                        return Err(SinkError::Config(anyhow!(
                            "connector not specified when alter sink"
                        ))
                        .into());
                    }
                };

                let mut new_sink_props = sink.properties.0.clone();
                new_sink_props.extend(alter_props.clone());

                // Prepare sink update
                let active_sink = sink::ActiveModel {

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Check the sink's connector value (`SHOW SINK`) and fix misspellings by recreating the sink with a supported connector.
  2. Use one of the supported sink connectors (kafka, iceberg, etc.) that implement SinkType.
  3. Recreate the sink with the corrected connector name, then apply the alter.
  4. If a custom connector is required, implement/extend SinkType support for it.

Example fix

-- before
CREATE SINK s ... WITH (connector = 'kafak'); -- unsupported
-- after
CREATE SINK s ... WITH (connector = 'kafka');
Defensive patterns

Strategy: validation

Validate before calling

-- confirm the connector is a supported sink type before altering
SELECT properties FROM rw_sinks WHERE name = 'my_sink'; -- connector must be a known value (kafka, iceberg, ...)

Prevention

When it happens

Trigger: Altering sink props when the sink's `connector` property holds an unrecognized or misspelled connector name, or a connector that lacks SinkType support.

Common situations: Typo in the connector name at CREATE SINK time (e.g. 'kafak'); custom/experimental connectors without SinkType support; connector renamed across versions.

Related errors


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/48a02ec49b77d6cc. Report an issue: GitHub.