in crates/iceberg/src/spec/manifest/writer.rs [301:334]
fn add_entry_inner(&mut self, entry: ManifestEntry) -> Result<()> {
// Check if the entry has sequence number
if (entry.status == ManifestStatus::Deleted || entry.status == ManifestStatus::Existing)
&& (entry.sequence_number.is_none() || entry.file_sequence_number.is_none())
{
return Err(Error::new(
ErrorKind::DataInvalid,
"Manifest entry with status Existing or Deleted should have sequence number",
));
}
// Update the statistics
match entry.status {
ManifestStatus::Added => {
self.added_files += 1;
self.added_rows += entry.data_file.record_count;
}
ManifestStatus::Deleted => {
self.deleted_files += 1;
self.deleted_rows += entry.data_file.record_count;
}
ManifestStatus::Existing => {
self.existing_files += 1;
self.existing_rows += entry.data_file.record_count;
}
}
if entry.is_alive() {
if let Some(seq_num) = entry.sequence_number {
self.min_seq_num = Some(self.min_seq_num.map_or(seq_num, |v| min(v, seq_num)));
}
}
self.manifest_entries.push(entry);
Ok(())
}