risingwavelabs/risingwave · error

delete file {} missing referenced_data_file

Error message

delete file {} missing referenced_data_file

What it means

During delete-file partition backfill, the coordinator builds a map from each delete file to the data file it references. Each Iceberg delete file produced by the pk-index position-delete merger must carry a `referenced_data_file` property naming the data file it belongs to. If a delete file lacks that property, `pending_delete_files_by_referenced` cannot determine which partition to backfill it into and throws this error naming the offending file path.

Source

Thrown at src/meta/src/manager/iceberg_pk_index_sink/coordinator.rs:315

            delete_files: serialized_delete_files,
            overwrite_files: merged.overwrite_files,
        };

        // `add_data_files` order in `commit_one_epoch` is data files followed by
        // delete files; keep that order here.
        let mut materialized_add_files = data_files;
        materialized_add_files.extend(delete_files);
        Ok((merged, Some(materialized_add_files)))
    }
}

pub fn pending_delete_files_by_referenced(
    delete_files: &mut [DataFile],
) -> Result<HashMap<String, &mut DataFile>> {
    let mut pending: HashMap<String, &mut DataFile> = HashMap::with_capacity(delete_files.len());
    for f in delete_files.iter_mut() {
        let referenced = f.referenced_data_file().ok_or_else(|| {
            anyhow::anyhow!("delete file {} missing referenced_data_file", f.file_path())
        })?;
        if pending.contains_key(&referenced) {
            anyhow::bail!(
                "duplicate referenced data file {referenced} across pk-index delete files"
            );
        }
        pending.insert(referenced, f);
    }
    Ok(pending)
}

/// Scan the table's current-snapshot data manifests, resolving pending delete-file
/// partitions as their referenced data files are found. Stops as soon as every pending
/// delete file has been resolved. Data-file references not present in the snapshot are
/// left in `pending` for the caller to report.
async fn probe_committed_data_files(
    table: &Table,
    pending: &mut HashMap<String, &mut DataFile>,

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Fix or re-run the upstream writer (PositionDeleteMerger) so every delete file is created with the `referenced-data-file` property populated.
  2. Check the RisingWave version that produced the pending sink-state rows; upgrade/restart the meta node so both writer and coordinator versions match.
  3. If a bad row is already persisted, delete/clean the sink state for the affected epoch and let the epoch re-commit from the writers' reports.

Example fix

// before: delete file created without reference
DataFile::PositionDeletesBuilder::new(...).build()?;
// after
builder.set_referenced_data_file(data_file_path.to_string());
let df = builder.build()?;
Defensive patterns

Strategy: validation

Validate before calling

for f in delete_files {
    anyhow::ensure!(f.referenced_data_file().is_some(), "delete file {} missing referenced_data_file", f.file_path());
}

Type guard

fn has_referenced_data_file(f: &DataFile) -> bool { f.referenced_data_file().is_some() }

Prevention

When it happens

Trigger: A SerializedDataFile for a delete file was persisted/decoded without the `referenced-data-file` property set (e.g. writer bug, older wire format, hand-edited metadata), then passed into `backfill_delete_file_partitions` during pre-commit or recovery.

Common situations: Recovering a sink whose pending rows were written by an older RisingWave version that did not stamp `referenced_data_file`; a connector/writer bug that dropped the property during serialization; manually repaired Iceberg metadata tables.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/afd5a81526656f0e. Report an issue: GitHub.