{"record":{"id":"3dbbc2ca47b18597","repo":"risingwavelabs/risingwave","slug":"invalid-commit-checkpoint-interval-e","errorCode":null,"errorMessage":"invalid commit_checkpoint_interval: {e}","messagePattern":"invalid commit_checkpoint_interval: (.+?)","errorType":"validation","errorClass":"SinkError","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/elasticsearch_opensearch/opensearch.rs","lineNumber":113,"sourceCode":"            Self::SINK_NAME,\n            self.is_append_only,\n        )?\n        .into_log_sinker(self.config.concurrent_requests))\n    }\n\n    fn set_default_commit_checkpoint_interval(\n        desc: &mut crate::sink::catalog::desc::SinkDesc,\n        user_specified: &risingwave_common::session_config::sink_decouple::SinkDecouple,\n    ) -> Result<()> {\n        if crate::sink::is_sink_support_commit_checkpoint_interval(Self::SINK_NAME) {\n            match desc\n                .properties\n                .get(crate::sink::decouple_checkpoint_log_sink::COMMIT_CHECKPOINT_INTERVAL)\n            {\n                Some(commit_checkpoint_interval) => {\n                    let commit_checkpoint_interval = commit_checkpoint_interval\n                        .parse::<u64>()\n                        .map_err(|e| SinkError::Config(anyhow!(e)))?;\n                    if std::matches!(user_specified, SinkDecouple::Disable)\n                        && commit_checkpoint_interval > 1\n                    {\n                        return Err(SinkError::Config(anyhow!(\n                            \"config conflict: `commit_checkpoint_interval` larger than 1 means that sink decouple must be enabled, but session config sink_decouple is disabled\"\n                        )));\n                    }\n                }\n                None => match user_specified {\n                    risingwave_common::session_config::sink_decouple::SinkDecouple::Default\n                    | risingwave_common::session_config::sink_decouple::SinkDecouple::Enable => {\n                        desc.properties.insert(\n                            crate::sink::decouple_checkpoint_log_sink::COMMIT_CHECKPOINT_INTERVAL.to_owned(),\n                            crate::sink::decouple_checkpoint_log_sink::DEFAULT_COMMIT_CHECKPOINT_INTERVAL_WITH_SINK_DECOUPLE.to_string(),\n                        );\n                    }\n                    risingwave_common::session_config::sink_decouple::SinkDecouple::Disable => {\n                        desc.properties.insert(","sourceCodeStart":95,"sourceCodeEnd":131,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/elasticsearch_opensearch/opensearch.rs#L95-L131","documentation":"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.","triggerScenarios":"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.","commonSituations":"Users copy interval-style config like \"30s\" or \"100ms\" from other connectors, or typo the number, or include quotes/spaces.","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."],"exampleFix":"// before\nCREATE SINK s FROM mv WITH (connector='opensearch', commit_checkpoint_interval='30s');\n// after\nCREATE SINK s FROM mv WITH (connector='opensearch', commit_checkpoint_interval='30');","handlingStrategy":"validation","validationCode":"-- commit_checkpoint_interval must be a plain u64 literal\n-- accept: '1', '10'; reject: '30s', '1.5', '-1'","typeGuard":null,"tryCatchPattern":"match err { SinkError::Config(m) if m.contains(\"invalid commit_checkpoint_interval\") => fix_option_to_plain_integer(), other => return Err(other) }","preventionTips":["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."],"tags":["opensearch","sink","config","parse-error"],"backgroundTag":"invalid-config-value","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}