diff --git a/cmd/erasure-server-pool-decom.go b/cmd/erasure-server-pool-decom.go index 1e74f4cb8..7da089ad4 100644 --- a/cmd/erasure-server-pool-decom.go +++ b/cmd/erasure-server-pool-decom.go @@ -419,7 +419,9 @@ func (p poolMeta) save(ctx context.Context, pools []*erasureSets) error { // Saves on all pools to make sure decommissioning of first pool is allowed. for i, eset := range pools { if err = saveConfig(ctx, eset, poolMetaName, buf); err != nil { - logger.LogIf(ctx, fmt.Errorf("saving pool.bin for pool index %d failed with: %v", i, err)) + if !errors.Is(err, context.Canceled) { + logger.LogIf(ctx, fmt.Errorf("saving pool.bin for pool index %d failed with: %v", i, err)) + } return err } } @@ -729,8 +731,10 @@ func (z *erasureServerPools) decommissionPool(ctx context.Context, idx int, pool } // any object with only single DEL marker we don't need - // to decommission, just skip it. - if version.Deleted && len(fivs.Versions) == 1 { + // to decommission, just skip it, this also includes + // any other versions that have already expired. + remainingVersions := len(fivs.Versions) - decommissionedCount + if version.Deleted && remainingVersions == 1 { decommissionedCount++ continue }