-
Notifications
You must be signed in to change notification settings - Fork 690
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
Sync should support fetching and importing long forks #570
Comments
cc @arkpar |
Sync currently downloads all forks that other nodes perceive as best. I've added a small test that works as expected here: paritytech/substrate#1544 |
Can the following happen?
I think this is why we might need to explicitly ask to sync a given chain. |
That is what's happening, and I have a branch that reproduces: The fact that this fork might never be announced to all other peers or might be announced and then ignored is why we need the "manual" API to trigger sync to this fork. This API can be very easily invoked from These forks are usually small and the API might receive calls that are on the "same" fork (since all we know in the consensus layer are block hash/number -- and do its best to unify them where possible). We also don't need to import forks from before the last finalized block, so they will usually be small. |
How would sync download a chain that was never announced? By querying random peers? This is just bad protocol design. For this to work properly all blocks must be announced. |
It might be announced but the announcement might be missed. The author for sure has announced the block when importing but there is no guarantee that announcements propagate fully over the gossip network. You can only guarantee 1 hop -- it's possible that all immediate peers to the author have a "better" chain and thus don't re-announce. |
From what I see in the log all of the blocks are downloaded, but some fail to import with
|
In paritytech/substrate#1593 we've changed sync logic to announce and then periodically re-announce local vote blocks as well as to ensure that vote-blocks are propagating to full nodes. |
The sync test is PR'ed here: paritytech/substrate#1604 It has an issue that paritytech/substrate#1593 doesn't address, which is that announcements of non single-length forks are ignored. |
@rphmeier this is sorted now, right? |
Let's keep it open and triage it to lower priority -- we have something that generally works for small forks but not perfectly for longer forks. |
* Fix bug parent hash on `BlockV2` upgrade * BlockV0 -> BlockV2 migration utility functions
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
* receive_delivery_proof benchmarks * fix compilation * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> * Update modules/message-lane/src/benchmarking.rs Co-authored-by: Hernando Castano <[email protected]> Co-authored-by: Hernando Castano <[email protected]>
(outdated, kept for posterity)
For GRANDPA, Casper CBC, and other chain-based consensus algorithms, we may occasionally need to download many forks which are typically small and typically not the best.
Ideally this will be via an API where it will be possible to tell the sync service which forks need downloading.
For 1.0 Gamma we added an
announce_block
function toNetworkService
for GRANDPA nodes to announce blocks that they voted on to peers. GRANDPA voters additionally will announce periodically until the current round completes. TheNetworkService
announcement logic was changed to download and repropagate announcements that are for small (32 block) forks.Further down the line we will need synchronization for arbitrarily long forks, hopefully with state pruning allowing us to keep both heads' states. Forks that connect before the finality point should be ignored.
The text was updated successfully, but these errors were encountered: