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
- Set `commit_checkpoint_interval` to a plain non-negative integer (e.g. '3')
- Remove the option to use the default
- 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
- Provide commit_checkpoint_interval as a plain non-negative integer string
- Never pass durations or humanized quantities for this option
- Validate numeric WITH options client-side before DDL submission
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.
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
Related errors
- Can't get fe host from url
- Cannot find
- connector ' ' is not supported
- intermediate.table.name is required for append-only sink
- intermediate.table.name is required for non-append-only sink
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)