Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

runtime: TestFakeTime fails with fatal error "must be able to track idle limiter event" #53294

Closed
cherrymui opened this issue Jun 8, 2022 · 4 comments
Assignees
Labels
NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. okay-after-beta1 Used by release team to mark a release-blocker issue as okay to resolve either before or after beta1 release-blocker
Milestone

Comments

@cherrymui
Copy link
Member

cherrymui commented Jun 8, 2022

TestFakeTime has some recent failures on a few builders. The output includes "fatal error", "must be able to track idle limiter event", and sometimes with bunch of junk text.
E.g.

--- FAIL: TestFakeTime (6.72s)
    crash_test.go:124: running go build -o /ramdisk8GB/workdir-host-aix-ppc64-osuosl/tmp/go-build1941044317/testfaketime_-tags=faketime.exe -tags=faketime
    time_test.go:44: raw stdout: "\x00\x00PB\x11t\xef\xed\xab\x18`\x01\x00\x00\x00\aline 2\n\x00\x00PB\x11t\xef\xed\xab\x18`\x01\x00\x00\x00\aline 3\n\x00\x00PB\x11t\xef\xed\xe6\xb3*\x00\x00\x00\x00\aline 5\n\x00\x00PB\x11t\xef\xed\xe6\xb3*\x00\x00\x00\x00\x142009-11-10T23:00:01Z"
    time_test.go:45: raw stderr: "\x00\x00PB\x11t\xef\xed\xab\x18`\x00\x00\x00\x00\aline 1\n\x00\x00PB\x11t\xef\xed\xab\x18`\x02\x00\x00\x00\aline 4\n\x00\x00PB\x11t\xef\xed\xe6\xb3*\x01\x00\x00\x00\rfatal error: \x00\x00PB\x11t\xef\xed\xe6\xb3*\x01\x00\x00\x00(must be able to track idle limiter event\x00\x00PB\x11t\xef\xed\xe6\xb3*\x01\x00\x00\x00\x01\n"
    time_test.go:68: want [[{1257894000000000001 line 2
        } {1257894000000000001 line 3
        } {1257894001000000000 line 5
        } {1257894001000000000 2009-11-10T23:00:01Z}] [{1257894000000000000 line 1
        } {1257894000000000002 line 4
        }]], got [[{1257894000000000001 line 2
        } {1257894000000000001 line 3
        } {1257894001000000000 line 5
        } {1257894001000000000 2009-11-10T23:00:01Z}] [{1257894000000000000 line 1
        } {1257894000000000002 line 4
        } {1257894001000000001 fatal error: } {1257894001000000001 must be able to track idle limiter event} {1257894001000000001 
        }]]

2022-06-08T17:11:00-432158b/aix-ppc64
2022-06-07T23:00:27-30b929b/linux-386-longtest
2022-06-07T17:36:56-81033fb/linux-amd64-longtest
2022-06-07T16:59:48-0c3a054/linux-386-longtest
2022-06-06T15:15:21-846f971/linux-386-longtest
2022-06-04T20:10:54-0293c51/linux-386-longtest
2022-06-03T20:54:45-54a2f4b/linux-s390x-ibm

That throw is added recently in CL https://go-review.googlesource.com/c/go/+/410122 .
cc @mknyszek @prattmic @golang/runtime

@cherrymui cherrymui added this to the Go1.19 milestone Jun 8, 2022
@cherrymui cherrymui added NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. release-blocker labels Jun 8, 2022
@prattmic
Copy link
Member

prattmic commented Jun 8, 2022

The problem is in https://cs.opensource.google/go/go/+/master:src/runtime/proc.go;l=5077-5082;drc=2882786bf4cd779f166e9ced82a4da2ea0f8b1f9;bpv=1;bpt=1, which is effectively a specialized pidleget, but is missing the new logic added in https://go-review.googlesource.com/c/go/+/410122.

We can patch-fix that, or I think we could just replace the loop with pidleget, since any P will still steal the timer even if it doesn't own it.

@prattmic prattmic self-assigned this Jun 8, 2022
@prattmic
Copy link
Member

prattmic commented Jun 8, 2022

This bug definitely only affects faketime. I guess we should keep it as a release blocker since it could trigger on the Go playground, but is OK after beta 1.

@prattmic prattmic added the okay-after-beta1 Used by release team to mark a release-blocker issue as okay to resolve either before or after beta1 label Jun 8, 2022
@prattmic
Copy link
Member

prattmic commented Jun 8, 2022

For reference, this reproduces quickly with:

$ cd src/runtime/testdata/testfaketime
$ go build -tags=faketime
$ while ./testfaketime; do true; done

@gopherbot
Copy link

gopherbot commented Jun 8, 2022

Change https://go.dev/cl/411119 mentions this issue: runtime: use pidleget for faketime jump

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
NeedsInvestigation Someone must examine and confirm this is a valid issue and not a duplicate of an existing one. okay-after-beta1 Used by release team to mark a release-blocker issue as okay to resolve either before or after beta1 release-blocker
Projects
Status: Done
Development

No branches or pull requests

3 participants