From 30458c71c81a3d680aacecafa67fabc1c728c52d Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Mon, 30 Aug 2021 10:46:41 -0700 Subject: [PATCH] tstime/rate: deflake TestLongRunningQPS This test is highly dependent on the accuracy of OS timers. Reduce the number of failures by decreasing the required accuracy from 0.999 to 0.995. Also, switch from repeated time.Sleep to using a time.Ticker for improved accuracy. Updates #2727 Signed-off-by: Joe Tsai --- tstime/rate/rate_test.go | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/tstime/rate/rate_test.go b/tstime/rate/rate_test.go index 0a8a55f50..fc4d1e115 100644 --- a/tstime/rate/rate_test.go +++ b/tstime/rate/rate_test.go @@ -182,15 +182,18 @@ func TestLongRunningQPS(t *testing.T) { wg.Done() } + // This will still offer ~500 requests per second, + // but won't consume outrageous amount of CPU. start := time.Now() end := start.Add(5 * time.Second) - for time.Now().Before(end) { + ticker := time.NewTicker(2 * time.Millisecond) + defer ticker.Stop() + for now := range ticker.C { + if now.After(end) { + break + } wg.Add(1) go f() - - // This will still offer ~500 requests per second, but won't consume - // outrageous amount of CPU. - time.Sleep(2 * time.Millisecond) } wg.Wait() elapsed := time.Since(start) @@ -201,7 +204,7 @@ func TestLongRunningQPS(t *testing.T) { t.Errorf("numOK = %d, want %d (ideal %f)", numOK, want, ideal) } // We should get very close to the number of requests allowed. - if want := int32(0.999 * ideal); numOK < want { + if want := int32(0.995 * ideal); numOK < want { t.Errorf("numOK = %d, want %d (ideal %f)", numOK, want, ideal) } }