eth/downloader: abort sync if master drops (timeout prev) #2868
+15
−2
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.
Currently the downloader tracks peer drops for "data downloads", so that if a remote node is disconnected, all its assigned fetches are returned into the queue to be pulled by someone else.
However fetching the remote height; fetching the common ancestor and fetching the skeleton chain are done outside of the "fetch queue", so none of these code segments are aware that a peer was dropped. This results in them having to wait for a timeout to hit before aborting and starting over. Given the EDGE release's bumped timeout of 1 minute, this can stall sync quite a lot.
This PR adds a minor polish to the downloader so that for every sync cycle it maintains the master peer that it wants to sync with. Subsequently if the master peer is dropped, the sync cycle is cancelled in its entirety.