mirror of
https://github.com/minio/minio.git
synced 2025-11-09 05:34:56 -05:00
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user