Skip to content

Commit 8f1bcd9

Browse files
author
lemastero
committed
Merge branch 'develop' into ETCM-126-get-raw-transaction
2 parents f4e5a89 + 6e30ab6 commit 8f1bcd9

28 files changed

+1854
-763
lines changed

src/it/scala/io/iohk/ethereum/sync/FastSyncItSpec.scala

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ class FastSyncItSpec extends FlatSpecBase with Matchers with BeforeAndAfter {
6464
_ <- peer1.startFastSync().delayExecution(50.milliseconds)
6565
_ <- peer1.waitForFastSyncFinish()
6666
} yield {
67-
assert(peer1.bl.getBestBlockNumber() == peer2.bl.getBestBlockNumber() - peer2.testSyncConfig.targetBlockOffset)
68-
assert(peer1.bl.getBestBlockNumber() == peer3.bl.getBestBlockNumber() - peer3.testSyncConfig.targetBlockOffset)
67+
assert(peer1.bl.getBestBlockNumber() == peer2.bl.getBestBlockNumber() - peer2.testSyncConfig.pivotBlockOffset)
68+
assert(peer1.bl.getBestBlockNumber() == peer3.bl.getBestBlockNumber() - peer3.testSyncConfig.pivotBlockOffset)
6969
}
7070
}
7171

@@ -81,13 +81,13 @@ class FastSyncItSpec extends FlatSpecBase with Matchers with BeforeAndAfter {
8181
val trie = peer1.getBestBlockTrie()
8282
// due to the fact that function generating state is deterministic both peer2 and peer3 ends up with exactly same
8383
// state, so peer1 can get whole trie from both of them.
84-
assert(peer1.bl.getBestBlockNumber() == peer2.bl.getBestBlockNumber() - peer2.testSyncConfig.targetBlockOffset)
85-
assert(peer1.bl.getBestBlockNumber() == peer3.bl.getBestBlockNumber() - peer3.testSyncConfig.targetBlockOffset)
84+
assert(peer1.bl.getBestBlockNumber() == peer2.bl.getBestBlockNumber() - peer2.testSyncConfig.pivotBlockOffset)
85+
assert(peer1.bl.getBestBlockNumber() == peer3.bl.getBestBlockNumber() - peer3.testSyncConfig.pivotBlockOffset)
8686
assert(trie.isDefined)
8787
}
8888
}
8989

90-
it should "should update target block" in customTestCaseResourceM(FakePeer.start2FakePeersRes()) {
90+
it should "should update pivot block" in customTestCaseResourceM(FakePeer.start2FakePeersRes()) {
9191
case (peer1, peer2) =>
9292
for {
9393
_ <- peer2.importBlocksUntil(1000)(IdentityUpdate)
@@ -96,7 +96,7 @@ class FastSyncItSpec extends FlatSpecBase with Matchers with BeforeAndAfter {
9696
_ <- peer1.startFastSync().delayExecution(50.milliseconds)
9797
_ <- peer1.waitForFastSyncFinish()
9898
} yield {
99-
assert(peer1.bl.getBestBlockNumber() == peer2.bl.getBestBlockNumber() - peer2.testSyncConfig.targetBlockOffset)
99+
assert(peer1.bl.getBestBlockNumber() == peer2.bl.getBestBlockNumber() - peer2.testSyncConfig.pivotBlockOffset)
100100
}
101101
}
102102
}
@@ -308,7 +308,7 @@ object FastSyncItSpec {
308308
lazy val validators = new MockValidatorsAlwaysSucceed
309309

310310
val testSyncConfig = syncConfig.copy(
311-
minPeersToChooseTargetBlock = 1,
311+
minPeersToChoosePivotBlock = 1,
312312
peersScanInterval = 5.milliseconds,
313313
blockHeadersPerRequest = 200,
314314
blockBodiesPerRequest = 50,

src/main/resources/application.conf

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -320,12 +320,16 @@ mantis {
320320
# Requested number of MPT nodes when syncing from other peers
321321
nodes-per-request = 384
322322

323-
# Minimum number of peers required to start fast-sync (by determining the target block)
324-
min-peers-to-choose-target-block = 2
323+
# Minimum number of peers required to start fast-sync (by determining the pivot block)
324+
min-peers-to-choose-pivot-block = 3
325+
326+
# Number of additional peers used to determine pivot block during fast-sync
327+
# Number of peers used to reach consensus = min-peers-to-choose-pivot-block + peers-to-choose-pivot-block-margin
328+
peers-to-choose-pivot-block-margin = 1
325329

326330
# During fast-sync when most up to date block is determined from peers, the actual target block number
327331
# will be decreased by this value
328-
target-block-offset = 128
332+
pivot-block-offset = 128
329333

330334
# How often to query peers for new blocks after the top of the chain has been reached
331335
check-for-new-block-interval = 10.seconds

src/main/scala/io/iohk/ethereum/blockchain/sync/FastSync.scala

Lines changed: 251 additions & 163 deletions
Large diffs are not rendered by default.

src/main/scala/io/iohk/ethereum/blockchain/sync/FastSyncTargetBlockSelector.scala

Lines changed: 0 additions & 147 deletions
This file was deleted.

src/main/scala/io/iohk/ethereum/blockchain/sync/PeerListSupport.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,12 @@ trait PeerListSupport {
2222

2323
var handshakedPeers: PeersMap = Map.empty
2424

25-
scheduler.scheduleWithFixedDelay(0.seconds, syncConfig.peersScanInterval, etcPeerManager, EtcPeerManagerActor.GetHandshakedPeers)(global, context.self)
25+
scheduler.scheduleWithFixedDelay(
26+
0.seconds,
27+
syncConfig.peersScanInterval,
28+
etcPeerManager,
29+
EtcPeerManagerActor.GetHandshakedPeers
30+
)(global, context.self)
2631

2732
def removePeer(peerId: PeerId): Unit = {
2833
peerEventBus ! Unsubscribe(PeerDisconnectedClassifier(PeerSelector.WithId(peerId)))

src/main/scala/io/iohk/ethereum/blockchain/sync/PeersClient.scala

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ class PeersClient(
3636

3737
def running(requesters: Requesters): Receive =
3838
handleBlacklistMessages orElse handlePeerListMessages orElse {
39-
case PrintStatus =>
40-
log.debug("PeersClient status: requests: {}, available peers: {}", requesters.size, peersToDownloadFrom.size)
39+
case PrintStatus => printStatus(requesters: Requesters)
4140
case BlacklistPeer(peerId, reason) => peerById(peerId).foreach(blacklistIfHandshaked(_, reason))
4241
case Request(message, peerSelector, toSerializable) =>
4342
val requester = sender()
@@ -99,6 +98,24 @@ class PeersClient(
9998
case _: GetBlockBodies => BlockBodies.code
10099
case _: GetNodeData => NodeData.code
101100
}
101+
102+
private def printStatus(requesters: Requesters): Unit = {
103+
log.debug(
104+
"Request status: requests in progress: {}, available peers: {}",
105+
requesters.size,
106+
peersToDownloadFrom.size
107+
)
108+
109+
lazy val handshakedPeersStatus = handshakedPeers.map { case (peer, info) =>
110+
val peerNetworkStatus = PeerNetworkStatus(
111+
peer,
112+
isBlacklisted = isBlacklisted(peer.id)
113+
)
114+
(peerNetworkStatus, info)
115+
}
116+
117+
log.debug(s"Handshaked peers status (number of peers: ${handshakedPeersStatus.size}): $handshakedPeersStatus")
118+
}
102119
}
103120

104121
object PeersClient {
@@ -123,6 +140,16 @@ object PeersClient {
123140
): Request[RequestMsg] =
124141
Request(message, peerSelector, toSerializable)
125142
}
143+
144+
case class PeerNetworkStatus(peer: Peer,
145+
isBlacklisted: Boolean) {
146+
override def toString: String =
147+
s"PeerNetworkStatus {" +
148+
s" RemotePeerAddress: ${peer.remoteAddress}," +
149+
s" ConnectionDirection: ${if (peer.incomingConnection) "Incoming" else "Outgoing"}," +
150+
s" Is blacklisted?: $isBlacklisted" +
151+
s" }"
152+
}
126153
case object PrintStatus extends PeersClientMessage
127154

128155
sealed trait ResponseMessage

0 commit comments

Comments
 (0)