risingwavelabs/risingwave · error · SinkError
invalid commit_checkpoint_interval
Error message
invalid commit_checkpoint_interval: {e} What it means
The OpenSearch sink's set_default_commit_checkpoint_interval parses the `commit_checkpoint_interval` sink property as u64; a non-numeric or malformed value produces SinkError::Config with the parse error embedded in "invalid commit_checkpoint_interval: {e}". This happens during sink validation/setup before data flows.
Solutions
- Set commit_checkpoint_interval to a plain non-negative integer (checkpoint count), e.g. commit_checkpoint_interval='10'.
- Remove the property to let the default logic choose a value.
- If you intended a time-based interval, use the appropriate time-based option instead; this option counts checkpoints.
Example fix
// before CREATE SINK s FROM mv WITH (connector='opensearch', commit_checkpoint_interval='30s'); // after CREATE SINK s FROM mv WITH (connector='opensearch', commit_checkpoint_interval='30');
Defensive patterns
Strategy: validation
Validate before calling
-- commit_checkpoint_interval must be a plain u64 literal -- accept: '1', '10'; reject: '30s', '1.5', '-1'
Try / catch
match err { SinkError::Config(m) if m.contains("invalid commit_checkpoint_interval") => fix_option_to_plain_integer(), other => return Err(other) } Prevention
- Remember the option counts checkpoints, not time — pass integers only.
- Validate the DDL with a regex like ^\d+$ before deploying.
- Copy options only from official RisingWave docs, not other connectors.
When it happens
Trigger: Creating an OpenSearch sink with a `commit_checkpoint_interval` property that fails u64::parse — e.g., "5s", "five", "1.5", negative numbers, or empty string.
Common situations: Users copy interval-style config like "30s" or "100ms" from other connectors, or typo the number, or include quotes/spaces.
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
- Cannot find
- ambiguous auth: multiple auth options provided; remove one…
- auth.method=key_pair_object must not set `password`
- Can't get fe host from url
- Cannot find
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/3dbbc2ca47b18597.
Report an issue: GitHub.
Appendix: source
Thrown at src/connector/src/sink/elasticsearch_opensearch/opensearch.rs:113
Self::SINK_NAME,
self.is_append_only,
)?
.into_log_sinker(self.config.concurrent_requests))
}
fn set_default_commit_checkpoint_interval(
desc: &mut crate::sink::catalog::desc::SinkDesc,
user_specified: &risingwave_common::session_config::sink_decouple::SinkDecouple,
) -> Result<()> {
if crate::sink::is_sink_support_commit_checkpoint_interval(Self::SINK_NAME) {
match desc
.properties
.get(crate::sink::decouple_checkpoint_log_sink::COMMIT_CHECKPOINT_INTERVAL)
{
Some(commit_checkpoint_interval) => {
let commit_checkpoint_interval = commit_checkpoint_interval
.parse::<u64>()
.map_err(|e| SinkError::Config(anyhow!(e)))?;
if std::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 {
risingwave_common::session_config::sink_decouple::SinkDecouple::Default
| risingwave_common::session_config::sink_decouple::SinkDecouple::Enable => {
desc.properties.insert(
crate::sink::decouple_checkpoint_log_sink::COMMIT_CHECKPOINT_INTERVAL.to_owned(),
crate::sink::decouple_checkpoint_log_sink::DEFAULT_COMMIT_CHECKPOINT_INTERVAL_WITH_SINK_DECOUPLE.to_string(),
);
}
risingwave_common::session_config::sink_decouple::SinkDecouple::Disable => {
desc.properties.insert(View on GitHub (pinned to 6469eb736d)