From beb1924437bfa3b14b8ffc262fbeea80a23d7b56 Mon Sep 17 00:00:00 2001 From: Anis Elleuch Date: Sat, 14 Jan 2023 00:36:46 +0100 Subject: [PATCH] Properly restart fresh disk healing when failed in some places (#16413) --- cmd/admin-heal-ops.go | 5 +++-- cmd/background-newdisks-heal-ops.go | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/cmd/admin-heal-ops.go b/cmd/admin-heal-ops.go index c8ba3b073..5befa849e 100644 --- a/cmd/admin-heal-ops.go +++ b/cmd/admin-heal-ops.go @@ -176,11 +176,12 @@ func (ahs *allHealState) getHealLocalDiskEndpoints() Endpoints { return endpoints } -func (ahs *allHealState) markDiskForHealing(ep Endpoint) { +// Set, in the memory, the state of the disk as currently healing or not +func (ahs *allHealState) setDiskHealingStatus(ep Endpoint, healing bool) { ahs.Lock() defer ahs.Unlock() - ahs.healLocalDisks[ep] = true + ahs.healLocalDisks[ep] = healing } func (ahs *allHealState) pushHealLocalDisks(healLocalDisks ...Endpoint) { diff --git a/cmd/background-newdisks-heal-ops.go b/cmd/background-newdisks-heal-ops.go index 2ccbf5afb..7f8407c44 100644 --- a/cmd/background-newdisks-heal-ops.go +++ b/cmd/background-newdisks-heal-ops.go @@ -441,9 +441,10 @@ func monitorLocalDisksAndHeal(ctx context.Context, z *erasureServerPools) { for _, disk := range healDisks { go func(disk Endpoint) { - globalBackgroundHealState.markDiskForHealing(disk) + globalBackgroundHealState.setDiskHealingStatus(disk, true) err := healFreshDisk(ctx, z, disk) if err != nil { + globalBackgroundHealState.setDiskHealingStatus(disk, false) printEndpointError(disk, err, false) return }