fix(rocksdb): Detected interrupted trie update, but trie has idempotency#236
Merged
nekomoto911 merged 1 commit intoGalxe:mainfrom Jan 21, 2026
Merged
fix(rocksdb): Detected interrupted trie update, but trie has idempotency#236nekomoto911 merged 1 commit intoGalxe:mainfrom
nekomoto911 merged 1 commit intoGalxe:mainfrom
Conversation
nekomoto911
approved these changes
Jan 21, 2026
nekomoto911
pushed a commit
that referenced
this pull request
Jan 21, 2026
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.
Background
After introducing RocksDB sharding(#225) support, the original assertion
ck.block_number + 1 == block_numbercan no longer be guaranteed. This PR documents and handles this edge case.Root Cause
With RocksDB sharding, trie updates and state updates now execute in parallel, while the trie checkpoint is recorded within the state. This creates a race condition:
ExecutionCheckpointandbest_block_numberremain atH - 1H - 1)Why This Is Safe
Although the trie updates for block H were partially persisted in the previous run, this does not cause data corruption because:
Design Rationale
The two types of tables have different fault-tolerance mechanisms:
This difference is also why the checkpoint is stored within the state tables rather than the trie tables.
Changes
Changed the assertion to an informational log, since detecting
ck.block_number + 1 != block_numberis now an expected scenario after interrupted trie updates, not an error condition.