diff --git a/src/main/scala/io/iohk/ethereum/blockchain/sync/PeersClient.scala b/src/main/scala/io/iohk/ethereum/blockchain/sync/PeersClient.scala index 26be0ee2aa..085c0d3891 100644 --- a/src/main/scala/io/iohk/ethereum/blockchain/sync/PeersClient.scala +++ b/src/main/scala/io/iohk/ethereum/blockchain/sync/PeersClient.scala @@ -36,8 +36,7 @@ class PeersClient( def running(requesters: Requesters): Receive = handleBlacklistMessages orElse handlePeerListMessages orElse { - case PrintStatus => - log.debug("PeersClient status: requests: {}, available peers: {}", requesters.size, peersToDownloadFrom.size) + case PrintStatus => printStatus(requesters: Requesters) case BlacklistPeer(peerId, reason) => peerById(peerId).foreach(blacklistIfHandshaked(_, reason)) case Request(message, peerSelector, toSerializable) => val requester = sender() @@ -99,6 +98,24 @@ class PeersClient( case _: GetBlockBodies => BlockBodies.code case _: GetNodeData => NodeData.code } + + private def printStatus(requesters: Requesters): Unit = { + log.debug( + "Request status: requests in progress: {}, available peers: {}", + requesters.size, + peersToDownloadFrom.size + ) + + lazy val handshakedPeersStatus = handshakedPeers.map { case (peer, info) => + val peerNetworkStatus = PeerNetworkStatus( + peer, + isBlacklisted = isBlacklisted(peer.id) + ) + (peerNetworkStatus, info) + } + + log.debug(s"Handshaked peers status (number of peers: ${handshakedPeersStatus.size}): $handshakedPeersStatus") + } } object PeersClient { @@ -123,6 +140,16 @@ object PeersClient { ): Request[RequestMsg] = Request(message, peerSelector, toSerializable) } + + case class PeerNetworkStatus(peer: Peer, + isBlacklisted: Boolean) { + override def toString: String = + s"PeerNetworkStatus {" + + s" RemotePeerAddress: ${peer.remoteAddress}," + + s" ConnectionDirection: ${if (peer.incomingConnection) "Incoming" else "Outgoing"}," + + s" Is blacklisted?: $isBlacklisted" + + s" }" + } case object PrintStatus extends PeersClientMessage sealed trait ResponseMessage diff --git a/src/main/scala/io/iohk/ethereum/network/EtcPeerManagerActor.scala b/src/main/scala/io/iohk/ethereum/network/EtcPeerManagerActor.scala index fcef4feeb8..dbc6994897 100644 --- a/src/main/scala/io/iohk/ethereum/network/EtcPeerManagerActor.scala +++ b/src/main/scala/io/iohk/ethereum/network/EtcPeerManagerActor.scala @@ -13,6 +13,7 @@ import io.iohk.ethereum.network.p2p.{Message, MessageSerializable} import io.iohk.ethereum.network.p2p.messages.CommonMessages.{NewBlock, Status} import io.iohk.ethereum.network.p2p.messages.PV62.{BlockHeaders, GetBlockHeaders, NewBlockHashes} import io.iohk.ethereum.network.p2p.messages.WireProtocol.Disconnect +import io.iohk.ethereum.utils.ByteStringUtils /** * EtcPeerManager actor is in charge of keeping updated information about each peer, while also being able to @@ -243,6 +244,15 @@ object EtcPeerManagerActor { def withBestBlockData(maxBlockNumber: BigInt, bestBlockHash: ByteString): PeerInfo = copy(maxBlockNumber = maxBlockNumber, bestBlockHash = bestBlockHash) + + override def toString: String = + s"PeerInfo {" + + s" totalDifficulty: $totalDifficulty," + + s" forkAccepted: $forkAccepted," + + s" maxBlockNumber: $maxBlockNumber," + + s" bestBlockHash: ${ByteStringUtils.hash2string(bestBlockHash)}," + + s" handshakeStatus: $remoteStatus" + + s" }" } object PeerInfo { diff --git a/src/main/scala/io/iohk/ethereum/network/PeerManagerActor.scala b/src/main/scala/io/iohk/ethereum/network/PeerManagerActor.scala index 00b3cb9dc9..5f74036e2f 100644 --- a/src/main/scala/io/iohk/ethereum/network/PeerManagerActor.scala +++ b/src/main/scala/io/iohk/ethereum/network/PeerManagerActor.scala @@ -114,7 +114,7 @@ class PeerManagerActor( log.debug("Trying to connect to {} nodes", nodesToConnect.size) nodesToConnect.foreach(n => self ! ConnectToPeer(n.node.toUri)) } else { - log.debug("The nodes list is empty") + log.debug("The nodes list is empty, no new nodes to connect to") } } diff --git a/src/main/scala/io/iohk/ethereum/network/p2p/messages/CommonMessages.scala b/src/main/scala/io/iohk/ethereum/network/p2p/messages/CommonMessages.scala index 14e984a479..a8ec0b45e9 100644 --- a/src/main/scala/io/iohk/ethereum/network/p2p/messages/CommonMessages.scala +++ b/src/main/scala/io/iohk/ethereum/network/p2p/messages/CommonMessages.scala @@ -36,13 +36,13 @@ object CommonMessages { override def code: Int = Status.code override def toString: String = { - s"""Status { - |protocolVersion: $protocolVersion - |networkId: $networkId - |totalDifficulty: $totalDifficulty - |bestHash: ${Hex.toHexString(bestHash.toArray[Byte])} - |genesisHash: ${Hex.toHexString(genesisHash.toArray[Byte])} - |}""".stripMargin + s"Status {" + + s" protocolVersion: $protocolVersion," + + s" networkId: $networkId," + + s" totalDifficulty: $totalDifficulty," + + s" bestHash: ${Hex.toHexString(bestHash.toArray[Byte])}," + + s" genesisHash: ${Hex.toHexString(genesisHash.toArray[Byte])}" + + s" }" } }