fix(pbss): idempotent init cmd if stored db #54
Merged
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.
PBSS Init Fix
The Problem
Running
geth initmultiple times on a PBSS database causes state history truncation errors. The truncation happens when the trie database is opened/initialized, BEFORESetupGenesisBlockWithOverrideis even called.ethereum#25523 explains that for PBSS, the trie db has issues when being re-created.
Root Cause Timeline
MakeChainDatabase- Opens the chain databaseMakeTrieDatabase- Creates trie database which triggers:SetupGenesisBlockWithOverride- Too late to prevent the issueThe Solution
Check if genesis already exists BEFORE creating the trie database. This prevents the truncation from ever happening.
Code Changes
In
cmd/bera-geth/chaincmd.goWhy This Works
MakeTrieDatabaseTesting
Key Insight
The fix must happen at the command level (chaincmd.go), not in the genesis setup logic, because the damage is done when the trie database is opened, before any genesis logic runs.
Benefits
Note
This fix is specific to PBSS (
state.scheme = path). Hash-based databases continue to work normally as they don't have the state history truncation issue.References