{"record":{"id":"3482c1b83a35e87d","repo":"risingwavelabs/risingwave","slug":"manifest-rewrite-target-size-bytes-must-be-great","errorCode":null,"errorMessage":"`manifest_rewrite_target_size_bytes` must be greater than 0","messagePattern":"`manifest_rewrite_target_size_bytes` must be greater than 0","errorType":"validation","errorClass":"SinkError::Config","httpStatus":null,"severity":"error","filePath":"src/connector/src/sink/iceberg/config.rs","lineNumber":679,"sourceCode":"            return Err(SinkError::Config(anyhow!(\n                \"`compaction.target_file_size_mb` must be greater than 0\"\n            )));\n        }\n\n        if config.write_parquet_max_row_group_rows == Some(0) {\n            return Err(SinkError::Config(anyhow!(\n                \"`compaction.write_parquet_max_row_group_rows` must be greater than 0\"\n            )));\n        }\n\n        if config.write_parquet_max_row_group_bytes == Some(0) {\n            return Err(SinkError::Config(anyhow!(\n                \"`compaction.write_parquet_max_row_group_bytes` must be greater than 0\"\n            )));\n        }\n\n        if config.manifest_rewrite_target_size_bytes == Some(0) {\n            return Err(SinkError::Config(anyhow!(\n                \"`manifest_rewrite_target_size_bytes` must be greater than 0\"\n            )));\n        }\n\n        if config.manifest_rewrite_min_count_to_merge == Some(0) {\n            return Err(SinkError::Config(anyhow!(\n                \"`manifest_rewrite_min_count_to_merge` must be greater than 0\"\n            )));\n        }\n\n        // Validate table identifier (e.g., database.name should not contain dots)\n        config\n            .table\n            .validate()\n            .map_err(|e| SinkError::Config(anyhow!(e)))?;\n\n        if config.write_parquet_max_row_group_rows.is_some() {\n            tracing::warn!(","sourceCodeStart":661,"sourceCodeEnd":697,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/connector/src/sink/iceberg/config.rs#L661-L697","documentation":"`from_btreemap` validation rejects `manifest_rewrite_target_size_bytes` equal to 0. The Iceberg sink's manifest rewrite compaction needs a positive target size to decide when to rewrite manifest files; 0 would make every manifest a rewrite candidate and is considered a config error.","triggerScenarios":"Building an Iceberg sink config with property `manifest_rewrite_target_size_bytes` set to `0` via the sink WITH options or `IcebergConfig::from_btreemap`.","commonSituations":"Tuning manifest rewrite behavior with a computed value that becomes 0; copy-paste of option names with wrong units; attempts to disable manifest rewrite by zeroing the target size.","solutions":["Set `manifest_rewrite_target_size_bytes` to a positive size in bytes (e.g. 8388608 for 8MB).","Remove the option to use the built-in default.","Verify templated config isn't substituting 0.","If manifest rewrite should be off, unset `enable_manifest_rewrite` instead."],"exampleFix":"-- before\nCREATE SINK s ... WITH (... manifest_rewrite_target_size_bytes = '0')\n-- after\nCREATE SINK s ... WITH (... manifest_rewrite_target_size_bytes = '8388608')","handlingStrategy":"validation","validationCode":"if let Some(sz) = props.get(\"manifest_rewrite_target_size_bytes\") {\n    if sz.parse::<u64>()? == 0 { return Err(\"manifest_rewrite_target_size_bytes must be > 0\"); }\n}","typeGuard":"fn valid_target_size(v: Option<u64>) -> bool { v.map_or(true, |s| s > 0) }","tryCatchPattern":null,"preventionTips":["Keep manifest rewrite defaults unless tuned deliberately","Validate all byte-size options are positive in config pipelines","Document units (bytes) to avoid zero-fill mistakes"],"tags":["iceberg","config","sink"],"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"}