fix(en): Fix race condition in EN storage initialization #3515
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.
What ❔
Reworks
NodeStorageInitializer::is_chain_tip_correct()
so that it performs the minimum amount of work possible, i.e. detects whether the latest L1 batch / L2 block diverge or not.Why ❔
EN storage initialization is prone to a data race: the "is storage initialized" check calls
NodeStorageInitializer::is_chain_tip_correct()
, which internally performs the entire iteration of the reorg detector (in particular, binary search for the first diverged block). This can lead to a data race with block revert logic, which may be executed concurrently. This data race was observed on the revert integration tests.Checklist
zkstack dev fmt
andzkstack dev lint
.