From 22d2dbc4e68a20ada8c82edf1cc68026e7b0e3d6 Mon Sep 17 00:00:00 2001 From: Anis Eleuch Date: Sat, 30 Sep 2023 00:02:29 -0700 Subject: [PATCH] decom: Fix infinite retry when the decom is canceled (#18143) Also, use rand.Float64() since it is thread-safe; otherwise go race will complain. --- cmd/erasure-server-pool-decom.go | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/cmd/erasure-server-pool-decom.go b/cmd/erasure-server-pool-decom.go index 0912110a7..73a3c40fc 100644 --- a/cmd/erasure-server-pool-decom.go +++ b/cmd/erasure-server-pool-decom.go @@ -735,8 +735,6 @@ func (z *erasureServerPools) decommissionPool(ctx context.Context, idx int, pool // Check if bucket is object locked. lr, _ := globalBucketObjectLockSys.Get(bi.Name) - r := rand.New(rand.NewSource(time.Now().UnixNano())) - for setIdx, set := range pool.sets { set := set @@ -947,11 +945,11 @@ func (z *erasureServerPools) decommissionPool(ctx context.Context, idx int, pool go decommissionEntry(entry) }, ) - if err == nil { + if err == nil || errors.Is(err, context.Canceled) { break } setN := humanize.Ordinal(setIdx + 1) - retryDur := time.Duration(r.Float64() * float64(5*time.Second)) + retryDur := time.Duration(rand.Float64() * float64(5*time.Second)) logger.LogOnceIf(ctx, fmt.Errorf("listing objects from %s set failed with %v, retrying in %v", setN, err, retryDur), "decom-listing-failed"+setN) time.Sleep(retryDur) }