[PIBD] Fix to restart of PIBD download on corrupted data or mismatched roots #3775
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.
In tandem with, #3774 this fixes a case where PIBD fails to restart properly if the downloads txhashset state does not match with expected roots.
The previous logic attempted to manually roll back the output PMMR states to genesis, which could not work given rollback relies on blocks data existing in the DB (which is not guaranteed beyond the horizon block). This adds a
reset_chain_head_to_genesis
function tochain.rs
, which re-initializes the body PMMRs to the genesis block while leaving the header MMR intact, allowing PIBD to start again from the genesis block.Once we've tested this, I'll merge #3774 first and then merge into this one to maintain @ardocrat's credit where credit is due.