aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStewart Miles <stewart@agentic.ai>2023-03-16 20:50:38 -0700
committerGitHub <noreply@github.com>2023-03-16 20:50:38 -0700
commit264be0d2d4e61543902e79c0b092103400c283f7 (patch)
treef807e2eac830ede8391350b52d388e11483f6c03
parentd695119073a2e890aa8fe13087a1d7c73b7ed3e0 (diff)
downloadseaweedfs-264be0d2d4e61543902e79c0b092103400c283f7.tar.xz
seaweedfs-264be0d2d4e61543902e79c0b092103400c283f7.zip
Retry until a leader is selected. (#4318)
Fixes regression introduced in https://github.com/seaweedfs/seaweedfs/pull/4313 Related to #4307
-rw-r--r--weed/topology/topology.go15
1 files changed, 14 insertions, 1 deletions
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) {