risingwavelabs/risingwave · error · SinkError::Config

config conflict: `commit_checkpoint_interval` larger than 1

Error message

config conflict: `commit_checkpoint_interval` larger than 1 means that sink decouple must be enabled, but session config sink_decouple is disabled

What it means

This error is raised when validating sink WITH clause options in the RisingWave connector sink layer. `commit_checkpoint_interval` greater than 1 means the sink commits data across multiple checkpoints, which requires sink decoupling (an async commit coordinator separated from the barrier flow). If the session-level `sink_decouple` setting is explicitly disabled while a `commit_checkpoint_interval > 1` is given, the configuration is contradictory and sink creation is rejected.

Source

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

    /// Return whether this sink uses exactly-once commit state for the loaded properties.
    fn is_exactly_once(_properties: &BTreeMap<String, String>) -> Result<bool> {
        Ok(false)
    }

    fn set_default_commit_checkpoint_interval(
        desc: &mut SinkDesc,
        user_specified: &SinkDecouple,
    ) -> Result<()> {
        if is_sink_support_commit_checkpoint_interval(Self::SINK_NAME) {
            match desc.properties.get(COMMIT_CHECKPOINT_INTERVAL) {
                Some(commit_checkpoint_interval) => {
                    let commit_checkpoint_interval = commit_checkpoint_interval
                        .parse::<u64>()
                        .map_err(|e| SinkError::Config(anyhow!(e)))?;
                    if matches!(user_specified, SinkDecouple::Disable)
                        && commit_checkpoint_interval > 1
                    {
                        return Err(SinkError::Config(anyhow!(
                            "config conflict: `commit_checkpoint_interval` larger than 1 means that sink decouple must be enabled, but session config sink_decouple is disabled"
                        )));
                    }
                }
                None => match user_specified {
                    SinkDecouple::Default | SinkDecouple::Enable => {
                        if matches!(Self::SINK_NAME, ICEBERG_SINK) {
                            desc.properties.insert(
                                COMMIT_CHECKPOINT_INTERVAL.to_owned(),
                                ICEBERG_DEFAULT_COMMIT_CHECKPOINT_INTERVAL.to_string(),
                            );
                        } else {
                            desc.properties.insert(
                                COMMIT_CHECKPOINT_INTERVAL.to_owned(),
                                DEFAULT_COMMIT_CHECKPOINT_INTERVAL_WITH_SINK_DECOUPLE.to_string(),
                            );
                        }
                    }

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Enable sink decoupling: `SET sink_decouple = true` (or `ENABLED`) in the session before creating the sink
  2. Remove `commit_checkpoint_interval` from the WITH options so it defaults to 1 and no decoupling is required
  3. Set the session variable inline in the CREATE SINK session: connect with `options -c 'SET sink_decouple=true'` or run `SET sink_decouple = true; CREATE SINK ...`

Example fix

-- before
SET sink_decouple = false;
CREATE SINK s FROM mv INTO kafka_conn WITH (commit_checkpoint_interval = 10);

-- after
SET sink_decouple = true;
CREATE SINK s FROM mv INTO kafka_conn WITH (commit_checkpoint_interval = 10);
Defensive patterns

Strategy: validation

Validate before calling

let interval: u64 = with_options.get("commit_checkpoint_interval").map(|s| s.parse()).transpose()?.unwrap_or(1);
if interval > 1 && !sink_decouple_enabled {
    return Err("commit_checkpoint_interval > 1 requires sink_decouple enabled".into());
}

Prevention

When it happens

Trigger: Creating a sink with `commit_checkpoint_interval = N` (N > 1) in the WITH options while the session variable `sink_decouple` is set to `disabled` (SinkDecouple::Disable), e.g. via `SET sink_decouple = false` or a session/profile default.

Common situations: Operators tuning commit frequency for Kafka/Iceberg sinks to reduce commit overhead set commit_checkpoint_interval, forgetting the session default or their `SET sink_decouple = DISABLED` conflicts with it; upgrading from older versions where sink_decouple defaulted differently.

Understand the failure class

Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.

Related errors


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