aboutsummaryrefslogtreecommitdiffstats
path: root/eth/downloader
diff options
context:
space:
mode:
authorPéter Szilágyi <peterke@gmail.com>2016-07-22 22:55:46 +0800
committerPéter Szilágyi <peterke@gmail.com>2016-07-22 22:55:46 +0800
commitc7c82f1b44e07ad0906dde563cce46ea87b6fc83 (patch)
tree8d6bf5f79e72689b0232faebf65cb64b9aef2e93 /eth/downloader
parentf58ac2b46b66a81515a119a2b1924a831afdd0c9 (diff)
downloaddexon-c7c82f1b44e07ad0906dde563cce46ea87b6fc83.tar
dexon-c7c82f1b44e07ad0906dde563cce46ea87b6fc83.tar.gz
dexon-c7c82f1b44e07ad0906dde563cce46ea87b6fc83.tar.bz2
dexon-c7c82f1b44e07ad0906dde563cce46ea87b6fc83.tar.lz
dexon-c7c82f1b44e07ad0906dde563cce46ea87b6fc83.tar.xz
dexon-c7c82f1b44e07ad0906dde563cce46ea87b6fc83.tar.zst
dexon-c7c82f1b44e07ad0906dde563cce46ea87b6fc83.zip
eth/downloader: fix the stall checks/drops during sync
Diffstat (limited to 'eth/downloader')
-rw-r--r--eth/downloader/downloader.go9
1 files changed, 8 insertions, 1 deletions
diff --git a/eth/downloader/downloader.go b/eth/downloader/downloader.go
index 01c0818a0..a10253b8e 100644
--- a/eth/downloader/downloader.go
+++ b/eth/downloader/downloader.go
@@ -1555,7 +1555,14 @@ func (d *Downloader) fetchParts(errCancel error, deliveryCh chan dataPack, deliv
// Check for fetch request timeouts and demote the responsible peers
for pid, fails := range expire() {
if peer := d.peers.Peer(pid); peer != nil {
- if fails > 1 {
+ // If a lot of retrieval elements expired, we might have overestimated the remote peer or perhaps
+ // ourselves. Only reset to minimal throughput but don't drop just yet. If even the minimal times
+ // out that sync wise we need to get rid of the peer.
+ //
+ // The reason the minimum threshold is 2 is because the downloader tries to estimate the bandwidth
+ // and latency of a peer separately, which requires pushing the measures capacity a bit and seeing
+ // how response times reacts, to it always requests one more than the minimum (i.e. min 2).
+ if fails > 2 {
glog.V(logger.Detail).Infof("%s: %s delivery timeout", peer, strings.ToLower(kind))
setIdle(peer, 0)
} else {