shunping opened a new pull request, #36672:
URL: https://github.com/apache/beam/pull/36672
Data race has been seen when we run some processing-time timer tests.
`go test -v -race -count=200 -timeout 100s -run
^TestTimers_ProcessingTime_Infinity$
github.com/apache/beam/sdks/v2/go/test/integration/primitives`
```
WARNING: DATA RACE
Write at 0x00c000a1e600 by goroutine 776:
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/engine.mtimeHeap.Swap()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/engine/holds.go:33
+0xa8
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/engine.(*mtimeHeap).Swap()
<autogenerated>:1 +0x20
container/heap.down()
/Users/shunping/go/pkg/mod/golang.org/[email protected]/src/container/heap/heap.go:114
+0x5c
container/heap.Pop()
/Users/shunping/go/pkg/mod/golang.org/[email protected]/src/container/heap/heap.go:62
+0x68
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/engine.(*stageRefreshQueue).AdvanceTo()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/engine/processingtime.go:92
+0xb8
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/engine.(*ElementManager).Bundles.func2()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/engine/elementmanager.go:402
+0x128
Previous read at 0x00c000a1e600 by goroutine 938:
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/engine.(*stageRefreshQueue).Peek()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/engine/processingtime.go:80
+0x21c
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/engine.(*ElementManager).ProcessingTimeNow()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/engine/elementmanager.go:2451
+0x1b4
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/engine.(*stageState).injectTriggeredBundlesIfReady()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/engine/elementmanager.go:1340
+0x2c8
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/engine.(*aggregateStageKind).addPending()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/engine/elementmanager.go:1435
+0x4e8
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/engine.(*stageState).AddPending()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/engine/elementmanager.go:1315
+0xb4
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/engine.(*ElementManager).PersistBundle()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/engine/elementmanager.go:884
+0x9d8
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal.(*stage).Execute()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/stage.go:351
+0x2834
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal.executePipeline.func2()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/execute.go:375
+0xf8
golang.org/x/sync/errgroup.(*Group).Go.func1()
/Users/shunping/go/pkg/mod/golang.org/x/[email protected]/errgroup/errgroup.go:93
+0x70
Goroutine 776 (running) created at:
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/engine.(*ElementManager).Bundles()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/engine/elementmanager.go:388
+0x278
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal.executePipeline()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/execute.go:351
+0x1638
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal.RunPipeline()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/execute.go:90
+0x530
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/jobservices.(*Server).Run.gowrap1()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/jobservices/management.go:400
+0x40
Goroutine 938 (running) created at:
golang.org/x/sync/errgroup.(*Group).Go()
/Users/shunping/go/pkg/mod/golang.org/x/[email protected]/errgroup/errgroup.go:78
+0x104
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal.executePipeline()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/execute.go:372
+0x1974
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal.RunPipeline()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/execute.go:90
+0x530
github.com/apache/beam/sdks/v2/go/pkg/beam/runners/prism/internal/jobservices.(*Server).Run.gowrap1()
/Users/shunping/Projects/beam-dev-go-prism/sdks/go/pkg/beam/runners/prism/internal/jobservices/management.go:400
+0x40
```
Most of the access to em.processTimeEvents are guarded by em.refreshCond.L
lock, except for one location in `injectTriggerBundlesIfReady`. This PR fixes
the missing spot.
Related to #36662
Internal Bug ID: 449405414
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]