From 7e248fc0ba0619dac4fba837eb18d25dd283593f Mon Sep 17 00:00:00 2001 From: Harshavardhana Date: Mon, 18 Apr 2022 13:26:29 -0700 Subject: [PATCH] wait on parallel decom to complete before returning (#14764) without this wait there is a potential for some objects that are in actively being decommissioned would cancel, however the decommission status might wrongly conclude this as "Complete". To avoid this make sure to add waitgroups on the parallel workers, allowing parallel copies to complete fully before we return. --- cmd/erasure-server-pool-decom.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cmd/erasure-server-pool-decom.go b/cmd/erasure-server-pool-decom.go index a28185eae..92495f182 100644 --- a/cmd/erasure-server-pool-decom.go +++ b/cmd/erasure-server-pool-decom.go @@ -603,6 +603,7 @@ func (z *erasureServerPools) decommissionPool(ctx context.Context, idx int, pool decommissionEntry := func(entry metaCacheEntry) { defer func() { <-parallelWorkers + wg.Done() }() if entry.isDir() { return @@ -719,12 +720,14 @@ func (z *erasureServerPools) decommissionPool(ctx context.Context, idx int, pool reportNotFound: false, agreed: func(entry metaCacheEntry) { parallelWorkers <- struct{}{} + wg.Add(1) go decommissionEntry(entry) }, partial: func(entries metaCacheEntries, nAgreed int, errs []error) { entry, ok := entries.resolve(&resolver) if ok { parallelWorkers <- struct{}{} + wg.Add(1) go decommissionEntry(*entry) } },