Another check to prevent duplicate block imports #8050
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.
Issue Addressed
Attempt to address performance issues caused by importing the same block multiple times.
Proposed Changes
BeaconChain::import_block. We actually use an upgradable read lock, but this is semantically equivalent (the upgradable read has the advantage of not excluding regular reads).The hope is that this change has several benefits:
import_blockthat is unnecessary, e.g. writing the state to disk. Although the store itself now takes some measures to avoid re-writing diffs, it is even better if we avoid a disk write entirely.DuplicateFullyImported, we reduce some duplicated work downstream. E.g. if multiple threads importing columns triggerimport_block, now only one of them will get a notification of the block import completing successfully, and only this one will runrecompute_head. This should help avoid a situation where multiple beacon processor workers are consumed by threads blocking on therecompute_head_lock. However, a similar block-fest is still possible with the upgradable fork choice lock (a large number of threads can be blocked waiting for the first thread to complete block import).Additional Info
Longer term this will likely be obsoleted by @ethDreamer's block status tracker.