From e34ca9acd1a7edc2c63e0699f472c600a8968016 Mon Sep 17 00:00:00 2001 From: Krishna Srinivas <634494+krishnasrinivas@users.noreply.github.com> Date: Wed, 11 May 2022 11:37:32 -0700 Subject: [PATCH] retry each object decom upto 3 times, in-case of failure (#14861) --- cmd/erasure-server-pool-decom.go | 41 +++++++++++++++++--------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/cmd/erasure-server-pool-decom.go b/cmd/erasure-server-pool-decom.go index a93b14d1a..0ddd79eb6 100644 --- a/cmd/erasure-server-pool-decom.go +++ b/cmd/erasure-server-pool-decom.go @@ -687,27 +687,30 @@ func (z *erasureServerPools) decommissionPool(ctx context.Context, idx int, pool continue } - gr, err := set.GetObjectNInfo(ctx, - bName, - encodeDirObject(version.Name), - nil, - http.Header{}, - noLock, // all mutations are blocked reads are safe without locks. - ObjectOptions{ - VersionID: version.VersionID, - }) - if err != nil { - logger.LogIf(ctx, err) - z.poolMetaMutex.Lock() - z.poolMeta.CountItem(idx, version.Size, true) - z.poolMetaMutex.Unlock() - break // break out on first error - } var failure bool // gr.Close() is ensured by decommissionObject(). - if err = z.decommissionObject(ctx, bName, gr); err != nil { - logger.LogIf(ctx, err) - failure = true + for try := 0; try < 3; try++ { + gr, err := set.GetObjectNInfo(ctx, + bName, + encodeDirObject(version.Name), + nil, + http.Header{}, + noLock, // all mutations are blocked reads are safe without locks. + ObjectOptions{ + VersionID: version.VersionID, + }) + if err != nil { + failure = true + logger.LogIf(ctx, err) + continue + } + if err = z.decommissionObject(ctx, bName, gr); err != nil { + failure = true + logger.LogIf(ctx, err) + continue + } + failure = false + break } z.poolMetaMutex.Lock() z.poolMeta.CountItem(idx, version.Size, failure)