in table/snapshot_producers.go [119:185]
func (of *overwriteFiles) existingManifests() ([]iceberg.ManifestFile, error) {
// determine if there are any existing manifest files
existingFiles := make([]iceberg.ManifestFile, 0)
snap := of.base.txn.meta.currentSnapshot()
if snap == nil {
return existingFiles, nil
}
manifestList, err := snap.Manifests(of.base.io)
if err != nil {
return existingFiles, err
}
for _, m := range manifestList {
entries, err := of.base.fetchManifestEntry(m, true)
if err != nil {
return existingFiles, err
}
foundDeleted := make([]iceberg.ManifestEntry, 0)
notDeleted := make([]iceberg.ManifestEntry, 0, len(entries))
for _, entry := range entries {
if _, ok := of.base.deletedFiles[entry.DataFile().FilePath()]; ok {
foundDeleted = append(foundDeleted, entry)
} else {
notDeleted = append(notDeleted, entry)
}
}
if len(foundDeleted) == 0 {
existingFiles = append(existingFiles, m)
continue
}
if len(notDeleted) == 0 {
continue
}
spec, err := of.base.txn.meta.GetSpecByID(int(m.PartitionSpecID()))
if err != nil {
return existingFiles, err
}
wr, path, counter, err := of.base.newManifestWriter(*spec)
if err != nil {
return existingFiles, err
}
defer counter.W.(io.Closer).Close()
for _, entry := range notDeleted {
if err := wr.Existing(entry); err != nil {
return existingFiles, err
}
}
mf, err := wr.ToManifestFile(path, counter.Count)
if err != nil {
return existingFiles, err
}
existingFiles = append(existingFiles, mf)
}
return existingFiles, nil
}