aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lu <chrislusf@users.noreply.github.com>2025-12-13 20:06:13 -0800
committerGitHub <noreply@github.com>2025-12-13 20:06:13 -0800
commiteb860752e6c0a86131e39d648f0a64364408ab93 (patch)
tree325fd7454da980414f62fa712f84ce2fa35f4ebc
parent51c2ab0107ce8bc38d6d4f1d3ef3190d4be94161 (diff)
downloadseaweedfs-eb860752e6c0a86131e39d648f0a64364408ab93.tar.xz
seaweedfs-eb860752e6c0a86131e39d648f0a64364408ab93.zip
fix: WaitUntilConnected now respects context cancellation during sleep (#7737)
The WaitUntilConnected function was not properly respecting context cancellation when sleeping between attempts. The time.Sleep call would block for up to 200ms even after the context was cancelled. This fix uses select with time.After to immediately return when the context is cancelled, rather than waiting for the sleep to complete. This fixes flaky test behavior where the function would take ~200ms to return instead of respecting the ~100ms context timeout.
-rw-r--r--weed/wdclient/masterclient.go9
1 files changed, 8 insertions, 1 deletions
diff --git a/weed/wdclient/masterclient.go b/weed/wdclient/masterclient.go
index 89218a8c7..81de30894 100644
--- a/weed/wdclient/masterclient.go
+++ b/weed/wdclient/masterclient.go
@@ -367,7 +367,14 @@ func (mc *MasterClient) WaitUntilConnected(ctx context.Context) {
if attempts%100 == 0 { // Log every 100 attempts (roughly every 20 seconds)
glog.V(0).Infof("%s.%s WaitUntilConnected still waiting for master connection (attempt %d)...", mc.FilerGroup, mc.clientType, attempts)
}
- time.Sleep(time.Duration(rand.Int31n(200)) * time.Millisecond)
+ // Use select with time.After to respect context cancellation during sleep
+ sleepDuration := time.Duration(rand.Int31n(200)) * time.Millisecond
+ select {
+ case <-ctx.Done():
+ return
+ case <-time.After(sleepDuration):
+ // continue to next iteration
+ }
}
}
}