From dd9ecbf4407d0a67f3052a6d195140d3fd7f71a6 Mon Sep 17 00:00:00 2001 From: James Phillips Date: Thu, 26 Jan 2017 17:11:16 -0800 Subject: [PATCH] Run the waited-for function before sleeping, and ramp up the sleep exponentially. --- testutil/server.go | 1 - testutil/wait.go | 21 +++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/testutil/server.go b/testutil/server.go index 3596af151..f97db7444 100644 --- a/testutil/server.go +++ b/testutil/server.go @@ -310,7 +310,6 @@ func (s *TestServer) waitForLeader() { // Ensure we have a leader and a node registration. if leader := resp.Header.Get("X-Consul-KnownLeader"); leader != "true" { - fmt.Println(leader) return false, fmt.Errorf("Consul leader status: %#v", leader) } index, err = strconv.ParseInt(resp.Header.Get("X-Consul-Index"), 10, 64) diff --git a/testutil/wait.go b/testutil/wait.go index c4f137eba..f32562994 100644 --- a/testutil/wait.go +++ b/testutil/wait.go @@ -10,19 +10,28 @@ import ( type testFn func() (bool, error) type errorFn func(error) -func WaitForResult(test testFn, error errorFn) { - for retries := 100; retries > 0; retries-- { - time.Sleep(100 * time.Millisecond) +const ( + baseWait = 1 * time.Millisecond + maxWait = 100 * time.Millisecond +) - success, err := test() +func WaitForResult(try testFn, fail errorFn) { + var err error + wait := baseWait + for retries := 100; retries > 0; retries-- { + var success bool + success, err = try() if success { return } - if retries == 0 { - error(err) + time.Sleep(wait) + wait *= 2 + if wait > maxWait { + wait = maxWait } } + fail(err) } type rpcFn func(string, interface{}, interface{}) error