From 154fcaeb564fcef39c0335c64441ea48c71fdc43 Mon Sep 17 00:00:00 2001 From: Krishnan Parthasarathi Date: Thu, 27 Jun 2024 17:22:30 -0700 Subject: [PATCH] Allow rebalance start when it's stopped/completed (#20009) --- cmd/admin-handlers-pools.go | 1 + cmd/erasure-server-pool-rebalance.go | 11 +++++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/cmd/admin-handlers-pools.go b/cmd/admin-handlers-pools.go index cd965582c..5b3ac6151 100644 --- a/cmd/admin-handlers-pools.go +++ b/cmd/admin-handlers-pools.go @@ -374,6 +374,7 @@ func (a adminAPIHandlers) RebalanceStop(w http.ResponseWriter, r *http.Request) globalNotificationSys.StopRebalance(r.Context()) writeSuccessResponseHeadersOnly(w) adminLogIf(ctx, pools.saveRebalanceStats(GlobalContext, 0, rebalSaveStoppedAt)) + globalNotificationSys.LoadRebalanceMeta(ctx, false) } func proxyDecommissionRequest(ctx context.Context, defaultEndPoint Endpoint, w http.ResponseWriter, r *http.Request) (proxy bool) { diff --git a/cmd/erasure-server-pool-rebalance.go b/cmd/erasure-server-pool-rebalance.go index cce7de9bf..5f4c80333 100644 --- a/cmd/erasure-server-pool-rebalance.go +++ b/cmd/erasure-server-pool-rebalance.go @@ -350,8 +350,15 @@ func (z *erasureServerPools) IsRebalanceStarted() bool { z.rebalMu.RLock() defer z.rebalMu.RUnlock() - if r := z.rebalMeta; r != nil { - if r.StoppedAt.IsZero() { + r := z.rebalMeta + if r == nil { + return false + } + if !r.StoppedAt.IsZero() { + return false + } + for _, ps := range r.PoolStats { + if ps.Participating && ps.Info.Status != rebalCompleted { return true } }