Data race in transactions code
There is a new data race in our transaction code that has likely been introduced via !4880 (merged), see e.g. https://gitlab.com/gitlab-org/gitaly/-/jobs/3266467490:
=== FAIL: internal/praefect TestStreamDirectorMutator_Transaction/failing_vote_should_create_replication_jobs_with_committed_subtransaction (0.09s)
==================
WARNING: DATA RACE
Write at 0x00c008358a10 by goroutine 199:
gitlab.com/gitlab-org/gitaly/v15/internal/praefect/transactions.(*subtransaction).updateVoterState()
/builds/gitlab-org/gitaly/internal/praefect/transactions/subtransaction.go:234 +0xb37
gitlab.com/gitlab-org/gitaly/v15/internal/praefect/transactions.(*subtransaction).vote()
/builds/gitlab-org/gitaly/internal/praefect/transactions/subtransaction.go:134 +0x19a
gitlab.com/gitlab-org/gitaly/v15/internal/praefect/transactions.(*transaction).vote()
/builds/gitlab-org/gitaly/internal/praefect/transactions/transaction.go:336 +0xa4
gitlab.com/gitlab-org/gitaly/v15/internal/praefect/transactions.(*Manager).voteTransaction()
/builds/gitlab-org/gitaly/internal/praefect/transactions/manager.go:158 +0x134
gitlab.com/gitlab-org/gitaly/v15/internal/praefect/transactions.(*Manager).VoteTransaction()
/builds/gitlab-org/gitaly/internal/praefect/transactions/manager.go:183 +0x565
gitlab.com/gitlab-org/gitaly/v15/internal/praefect.TestStreamDirectorMutator_Transaction.func1.2()
/builds/gitlab-org/gitaly/internal/praefect/coordinator_pg_test.go:281 +0x29c
Previous read at 0x00c008358a10 by goroutine 234:
gitlab.com/gitlab-org/gitaly/v15/internal/praefect/transactions.(*transaction).createSubtransaction()
/builds/gitlab-org/gitaly/internal/praefect/transactions/transaction.go:320 +0x5ca
gitlab.com/gitlab-org/gitaly/v15/internal/praefect/transactions.(*transaction).getOrCreateSubtransaction()
/builds/gitlab-org/gitaly/internal/praefect/transactions/transaction.go:240 +0x2e4
gitlab.com/gitlab-org/gitaly/v15/internal/praefect/transactions.(*transaction).vote()
/builds/gitlab-org/gitaly/internal/praefect/transactions/transaction.go:331 +0x64
gitlab.com/gitlab-org/gitaly/v15/internal/praefect/transactions.(*Manager).voteTransaction()
/builds/gitlab-org/gitaly/internal/praefect/transactions/manager.go:158 +0x134
gitlab.com/gitlab-org/gitaly/v15/internal/praefect/transactions.(*Manager).VoteTransaction()
/builds/gitlab-org/gitaly/internal/praefect/transactions/manager.go:183 +0x565
gitlab.com/gitlab-org/gitaly/v15/internal/praefect.TestStreamDirectorMutator_Transaction.func1.2()
/builds/gitlab-org/gitaly/internal/praefect/coordinator_pg_test.go:281 +0x29c
Goroutine 199 (running) created at:
gitlab.com/gitlab-org/gitaly/v15/internal/praefect.TestStreamDirectorMutator_Transaction.func1()
/builds/gitlab-org/gitaly/internal/praefect/coordinator_pg_test.go:276 +0x2d88
testing.tRunner()
/usr/local/go/src/testing/testing.go:1439 +0x213
testing.(*T).Run.func1()
/usr/local/go/src/testing/testing.go:1486 +0x47
Goroutine 234 (running) created at:
gitlab.com/gitlab-org/gitaly/v15/internal/praefect.TestStreamDirectorMutator_Transaction.func1()
/builds/gitlab-org/gitaly/internal/praefect/coordinator_pg_test.go:276 +0x2d88
testing.tRunner()
/usr/local/go/src/testing/testing.go:1439 +0x213
testing.(*T).Run.func1()
/usr/local/go/src/testing/testing.go:1486 +0x47
==================
testing.go:1312: race detected during execution of test
--- FAIL: TestStreamDirectorMutator_Transaction/failing_vote_should_create_replication_jobs_with_committed_subtransaction (0.09s)