fix TestWalWritesFinalization: wait for the block record before reading the WAL - #585
Open
samliok wants to merge 1 commit into
Open
fix TestWalWritesFinalization: wait for the block record before reading the WAL#585samliok wants to merge 1 commit into
samliok wants to merge 1 commit into
Conversation
…ng the WAL GetBuiltBlock returns as soon as BuildBlock pushes to the built channel, which happens before the block building task calls proposeBlock and appends the block record. Reading the WAL directly could observe it empty. Use AssertWALSize, as the rest of the test already does.
samliok
marked this pull request as ready for review
September 8, 2026 20:32
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TestWalWritesFinalizationread the WAL without waiting for it to be written, so it could observe an empty WAL and fail with"[]" should have 2 item(s), but has 0.Startschedules block building onbuildBlockScheduler, a separate goroutine. That task callsBuildBlock, which pushes the block onto the test builder'sbuiltchannel and returns, soGetBuiltBlockunblocks the test there. The task then still has to take the epoch lock and callproposeBlock->storeProposal, which is where the block record actually reaches the WAL.GetBuiltBlockreturning is not a happens-before edge for that append, so the test could race ahead and read an empty WAL.Fixed by waiting on
AssertWALSize(2)before the read, which is what the same test already does before its second read and whatTestWalWritesBlockRecorddoes before its own.The test's third read needs no wait: that finalization record is appended by
persistFinalizationon the synchronousHandleMessagepath, so it is written beforeInjectTestFinalizeVotereturns.Pre-existing on main, not introduced by any open PR. Surfaced in CI on an unrelated PR's run.
Verification
Reproduced on clean
origin/mainby wrapping the test body in a 20-iteration loop and running under-racewithGOMAXPROCS=4; it failed on iteration 6 with the same message. With the fix, 3 runs x 20 iterations were clean, then the loop was removed and the test re-run clean.