Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
package io.iohk.ethereum.blockchain.sync

import java.util.Collections.newSetFromMap

import akka.actor.Actor
import akka.actor.ActorLogging
import akka.actor.ActorRef
import akka.actor.Cancellable
import akka.actor.Props
import akka.actor.Scheduler

import scala.collection.mutable
import scala.concurrent.ExecutionContext
import scala.jdk.CollectionConverters._
import scala.reflect.ClassTag

import io.iohk.ethereum.blockchain.PeerComparator
import io.iohk.ethereum.blockchain.sync.Blacklist.BlacklistReason
import io.iohk.ethereum.blockchain.sync.PeerListSupportNg.PeerWithInfo
import io.iohk.ethereum.network.EtcPeerManagerActor.PeerInfo
Expand Down Expand Up @@ -44,10 +39,6 @@ class PeersClient(
val statusSchedule: Cancellable =
scheduler.scheduleWithFixedDelay(syncConfig.printStatusInterval, syncConfig.printStatusInterval, self, PrintStatus)

val numberOfPeersToFetchFrom = syncConfig.peersToFetchFrom

val activeFetchingNodes: mutable.Set[PeerWithInfo] = lruSet(numberOfPeersToFetchFrom)

def receive: Receive = running(Map())

override def postStop(): Unit = {
Expand Down Expand Up @@ -104,8 +95,7 @@ class PeersClient(

private def selectPeer(peerSelector: PeerSelector): Option[Peer] =
peerSelector match {
case BestPeer => bestPeer(peersToDownloadFrom)
case NextBestPeer => nextBestPeer(peersToDownloadFrom, activeFetchingNodes.toSet)
case BestPeer => bestPeer(peersToDownloadFrom)
}

private def responseClassTag[RequestMsg <: Message](requestMsg: RequestMsg): ClassTag[_ <: Message] =
Expand Down Expand Up @@ -154,11 +144,6 @@ object PeersClient {

type Requesters = Map[ActorRef, ActorRef]

private def lruSet[A](maxEntries: Int): mutable.Set[A] =
newSetFromMap[A](new java.util.LinkedHashMap[A, java.lang.Boolean]() {
override def removeEldestEntry(eldest: java.util.Map.Entry[A, java.lang.Boolean]): Boolean = size > maxEntries
}).asScala

sealed trait PeersClientMessage
case class BlacklistPeer(peerId: PeerId, reason: BlacklistReason) extends PeersClientMessage
case class Request[RequestMsg <: Message](
Expand Down Expand Up @@ -192,7 +177,6 @@ object PeersClient {

sealed trait PeerSelector
case object BestPeer extends PeerSelector
case object NextBestPeer extends PeerSelector

def bestPeer(peersToDownloadFrom: Map[PeerId, PeerWithInfo]): Option[Peer] = {
val peersToUse = peersToDownloadFrom.values
Expand All @@ -207,26 +191,4 @@ object PeersClient {
None
}
}

//returns the next best peer after the one already returned previously
//TODO: whenever this method is called - do activeFetchingNodes.add(_) on the peer returned
def nextBestPeer(
peersToDownloadFrom: Map[PeerId, PeerWithInfo],
activeFetchingNodes: Set[PeerWithInfo]
): Option[Peer] = {
val peersToUse = peersToDownloadFrom.values
.collect { case PeerWithInfo(peer, peerInfo @ PeerInfo(_, _, true, _, _)) =>
(peer, peerInfo)
}

val peer =
peersToUse
.filterNot { case (peer, _) => activeFetchingNodes.map(_.peer).contains(peer) }
.filterNot { case (_, peerInfo) =>
activeFetchingNodes.map(_.peerInfo).exists(PeerComparator.doPeersHaveSameBestBlock(peerInfo, _))
}
.maxByOption { case (_, peerInfo) => peerInfo.chainWeight }
.map { case (peer, _) => peer }
peer
}
}

This file was deleted.

This file was deleted.

Loading