Skip to content

Commit

Permalink
Merge pull request #24652 from karalabe/block-fetcher-timeouts
Browse files Browse the repository at this point in the history
eth/fetcher: if peers never respond, drop them
  • Loading branch information
karalabe authored Apr 6, 2022
2 parents fb3a081 + 7e2bbb9 commit 111a1b7
Showing 1 changed file with 31 additions and 8 deletions.
39 changes: 31 additions & 8 deletions eth/fetcher/block_fetcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -477,10 +477,21 @@ func (f *BlockFetcher) loop() {
}
defer req.Close()

res := <-resCh
res.Done <- nil

f.FilterHeaders(peer, *res.Res.(*eth.BlockHeadersPacket), time.Now().Add(res.Time))
timeout := time.NewTimer(2 * fetchTimeout) // 2x leeway before dropping the peer
defer timeout.Stop()

select {
case res := <-resCh:
res.Done <- nil
f.FilterHeaders(peer, *res.Res.(*eth.BlockHeadersPacket), time.Now().Add(res.Time))

case <-timeout.C:
// The peer didn't respond in time. The request
// was already rescheduled at this point, we were
// waiting for a catchup. With an unresponsive
// peer however, it's a protocol violation.
f.dropPeer(peer)
}
}(hash)
}
}(peer)
Expand Down Expand Up @@ -523,11 +534,23 @@ func (f *BlockFetcher) loop() {
}
defer req.Close()

res := <-resCh
res.Done <- nil
timeout := time.NewTimer(2 * fetchTimeout) // 2x leeway before dropping the peer
defer timeout.Stop()

select {
case res := <-resCh:
res.Done <- nil

txs, uncles := res.Res.(*eth.BlockBodiesPacket).Unpack()
f.FilterBodies(peer, txs, uncles, time.Now())
txs, uncles := res.Res.(*eth.BlockBodiesPacket).Unpack()
f.FilterBodies(peer, txs, uncles, time.Now())

case <-timeout.C:
// The peer didn't respond in time. The request
// was already rescheduled at this point, we were
// waiting for a catchup. With an unresponsive
// peer however, it's a protocol violation.
f.dropPeer(peer)
}
}(peer, hashes)
}
// Schedule the next fetch if blocks are still pending
Expand Down

0 comments on commit 111a1b7

Please sign in to comment.