From 264be0d2d4e61543902e79c0b092103400c283f7 Mon Sep 17 00:00:00 2001 From: Stewart Miles Date: Thu, 16 Mar 2023 20:50:38 -0700 Subject: [PATCH] Retry until a leader is selected. (#4318) Fixes regression introduced in https://github.com/seaweedfs/seaweedfs/pull/4313 Related to #4307 --- weed/topology/topology.go | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/weed/topology/topology.go b/weed/topology/topology.go index 825c02961..fee4d6a03 100644 --- a/weed/topology/topology.go +++ b/weed/topology/topology.go @@ -101,7 +101,20 @@ func (t *Topology) Leader() (l pb.ServerAddress, err error) { exponentialBackoff := backoff.NewExponentialBackOff() exponentialBackoff.InitialInterval = 100 * time.Millisecond exponentialBackoff.MaxElapsedTime = 20 * time.Second - return backoff.RetryWithData(t.MaybeLeader, exponentialBackoff) + leaderNotSelected := errors.New("leader not selected yet") + l, err = backoff.RetryWithData( + func() (l pb.ServerAddress, err error) { + l, err = t.MaybeLeader() + if err == nil && l == "" { + err = leaderNotSelected + } + return l, err + }, + exponentialBackoff) + if err == leaderNotSelected { + l = "" + } + return l, err } func (t *Topology) MaybeLeader() (l pb.ServerAddress, err error) {