]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: don't artificially limit TestReadMetricsSched
authorqmuntal <quimmuntal@gmail.com>
Wed, 10 Sep 2025 06:23:42 +0000 (08:23 +0200)
committerGopher Robot <gobot@golang.org>
Wed, 10 Sep 2025 20:57:50 +0000 (13:57 -0700)
TestReadMetricsSched/running can take some time to enter in steady state
on busy systems. We currently only allow 1 second for that, we should
let it run unlimitedly until success or the test time's out.

Fixes #75049

Change-Id: I452059e1837caf12a2d2d9cae1f70a0ef2d4f518
Reviewed-on: https://go-review.googlesource.com/c/go/+/702295
Auto-Submit: Damien Neil <dneil@google.com>
Reviewed-by: Damien Neil <dneil@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
src/runtime/metrics_test.go

index f565d8a59f010096d5bc21a076e938e89bda861e..3989b7929349fc0bd98daee5745bf535431b8112 100644 (file)
@@ -1632,15 +1632,13 @@ func TestReadMetricsSched(t *testing.T) {
        checkEq := func(t *testing.T, s *metrics.Sample, value uint64) {
                check(t, s, value, value)
        }
-       spinUntil := func(f func() bool, timeout time.Duration) bool {
-               start := time.Now()
-               for time.Since(start) < timeout {
+       spinUntil := func(f func() bool) bool {
+               for {
                        if f() {
                                return true
                        }
-                       time.Sleep(time.Millisecond)
+                       time.Sleep(50 * time.Millisecond)
                }
-               return false
        }
 
        // Check base values.
@@ -1693,12 +1691,12 @@ func TestReadMetricsSched(t *testing.T) {
                t.Run("running", func(t *testing.T) {
                        defer runtime.GOMAXPROCS(runtime.GOMAXPROCS(count + 4))
                        // It can take a little bit for the scheduler to
-                       // distribute the goroutines to Ps, so retry for a
-                       // while.
+                       // distribute the goroutines to Ps, so retry until
+                       // we see the count we expect or the test times out.
                        spinUntil(func() bool {
                                metrics.Read(s[:])
                                return s[running].Value.Uint64() >= count
-                       }, time.Second)
+                       })
                        logMetrics(t, s[:])
                        check(t, &s[running], count, count+4)
                        check(t, &s[threads], count, count+4+threadsSlack)
@@ -1761,7 +1759,7 @@ func TestReadMetricsSched(t *testing.T) {
                spinUntil(func() bool {
                        metrics.Read(s[:])
                        return s[notInGo].Value.Uint64() >= count
-               }, time.Second)
+               })
 
                metrics.Read(s[:])
                logMetrics(t, s[:])
@@ -1783,7 +1781,7 @@ func TestReadMetricsSched(t *testing.T) {
                spinUntil(func() bool {
                        metrics.Read(s[:])
                        return s[waiting].Value.Uint64() >= waitingCount
-               }, time.Second)
+               })
 
                metrics.Read(s[:])
                logMetrics(t, s[:])