From eafeb27e90934e08aa11f9139ad0f6efb604d56f Mon Sep 17 00:00:00 2001 From: Anis Eleuch Date: Thu, 3 Apr 2025 23:07:24 +0100 Subject: [PATCH] decom: Ignore orphan delete markers in verification stage (#21106) To make sure that no objects were skipped for any reason, decommissioning does a second phase of listing to check if there are some objects that need to be decommissioned. However, the code forgot to skip orphan delete markers since the decom code already skips it. Make the code ignore delete markers in in the verification phase. Co-authored-by: Anis Eleuch --- cmd/erasure-server-pool-decom.go | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/cmd/erasure-server-pool-decom.go b/cmd/erasure-server-pool-decom.go index 078b41a07..ac72f8244 100644 --- a/cmd/erasure-server-pool-decom.go +++ b/cmd/erasure-server-pool-decom.go @@ -1182,29 +1182,32 @@ func (z *erasureServerPools) checkAfterDecom(ctx context.Context, idx int) error return } + // `.usage-cache.bin` still exists, must be not readable ignore it. + if bi.Name == minioMetaBucket && strings.Contains(entry.name, dataUsageCacheName) { + // skipping bucket usage cache name, as its autogenerated. + return + } + fivs, err := entry.fileInfoVersions(bi.Name) if err != nil { return } - // We need a reversed order for decommissioning, - // to create the appropriate stack. - versionsSorter(fivs.Versions).reverse() + var ignored int for _, version := range fivs.Versions { // Apply lifecycle rules on the objects that are expired. if filterLifecycle(bi.Name, version.Name, version) { + ignored++ continue } - - // `.usage-cache.bin` still exists, must be not readable ignore it. - if bi.Name == minioMetaBucket && strings.Contains(version.Name, dataUsageCacheName) { - // skipping bucket usage cache name, as its autogenerated. + if version.Deleted { + ignored++ continue } - - versionsFound++ } + + versionsFound += len(fivs.Versions) - ignored }); err != nil { return err }