fix: make sure we list freeVersions like DEL marker with --versions (#19878)

freeVersions() was being incorrectly skipped; list it as
valid objects properly.

Co-authored-by: Krishnan Parthasarathi <Krishnan Parthasarathi>
This commit is contained in:
Harshavardhana
2024-06-07 15:18:44 -07:00
committed by GitHub
parent 2dd8faaedc
commit 29a25a538f
5 changed files with 63 additions and 12 deletions

View File

@@ -23,22 +23,40 @@ import (
"github.com/zeebo/xxh3"
)
func getFileInfoVersions(xlMetaBuf []byte, volume, path string, allParts bool) (FileInfoVersions, error) {
// getFileInfoVersions partitions this object's versions such that,
// - fivs.Versions has all the non-free versions
// - fivs.FreeVersions has all the free versions
//
// if inclFreeVersions is true all the versions are in fivs.Versions, free and non-free versions alike.
//
// Note: Only the scanner requires fivs.Versions to have exclusively non-free versions. This is used while enforcing NewerNoncurrentVersions lifecycle element.
func getFileInfoVersions(xlMetaBuf []byte, volume, path string, allParts, inclFreeVersions bool) (FileInfoVersions, error) {
fivs, err := getAllFileInfoVersions(xlMetaBuf, volume, path, allParts)
if err != nil {
return fivs, err
}
// If inclFreeVersions is false, partition the versions in fivs.Versions
// such that finally fivs.Versions has
// all the non-free versions and fivs.FreeVersions has all the free
// versions.
n := 0
for _, fi := range fivs.Versions {
// Filter our tier object delete marker
if !fi.TierFreeVersion() {
fivs.Versions[n] = fi
n++
// filter our tier object delete marker
if fi.TierFreeVersion() {
if !inclFreeVersions {
fivs.FreeVersions = append(fivs.FreeVersions, fi)
}
} else {
fivs.FreeVersions = append(fivs.FreeVersions, fi)
if !inclFreeVersions {
fivs.Versions[n] = fi
}
n++
}
}
fivs.Versions = fivs.Versions[:n]
if !inclFreeVersions {
fivs.Versions = fivs.Versions[:n]
}
// Update numversions
for i := range fivs.Versions {
fivs.Versions[i].NumVersions = n