fix(pools): do not list or move free versions as delete markers

Signed-off-by: Denis Babchuk <babchukdenis@icloud.com>
This commit is contained in:
Denis Babchuk
2026-10-29 22:09:03 +03:00
parent fb1a619ee1
commit 7ce7fc8d1e
8 changed files with 288 additions and 7 deletions
+14 -2
View File
@@ -285,9 +285,21 @@ func (e *metaCacheEntry) xlmeta() (*xlMetaV2, error) {
return e.cached, nil
}
// fileInfoVersions returns the metadata as FileInfoVersions.
// fileInfoVersions returns the metadata as FileInfoVersions. The free
// versions of deleted tiered versions are not versions of the object; they
// are in FreeVersions.
// If entry is a directory it is returned as that.
func (e *metaCacheEntry) fileInfoVersions(bucket string) (FileInfoVersions, error) {
return e.getFileInfoVersions(bucket, false)
}
// allFileInfoVersions returns the metadata as FileInfoVersions with the free
// versions among the versions, for healing.
func (e *metaCacheEntry) allFileInfoVersions(bucket string) (FileInfoVersions, error) {
return e.getFileInfoVersions(bucket, true)
}
func (e *metaCacheEntry) getFileInfoVersions(bucket string, inclFreeVersions bool) (FileInfoVersions, error) {
if e.isDir() {
return FileInfoVersions{
Volume: bucket,
@@ -302,7 +314,7 @@ func (e *metaCacheEntry) fileInfoVersions(bucket string) (FileInfoVersions, erro
}, nil
}
// Too small gains to reuse cache here.
return getFileInfoVersions(e.metadata, bucket, e.name, true)
return getFileInfoVersions(e.metadata, bucket, e.name, inclFreeVersions)
}
// metaCacheEntries is a slice of metacache entries.