From 01e5632949e9013e43b748b3ca5103a127607396 Mon Sep 17 00:00:00 2001 From: Anis Elleuch Date: Fri, 20 May 2022 15:33:18 +0100 Subject: [PATCH] mrf: Fix stale MRF data showed in heal info (#14953) One usee reported having mc admin heal status output ETA increasing by time. It turned out it is MRF that is not clearing its data due to a bug in the code. pendingItems is increased when an object is queued to be healed but never decreasd when there is a healing error. This commit will decrease pendingItems and pendingBytes even when there is an error to give accurate reporting. --- cmd/mrf.go | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/cmd/mrf.go b/cmd/mrf.go index 831adb838..55bed67b6 100644 --- a/cmd/mrf.go +++ b/cmd/mrf.go @@ -218,21 +218,19 @@ func (m *mrfState) healRoutine() { // Heal objects for _, u := range mrfOperations { - if _, err := m.objectAPI.HealObject(m.ctx, u.bucket, u.object, u.versionID, mrfHealingOpts); err != nil { - // If not deleted, assume they failed. - logger.LogIf(m.ctx, err) - } else { - m.mu.Lock() - m.itemsHealed++ - m.pendingItems-- - m.bytesHealed += uint64(u.size) - m.pendingBytes -= uint64(u.size) - m.mu.Unlock() - } - + _, err := m.objectAPI.HealObject(m.ctx, u.bucket, u.object, u.versionID, mrfHealingOpts) m.mu.Lock() + if err == nil { + m.itemsHealed++ + m.bytesHealed += uint64(u.size) + } + m.pendingItems-- + m.pendingBytes -= uint64(u.size) delete(m.pendingOps, u) m.mu.Unlock() + + // Log healing error if any + logger.LogIf(m.ctx, err) } waitForLowHTTPReq()