mirror of
https://github.com/minio/minio.git
synced 2025-03-30 17:23:42 -04:00
xl: Fix feeding NumVersions & SuccessorModTime to lifecycle (#11462)
After recent refactor where lifecycle started to rely on ObjectInfo to make decisions, it turned out there are some issues calculating Successor Modtime and NumVersions, hence the lifecycle is not working as expected in a versioning bucket in some cases. This commit fixes the behavior.
This commit is contained in:
parent
c9b0f595b9
commit
1887c25279
@ -611,12 +611,13 @@ func (z xlMetaV2) TotalSize() int64 {
|
|||||||
// versions returns error for unexpected entries.
|
// versions returns error for unexpected entries.
|
||||||
// showPendingDeletes is set to true if ListVersions needs to list objects marked deleted
|
// showPendingDeletes is set to true if ListVersions needs to list objects marked deleted
|
||||||
// but waiting to be replicated
|
// but waiting to be replicated
|
||||||
func (z xlMetaV2) ListVersions(volume, path string) (versions []FileInfo, modTime time.Time, err error) {
|
func (z xlMetaV2) ListVersions(volume, path string) ([]FileInfo, time.Time, error) {
|
||||||
var latestModTime time.Time
|
var versions []FileInfo
|
||||||
var latestVersionID string
|
var err error
|
||||||
|
|
||||||
for _, version := range z.Versions {
|
for _, version := range z.Versions {
|
||||||
if !version.Valid() {
|
if !version.Valid() {
|
||||||
return nil, latestModTime, errFileCorrupt
|
return nil, time.Time{}, errFileCorrupt
|
||||||
}
|
}
|
||||||
var fi FileInfo
|
var fi FileInfo
|
||||||
switch version.Type {
|
switch version.Type {
|
||||||
@ -628,27 +629,22 @@ func (z xlMetaV2) ListVersions(volume, path string) (versions []FileInfo, modTim
|
|||||||
fi, err = version.ObjectV1.ToFileInfo(volume, path)
|
fi, err = version.ObjectV1.ToFileInfo(volume, path)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, latestModTime, err
|
return nil, time.Time{}, err
|
||||||
}
|
|
||||||
if fi.ModTime.After(latestModTime) {
|
|
||||||
latestModTime = fi.ModTime
|
|
||||||
latestVersionID = fi.VersionID
|
|
||||||
}
|
}
|
||||||
versions = append(versions, fi)
|
versions = append(versions, fi)
|
||||||
}
|
}
|
||||||
|
|
||||||
// We didn't find the version in delete markers so latest version
|
sort.Sort(versionsSorter(versions))
|
||||||
// is indeed one of the actual version of the object with data.
|
|
||||||
for i := range versions {
|
for i := range versions {
|
||||||
if versions[i].VersionID != latestVersionID {
|
versions[i].NumVersions = len(versions)
|
||||||
continue
|
if i > 0 {
|
||||||
|
versions[i].SuccessorModTime = versions[i-1].ModTime
|
||||||
}
|
}
|
||||||
versions[i].IsLatest = true
|
|
||||||
break
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Sort(versionsSorter(versions))
|
versions[0].IsLatest = true
|
||||||
return versions, latestModTime, nil
|
return versions, versions[0].ModTime, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getModTimeFromVersion(v xlMetaV2Version) time.Time {
|
func getModTimeFromVersion(v xlMetaV2Version) time.Time {
|
||||||
@ -744,8 +740,8 @@ findVersion:
|
|||||||
// A version is found, fill dynamic fields
|
// A version is found, fill dynamic fields
|
||||||
fi.IsLatest = i == 0
|
fi.IsLatest = i == 0
|
||||||
fi.NumVersions = len(z.Versions)
|
fi.NumVersions = len(z.Versions)
|
||||||
if i < len(orderedVersions)-1 {
|
if i > 0 {
|
||||||
fi.SuccessorModTime = getModTimeFromVersion(orderedVersions[i+1])
|
fi.SuccessorModTime = getModTimeFromVersion(orderedVersions[i-1])
|
||||||
}
|
}
|
||||||
return fi, nil
|
return fi, nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user