{"record":{"id":"961edaee1c0d4927","repo":"risingwavelabs/risingwave","slug":"no-reports-to-aggregate-for-iceberg-pk-index-sink","errorCode":null,"errorMessage":"no reports to aggregate for iceberg pk-index sink coordinator","messagePattern":"no reports to aggregate for iceberg pk-index sink coordinator","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/meta/src/manager/iceberg_pk_index_sink/coordinator.rs","lineNumber":568,"sourceCode":"    schema_id: i32,\n    partition_spec_id: i32,\n    data_files: Vec<SerializedDataFile>,\n    delete_files: Vec<SerializedDataFile>,\n    overwrite_files: Vec<SerializedDataFile>,\n}\n\nfn aggregate_reports(\n    reports: &[PbIcebergPkIndexSinkMetadata],\n) -> Result<IcebergPkIndexSinkAggResult> {\n    let mut shared_schema_id: Option<i32> = None;\n    let mut shared_partition_spec_id: Option<i32> = None;\n\n    let mut data_files: Vec<SerializedDataFile> = Vec::new();\n    let mut delete_files: Vec<SerializedDataFile> = Vec::new();\n    let mut overwrite_files: Vec<SerializedDataFile> = Vec::new();\n\n    if reports.is_empty() {\n        bail!(\"no reports to aggregate for iceberg pk-index sink coordinator\");\n    }\n\n    for r in reports {\n        let Some(meta) = &r.metadata else {\n            bail!(\"iceberg pk-index sink report missing metadata in aggregate_reports\");\n        };\n\n        // Validate role: explicitly-Unspecified is a wire-format bug.\n        let role = PbIcebergPkIndexSinkRole::try_from(r.role)\n            .ok()\n            .filter(|r| !matches!(r, PbIcebergPkIndexSinkRole::Unspecified))\n            .ok_or_else(|| anyhow!(\"iceberg pk-index sink report has invalid role: {}\", r.role))?;\n\n        match role {\n            PbIcebergPkIndexSinkRole::Writer => {\n                let commit_result = IcebergCommitResult::try_from(meta)?;\n                align_report_id(\n                    commit_result.schema_id,","sourceCodeStart":550,"sourceCodeEnd":586,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/meta/src/manager/iceberg_pk_index_sink/coordinator.rs#L550-L586","documentation":"`aggregate_reports` merges the per-task sink metadata reports for one epoch into a single aggregation result. If the report list is empty there is nothing to commit, and committing an empty overwrite would be wrong, so it bails with this error before `pre_commit` proceeds.","triggerScenarios":"`pre_commit` invokes `aggregate_reports` with zero `PbIcebergPkIndexSinkMetadata` reports — e.g. all writers/mergers of the epoch failed before reporting, or the barrier collected no sink metadata.","commonSituations":"Upstream streaming job stalled or failed to produce a commit barrier with sink reports; sink actor configuration regression that removed writer tasks; collecting reports from the wrong epoch range.","solutions":["Check stream job / actor health for the epoch — look for writer or position-delete-merger panics or failures preceding this error.","Inspect how reports were collected in `pre_commit` (epoch filtering) to ensure reports weren't dropped or mis-attributed to another epoch.","Retry the epoch or restart the affected sink actors so fresh reports are produced."],"exampleFix":"null","handlingStrategy":"validation","validationCode":"anyhow::ensure!(!reports.is_empty(), \"skipping pre_commit: no sink reports collected for this epoch\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Monitor writer/merger actor health before barriers reach pre-commit.","Verify report collection filters by the correct epoch range.","Alert on epochs reaching the coordinator with zero reports."],"tags":["iceberg","empty-input","aggregation","internal-invariant-violation"],"backgroundTag":"empty-result-set","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"}