{"record":{"id":"cbf9ff48ec105824","repo":"risingwavelabs/risingwave","slug":"commit-checkpoint-interval-must-be-greater-than-cbf9ff","errorCode":null,"errorMessage":"`commit_checkpoint_interval` must be greater than 0","messagePattern":"`commit_checkpoint_interval` must be greater than 0","errorType":"validation","errorClass":"SinkError::Config","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/lancedb.rs","lineNumber":222,"sourceCode":"    }\n\n    fn validate_alter_config(config: &BTreeMap<String, String>) -> Result<()> {\n        LanceDbConfig::from_btreemap(config.clone())?;\n        Ok(())\n    }\n\n    async fn validate(&self) -> Result<()> {\n        // Only append-only is supported\n        if self.config.r#type != SINK_TYPE_APPEND_ONLY\n            && self.config.r#type != SINK_USER_FORCE_APPEND_ONLY_OPTION\n        {\n            return Err(SinkError::Config(anyhow!(\n                \"only append-only LanceDB sink is supported\",\n            )));\n        }\n\n        if self.config.common.commit_checkpoint_interval == 0 {\n            return Err(SinkError::Config(anyhow!(\n                \"`commit_checkpoint_interval` must be greater than 0\"\n            )));\n        }\n\n        // Validate connection\n        let conn = self.config.common.create_connection().await?;\n\n        // Validate table exists and schema is compatible\n        let table = self.config.common.open_table(&conn).await?;\n\n        // Get the Lance table schema (Arrow schema)\n        let lance_schema = table\n            .schema()\n            .await\n            .context(\"failed to get LanceDB table schema\")\n            .map_err(SinkError::LanceDb)?;\n\n        // Convert RW schema to arrow schema and compare","sourceCodeStart":204,"sourceCodeEnd":240,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/lancedb.rs#L204-L240","documentation":"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.","triggerScenarios":"CREATE SINK ... WITH ('commit_checkpoint_interval' = '0').","commonSituations":"Users trying to disable periodic commits by setting 0, misunderstanding the option's semantics (0 must be omitted for defaults, not set to 0).","solutions":["Remove 'commit_checkpoint_interval' from WITH to use the default","Set it to a positive integer (seconds/checkpoints > 0)","Verify no templating/config generation emits 0"],"exampleFix":"// before\nWITH ('commit_checkpoint_interval' = '0')\n// after\nWITH ('commit_checkpoint_interval' = '10')","handlingStrategy":"validation","validationCode":"function checkCommitInterval(v) {\n  const n = Number(v);\n  if (v !== undefined && (!Number.isInteger(n) || n <= 0))\n    throw new Error('commit_checkpoint_interval must be a positive integer');\n}","typeGuard":null,"tryCatchPattern":"catch (SinkError::Config(e)) if e.includes(\"commit_checkpoint_interval\") { remove the option or set a positive value }","preventionTips":["Omit the option to use defaults instead of setting 0","Treat 0 as invalid for interval-type options","Document org-standard sink option templates with valid values"],"tags":["rust","config","sink-validation"],"backgroundTag":"value-out-of-range","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}