risingwavelabs/risingwave · error · SinkError::Config

`commit_checkpoint_interval` must be greater than 0

Error message

`commit_checkpoint_interval` must be greater than 0

What it means

Validation in LanceDbSink::validate: the common commit_checkpoint_interval must be strictly positive; 0 would mean committing checkpoints every epoch indefinitely and is rejected at sink creation. Fires after the append-only check when building a LanceDB sink.

Source

Thrown at src/connector/src/sink/lancedb.rs:222

    }

    fn validate_alter_config(config: &BTreeMap<String, String>) -> Result<()> {
        LanceDbConfig::from_btreemap(config.clone())?;
        Ok(())
    }

    async fn validate(&self) -> Result<()> {
        // Only append-only is supported
        if self.config.r#type != SINK_TYPE_APPEND_ONLY
            && self.config.r#type != SINK_USER_FORCE_APPEND_ONLY_OPTION
        {
            return Err(SinkError::Config(anyhow!(
                "only append-only LanceDB sink is supported",
            )));
        }

        if self.config.common.commit_checkpoint_interval == 0 {
            return Err(SinkError::Config(anyhow!(
                "`commit_checkpoint_interval` must be greater than 0"
            )));
        }

        // Validate connection
        let conn = self.config.common.create_connection().await?;

        // Validate table exists and schema is compatible
        let table = self.config.common.open_table(&conn).await?;

        // Get the Lance table schema (Arrow schema)
        let lance_schema = table
            .schema()
            .await
            .context("failed to get LanceDB table schema")
            .map_err(SinkError::LanceDb)?;

        // Convert RW schema to arrow schema and compare

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Remove 'commit_checkpoint_interval' from WITH to use the default
  2. Set it to a positive integer (seconds/checkpoints > 0)
  3. Verify no templating/config generation emits 0

Example fix

// before
WITH ('commit_checkpoint_interval' = '0')
// after
WITH ('commit_checkpoint_interval' = '10')
Defensive patterns

Strategy: validation

Validate before calling

function checkCommitInterval(v) {
  const n = Number(v);
  if (v !== undefined && (!Number.isInteger(n) || n <= 0))
    throw new Error('commit_checkpoint_interval must be a positive integer');
}

Try / catch

catch (SinkError::Config(e)) if e.includes("commit_checkpoint_interval") { remove the option or set a positive value }

Prevention

When it happens

Trigger: CREATE SINK ... WITH ('commit_checkpoint_interval' = '0').

Common situations: Users trying to disable periodic commits by setting 0, misunderstanding the option's semantics (0 must be omitted for defaults, not set to 0).

Understand the failure class

Background: "value must be between 0 and 1" / "out of range" / "must not be negative" errors: fixing range-validation failures across open-source libraries — this error's family across 42 libraries.

Related errors


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