merge versions across sets when listing (#16003)

This commit is contained in:
Klaus Post
2022-11-04 19:33:22 +01:00
committed by GitHub
parent 2894dd4d1a
commit 808ecfe0f2
2 changed files with 56 additions and 35 deletions

View File

@@ -299,29 +299,8 @@ func (z *erasureServerPools) listMerged(ctx context.Context, o listPathOptions,
}
// Gather results to a single channel.
err := mergeEntryChannels(ctx, inputs, results, func(existing, other *metaCacheEntry) (replace bool) {
// Pick object over directory
if existing.isDir() && !other.isDir() {
return true
}
if !existing.isDir() && other.isDir() {
return false
}
eMeta, err := existing.xlmeta()
if err != nil {
return true
}
oMeta, err := other.xlmeta()
if err != nil {
return false
}
// Replace if modtime is newer
if !oMeta.latestModtime().Equal(oMeta.latestModtime()) {
return oMeta.latestModtime().After(eMeta.latestModtime())
}
// Use NumVersions as a final tiebreaker.
return len(oMeta.versions) > len(eMeta.versions)
})
// Quorum is one since we are merging across sets.
err := mergeEntryChannels(ctx, inputs, results, 1)
cancelList()
wg.Wait()