eth/downloader: terminate beacon sync early when linked to local chain #24550
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.
Up until now the beacon sync ran until we downloaded all the header up to genesis and we started using that as the driver for the backfiller. Whilst this is simple and elegant, it does pose a problem during mainnet transition: a peer will stall on the first sethead until it redownloads all the headers it already has locally.
This PR adds a database check for every beacon header acceptance to check if the associated (parent) block body and receipt is present already in the local chain or not. If both are present (the header is surely present in that case), we can stop downloading headers and just call it a day.
Some additional checks needed to be added to ensure that we ignore the part of the beacon headers that have not been downloaded.