Skip to content

Commit e828d6c

Browse files
committed
eth: track peer revisions in the sync loop
1 parent d41f64b commit e828d6c

2 files changed

Lines changed: 7 additions & 4 deletions

File tree

eth/sync.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ type chainSyncer struct {
6161
peerEventCh chan struct{}
6262
doneCh chan error // non-nil when sync is running
6363

64-
peersUnavailableUntil time.Time
65-
peersUnavailableAtRevision uint64
64+
peersUnavailableUntil time.Time
65+
observedPeerRevision uint64
6666
}
6767

6868
// chainSyncOp is a scheduled sync operation.
@@ -143,7 +143,6 @@ func (cs *chainSyncer) onSyncDone(err error) {
143143

144144
if errors.Is(err, downloader.ErrPeersUnavailable) || errors.Is(err, downloader.ErrPeerBackedOff) || errors.Is(err, whitelist.ErrNoRemote) {
145145
cs.peersUnavailableUntil = time.Now().Add(forceSyncCycle)
146-
cs.peersUnavailableAtRevision = cs.handler.peers.currentRevision()
147146
} else {
148147
cs.peersUnavailableUntil = time.Time{}
149148
}
@@ -159,9 +158,11 @@ func (cs *chainSyncer) onSyncDone(err error) {
159158
}
160159

161160
func (cs *chainSyncer) onPeerEvent() {
162-
if !cs.peersUnavailableUntil.IsZero() && cs.handler.peers.currentRevision() != cs.peersUnavailableAtRevision {
161+
revision := cs.handler.peers.currentRevision()
162+
if !cs.peersUnavailableUntil.IsZero() && revision != cs.observedPeerRevision {
163163
cs.peersUnavailableUntil = time.Time{}
164164
}
165+
cs.observedPeerRevision = revision
165166
}
166167

167168
func (cs *chainSyncer) shutdown() {

eth/sync_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ func TestChainSyncerCooldownSurvivesBlockAnnounce(t *testing.T) {
195195
if err := handler.downloader.RegisterPeer(peer.ID(), eth.ETH68, &ethPeer{Peer: peer}); err != nil {
196196
t.Fatal(err)
197197
}
198+
syncer.onPeerEvent()
198199

199200
syncer.onSyncDone(downloader.ErrPeersUnavailable)
200201
if syncer.peersUnavailableUntil.IsZero() {
@@ -216,6 +217,7 @@ func TestChainSyncerCooldownSurvivesBlockAnnounce(t *testing.T) {
216217
if handler.peers.len() != 1 {
217218
t.Fatalf("peer replacement should preserve peer count, have %d", handler.peers.len())
218219
}
220+
syncer.onSyncDone(downloader.ErrPeersUnavailable)
219221
syncer.onPeerEvent()
220222
if !syncer.peersUnavailableUntil.IsZero() {
221223
t.Fatal("a peer replacement must clear the cooldown")

0 commit comments

Comments
 (0)