@@ -4,6 +4,7 @@ import java.time.Instant
44import akka .actor ._
55import akka .util .ByteString
66import cats .data .NonEmptyList
7+ import io .iohk .ethereum .blockchain .sync .PeerListSupportNg .PeerWithInfo
78import io .iohk .ethereum .blockchain .sync .PeerRequestHandler .ResponseReceived
89import io .iohk .ethereum .blockchain .sync .SyncProtocol .Status .Progress
910import io .iohk .ethereum .blockchain .sync ._
@@ -20,7 +21,7 @@ import io.iohk.ethereum.db.storage.{AppStateStorage, FastSyncStateStorage}
2021import io .iohk .ethereum .domain ._
2122import io .iohk .ethereum .mpt .MerklePatriciaTrie
2223import io .iohk .ethereum .network .EtcPeerManagerActor .PeerInfo
23- import io .iohk .ethereum .network .Peer
24+ import io .iohk .ethereum .network .{ Peer , PeerId }
2425import io .iohk .ethereum .network .p2p .messages .Codes
2526import io .iohk .ethereum .network .p2p .messages .PV62 ._
2627import io .iohk .ethereum .network .p2p .messages .PV63 ._
@@ -541,7 +542,7 @@ class FastSync(
541542 requestedReceipts = requestedReceipts - handler
542543
543544 requestedHeaders -= peer
544- if (handshakedPeers.contains(peer)) {
545+ if (handshakedPeers.contains(peer.id )) {
545546 blacklist.add(peer.id, blacklistDuration, reason)
546547 }
547548 }
@@ -567,7 +568,8 @@ class FastSync(
567568 }
568569
569570 private def printStatus (): Unit = {
570- val formatPeer : Peer => String = peer =>
571+ def formatPeerEntry (entry : PeerWithInfo ): String = formatPeer(entry.peer)
572+ def formatPeer (peer : Peer ): String =
571573 s " ${peer.remoteAddress.getAddress.getHostAddress}: ${peer.remoteAddress.getPort}"
572574 val blacklistedIds = blacklist.keys
573575 log.info(
@@ -583,7 +585,7 @@ class FastSync(
583585 | blacklisted({})
584586 | """ .stripMargin.replace(" \n " , " " ),
585587 assignedHandlers.values.map(formatPeer).toSeq.sorted.mkString(" , " ),
586- handshakedPeers.keys. map(formatPeer).toSeq .sorted.mkString(" , " ),
588+ handshakedPeers.values.toList. map(e => formatPeerEntry(e)) .sorted.mkString(" , " ),
587589 blacklistedIds.map(_.value).mkString(" , " )
588590 )
589591 }
@@ -609,12 +611,12 @@ class FastSync(
609611 }
610612
611613 private def getPeersWithFreshEnoughPivot (
612- peers : NonEmptyList [( Peer , PeerInfo ) ],
614+ peers : NonEmptyList [PeerWithInfo ],
613615 state : SyncState ,
614616 syncConfig : SyncConfig
615617 ): List [(Peer , BigInt )] = {
616618 peers.collect {
617- case (peer, info) if hasBestBlockFreshEnoughToUpdatePivotBlock(info, state, syncConfig) =>
619+ case PeerWithInfo (peer, info) if hasBestBlockFreshEnoughToUpdatePivotBlock(info, state, syncConfig) =>
618620 (peer, info.maxBlockNumber)
619621 }
620622 }
@@ -626,17 +628,17 @@ class FastSync(
626628 ! (syncState.updatingPivotBlock || stateSyncRestartRequested)
627629
628630 def pivotBlockIsStale (): Boolean = {
629- val currentPeers = peersToDownloadFrom.toList
630- if (currentPeers .isEmpty) {
631+ val peersWithInfo = peersToDownloadFrom.values .toList
632+ if (peersWithInfo .isEmpty) {
631633 false
632634 } else {
633- val peerWithBestBlockInNetwork = currentPeers .maxBy(peerWithNum => peerWithNum._2 .maxBlockNumber)
635+ val peerWithBestBlockInNetwork = peersWithInfo .maxBy(_.peerInfo .maxBlockNumber)
634636
635637 val bestPossibleTargetDifferenceInNetwork =
636- (peerWithBestBlockInNetwork._2 .maxBlockNumber - syncConfig.pivotBlockOffset) - syncState.pivotBlock.number
638+ (peerWithBestBlockInNetwork.peerInfo .maxBlockNumber - syncConfig.pivotBlockOffset) - syncState.pivotBlock.number
637639
638640 val peersWithTooFreshPossiblePivotBlock =
639- getPeersWithFreshEnoughPivot(NonEmptyList .fromListUnsafe(currentPeers ), syncState, syncConfig)
641+ getPeersWithFreshEnoughPivot(NonEmptyList .fromListUnsafe(peersWithInfo ), syncState, syncConfig)
640642
641643 if (peersWithTooFreshPossiblePivotBlock.isEmpty) {
642644 log.info(
@@ -652,7 +654,7 @@ class FastSync(
652654 " There are {} peers with possible new pivot block, " +
653655 " best known pivot in current peer list has number {}" ,
654656 peersWithTooFreshPossiblePivotBlock.size,
655- peerWithBestBlockInNetwork._2 .maxBlockNumber
657+ peerWithBestBlockInNetwork.peerInfo .maxBlockNumber
656658 )
657659
658660 pivotBlockIsStale
@@ -715,7 +717,7 @@ class FastSync(
715717 .filter(p => peerRequestsTime.get(p.peer).forall(d => d.plusMillis(fastSyncThrottle.toMillis).isBefore(now)))
716718 peers
717719 .take(maxConcurrentRequests - assignedHandlers.size)
718- .sortBy(_.info .maxBlockNumber)(Ordering [BigInt ].reverse)
720+ .sortBy(_.peerInfo .maxBlockNumber)(Ordering [BigInt ].reverse)
719721 .foreach(assignBlockchainWork)
720722 }
721723 }
@@ -803,8 +805,10 @@ class FastSync(
803805 peerRequestsTime += (peer -> Instant .now())
804806 }
805807
806- def unassignedPeers : List [PeerWithInfo ] =
807- (peersToDownloadFrom -- assignedHandlers.values).map(PeerWithInfo .tupled).toList
808+ def unassignedPeers : List [PeerWithInfo ] = {
809+ val assignedPeers = assignedHandlers.values.map(_.id).toList
810+ peersToDownloadFrom.removedAll(assignedPeers).values.toList
811+ }
808812
809813 def blockchainDataToDownload : Boolean =
810814 syncState.blockChainWorkQueued || syncState.bestBlockHeaderNumber < syncState.safeDownloadTarget
@@ -838,8 +842,6 @@ class FastSync(
838842
839843object FastSync {
840844
841- case class PeerWithInfo (peer : Peer , info : PeerInfo )
842-
843845 // scalastyle:off parameter.number
844846 def props (
845847 fastSyncStateStorage : FastSyncStateStorage ,
0 commit comments