@@ -171,7 +171,7 @@ trait FastSync {
171
171
172
172
syncStateStorageActor ! fastSyncStateStorage
173
173
174
- private var blockChainOnlyPeers = Set .empty[Peer ]
174
+ private var blockChainOnlyPeers = Seq .empty[Peer ]
175
175
176
176
private val syncStatePersistCancellable = scheduler.schedule(persistStateSnapshotInterval, persistStateSnapshotInterval, self, PersistSyncState )
177
177
private val heartBeat = scheduler.schedule(syncRetryInterval, syncRetryInterval * 2 , self, ProcessSyncing )
@@ -237,9 +237,10 @@ trait FastSync {
237
237
bestBlockHeaderNumber)
238
238
}
239
239
240
- private def handleFailingMptPeers : Receive = {
241
- case BlockChainOnlyDownload (peer) =>
242
- blockChainOnlyPeers = (blockChainOnlyPeers + peer).take(blockChainOnlyPeersPoolSize)
240
+ private def handleFailingMptPeers : Receive = {
241
+ case MarkPeerBlockchainOnly (peer) => if (! blockChainOnlyPeers.contains(peer)) {
242
+ blockChainOnlyPeers = peer +: blockChainOnlyPeers.dropRight(1 )
243
+ }
243
244
}
244
245
245
246
private def printStatus () = {
@@ -312,7 +313,7 @@ trait FastSync {
312
313
cleanup()
313
314
appStateStorage.fastSyncDone()
314
315
context become idle
315
- blockChainOnlyPeers = Set .empty
316
+ blockChainOnlyPeers = Seq .empty
316
317
self ! FastSyncDone
317
318
}
318
319
@@ -333,12 +334,13 @@ trait FastSync {
333
334
}
334
335
} else {
335
336
val peers = unassignedPeers
336
- (peers -- blockChainOnlyPeers)
337
+ val blockChainPeers = blockChainOnlyPeers.toSet
338
+ (peers -- blockChainPeers)
337
339
.take(maxConcurrentRequests - assignedHandlers.size)
338
340
.toSeq.sortBy(_.ref.toString())
339
341
.foreach(assignWork)
340
342
peers
341
- .intersect(blockChainOnlyPeers )
343
+ .intersect(blockChainPeers )
342
344
.take(maxConcurrentRequests - assignedHandlers.size)
343
345
.toSeq.sortBy(_.ref.toString())
344
346
.foreach(assignBlockChainWork)
@@ -453,7 +455,7 @@ object FastSync {
453
455
454
456
private case object ProcessSyncing
455
457
private case object PersistSyncState
456
- case class BlockChainOnlyDownload (peer : Peer )
458
+ case class MarkPeerBlockchainOnly (peer : Peer )
457
459
458
460
case class SyncState (
459
461
targetBlock : BlockHeader ,
0 commit comments