risingwavelabs/risingwave · error · anyhow::Error (ConnectorResult)

connector '{}' is not supported

Error message

connector '{}' is not supported

What it means

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.

Source

Thrown at src/connector/src/sink/mod.rs:488

            format_desc: format_desc_with_secret,
            db_name: sink_catalog.db_name,
            sink_from_name: sink_catalog.sink_from_name,
        })
    }
}

pub fn enforce_secret_sink(props: &impl WithPropertiesExt) -> ConnectorResult<()> {
    use crate::enforce_secret::EnforceSecret;

    let connector = props
        .get_connector()
        .ok_or_else(|| anyhow!("Must specify 'connector' in WITH clause"))?;
    let key_iter = props.key_iter();
    match_sink_name_str!(
        connector.as_str(),
        PropType,
        PropType::enforce_secret(key_iter),
        |other| bail!("connector '{}' is not supported", other)
    )
}

pub static GLOBAL_SINK_METRICS: LazyLock<SinkMetrics> =
    LazyLock::new(|| SinkMetrics::new(&GLOBAL_METRICS_REGISTRY));

#[derive(Clone)]
pub struct SinkMetrics {
    pub sink_commit_duration: LabelGuardedHistogramVec,
    pub connector_sink_rows_received: LabelGuardedIntCounterVec,

    // Log store writer metrics
    pub log_store_first_write_epoch: LabelGuardedIntGaugeVec,
    pub log_store_latest_write_epoch: LabelGuardedIntGaugeVec,
    pub log_store_write_rows: LabelGuardedIntCounterVec,

    // Log store reader metrics
    pub log_store_latest_read_epoch: LabelGuardedIntGaugeVec,

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Use a supported sink connector name (see RisingWave sink docs)
  2. Fix the typo in the WITH clause
  3. Enable/upgrade to a version where the connector is supported

Example fix

// before
WITH (connector = 's3_infected')
// after
WITH (connector = 'iceberg')
Defensive patterns

Strategy: validation

Validate before calling

const SUPPORTED: &[&str] = &["kafka", "iceberg", "jdbc", /* ... */];
if let Some(c) = props.get("connector") {
    if !SUPPORTED.contains(&c.to_lowercase().as_str()) {
        return Err(anyhow!("connector '{c}' is not supported"));
    }
}

Try / catch

enforce_secret_sink(&props).map_err(|e| {
    if e.to_string().contains("is not supported") {
        anyhow!("unknown sink connector — see docs for supported list")
    } else { e }
})?;

Prevention

When it happens

Trigger: 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.

Common situations: Typo like `connector='kafak'`; attempting a sink type not enabled in the deployed version; mixing up source and sink connector names.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


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