risingwavelabs/risingwave · error · SinkError::Config

<parse error of commit_checkpoint_interval

Error message

<parse error of commit_checkpoint_interval: {e}>

What it means

`commit_checkpoint_interval` is validated for sinks that support it (per `is_sink_support_commit_checkpoint_interval`); the property must parse as `u64`. A non-numeric or overflow value fails `parse::<u64>()` and is wrapped into this Config error. (Note: the literal message in the SOURCE is just the parse error `anyhow!(e)`; the index label describes it.)

Solutions

  1. Set `commit_checkpoint_interval` to a plain non-negative integer (e.g. '3')
  2. Remove the option to use the default
  3. Check docs: the value is a checkpoint count, not a duration

Example fix

// before
WITH (connector = 'kafka', commit_checkpoint_interval = '10s')
// after
WITH (connector = 'kafka', commit_checkpoint_interval = '10')
Defensive patterns

Strategy: validation

Validate before calling

fn valid_commit_checkpoint_interval(v: &str) -> bool {
    v.parse::<u64>().is_ok()
}
if let Some(v) = props.get("commit_checkpoint_interval") {
    if !valid_commit_checkpoint_interval(v) {
        return Err(anyhow!("commit_checkpoint_interval must be a u64 integer"));
    }
}

Try / catch

match result {
    Err(e) if e.to_string().contains("commit_checkpoint_interval") || e.to_string().contains("invalid digit") => {
        bail!("set commit_checkpoint_interval to a plain integer, e.g. '3'");
    }
    other => other,
}

Prevention

When it happens

Trigger: Setting `commit_checkpoint_interval` in the sink WITH clause to a value that cannot parse as u64 (e.g. `'abc'`, `'-1'`, `'1.5'`, or a value exceeding u64::MAX).

Common situations: Quoted or humanized values like `'10s'` or `'1k'`; negative numbers; copy-paste of an interval duration where a plain count is expected.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


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

Appendix: source

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

    const SINK_NAME: &'static str;

    type LogSinker: LogSinker;

    /// 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(),

View on GitHub (pinned to 6469eb736d)