Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

netsync: add handleBlockMsgHeadersFirst #2292

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

kcalvinalvin
Copy link
Collaborator

This is a re-worked part of #2226 only containing the part for adding handleBlockMsgHeadersFirst.

The main purpose of this PR is to have code separated out from handling blocks during IBD vs out of IBD.
Since handling of the blocks can be very different in both of the cases, it's useful to separate out the block
handling code as well.

We only exit headersFirstMode when we have no more checkpoints left.
updateSyncPeer was resetting headersFirstMode by calling
resetHeaderState only to have it turned back on with startSync().

Resetting the headers-first mode when we've not really exited the
headers first mode will cause problems with later commits that add
parallel block downloads so we remove it here.
We were still updating invs for peers but since during ibd new blocks
and txs are irrelevant, don't bother updating either.
For headers first mode, there's no need for a global map of requested
blocks since it's only used when we're caught up and need a quick way to
check which blocks were requested instead of searching through all the
requested blocks map for all the connected peers.
The headerList includes headers we've already downloaded and verified.
Instead of resetting it and re-downloading them on syncPeer disconnects,
we reset the startHeader to be the first header in the list so that we
can re-use the headers and download the blocks associated with it.
We add a function to process blocks specifically in headers first mode.
In headers first we can make different assumptions with the biggest
being:

1: Downloading blocks out of order but processing them in order by
   caching blocks.

2: Error out when a block that doesn't past processing in headers first
   mode as the blocks are checkpointed.
Since blocks in headers-first mode is handled by
handleBlockMsgHeadersFirst, we no longer need to handle headers first
blocks in handleBlockMsg.
@coveralls
Copy link

coveralls commented Dec 26, 2024

Pull Request Test Coverage Report for Build 12499244094

Details

  • 0 of 150 (0.0%) changed or added relevant lines in 1 file are covered.
  • 19 unchanged lines in 2 files lost coverage.
  • Overall coverage decreased (-0.1%) to 57.148%

Changes Missing Coverage Covered Lines Changed/Added Lines %
netsync/manager.go 0 150 0.0%
Files with Coverage Reduction New Missed Lines %
netsync/manager.go 4 0.0%
peer/peer.go 15 73.49%
Totals Coverage Status
Change from base Build 12401774722: -0.1%
Covered Lines: 29897
Relevant Lines: 52315

💛 - Coveralls

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants