fix(eth/downloader): fix sync fall behind because peer was reported timeout - #2495
Open
gzliudan wants to merge 1 commit into
Open
fix(eth/downloader): fix sync fall behind because peer was reported timeout#2495gzliudan wants to merge 1 commit into
gzliudan wants to merge 1 commit into
Conversation
gzliudan
requested review from
AnilChinchawale,
anunay-xin,
benjamin202410,
liam-lai and
wanwiset25
July 28, 2026 00:41
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
gzliudan
force-pushed
the
fix-downloader-request-ttl
branch
from
July 29, 2026 03:37
a05e5bc to
cbf12b0
Compare
…imeout The QoS constants were shrunk relative to upstream go-ethereum, which pinned requestTTL() to a hard 5 second ceiling: ttlLimit was 5s while ttlScaling (2) multiplied by rttMaxEstimate (5s) already exceeded it, so neither the measured RTT nor the confidence factor could ever influence the timeout. Any peer that did not answer a single header request within 5 seconds was therefore reported as errTimeout and dropped. On a busy network this made a node that had fallen behind unable to recover: every sync round died in fetchHeight, the node dropped healthy peers faster than it could replace them, and it only advanced through propagated blocks, which cannot close a multi-thousand block gap. Restore rttMaxEstimate, ttlScaling and ttlLimit to the upstream values so the timeout scales with the observed round-trip time again, and add a test covering requestTTL().
gzliudan
force-pushed
the
fix-downloader-request-ttl
branch
from
July 29, 2026 03:39
cbf12b0 to
c45ff63
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Proposed changes
The QoS constants were shrunk relative to upstream go-ethereum, which pinned requestTTL() to a hard 5 second ceiling: ttlLimit was 5s while ttlScaling (2) multiplied by rttMaxEstimate (5s) already exceeded it, so neither the measured RTT nor the confidence factor could ever influence the timeout.
Any peer that did not answer a single header request within 5 seconds was therefore reported as errTimeout and dropped. On a busy network this made a node that had fallen behind unable to recover: every sync round died in fetchHeight, the node dropped healthy peers faster than it could replace them, and it only advanced through propagated blocks, which cannot close a multi-thousand block gap.
Restore rttMaxEstimate, ttlScaling and ttlLimit to the upstream values so the timeout scales with the observed round-trip time again, and add a test covering requestTTL().
Types of changes
What types of changes does your code introduce to XDC network?
Put an
✅in the boxes that applyImpacted Components
Which parts of the codebase does this PR touch?
Put an
✅in the boxes that applyChecklist
Put an
✅in the boxes once you have confirmed below actions (or provide reasons on not doing so) that