Coverage Summary for Class: FindingConnectionPointSyncState (co.rsk.net.sync)
Class |
Class, %
|
Method, %
|
Line, %
|
FindingConnectionPointSyncState |
0%
(0/1)
|
0%
(0/6)
|
0%
(0/26)
|
1 package co.rsk.net.sync;
2
3 import co.rsk.net.Peer;
4 import co.rsk.scoring.EventType;
5 import org.ethereum.db.BlockStore;
6
7 import java.util.Optional;
8
9 public class FindingConnectionPointSyncState extends BaseSyncState {
10
11 private final BlockStore blockStore;
12 private final Peer selectedPeer;
13 private final ConnectionPointFinder connectionPointFinder;
14
15 public FindingConnectionPointSyncState(SyncConfiguration syncConfiguration,
16 SyncEventsHandler syncEventsHandler,
17 BlockStore blockStore,
18 Peer selectedPeer,
19 long peerBestBlockNumber) {
20 super(syncEventsHandler, syncConfiguration);
21 long minNumber = blockStore.getMinNumber();
22
23 this.blockStore = blockStore;
24 this.selectedPeer = selectedPeer;
25 this.connectionPointFinder = new ConnectionPointFinder(
26 minNumber,
27 peerBestBlockNumber);
28 }
29
30 @Override
31 public void newConnectionPointData(byte[] hash) {
32 boolean knownBlock = isKnownBlock(hash);
33 Optional<Long> cp = connectionPointFinder.getConnectionPoint();
34 if (cp.isPresent()) {
35 if (knownBlock) {
36 syncEventsHandler.startDownloadingSkeleton(cp.get(), selectedPeer);
37 } else {
38 syncEventsHandler.onSyncIssue("Connection point not found with node {}", selectedPeer);
39 }
40 return;
41 }
42
43 if (knownBlock) {
44 connectionPointFinder.updateFound();
45 } else {
46 connectionPointFinder.updateNotFound();
47 }
48
49 cp = connectionPointFinder.getConnectionPoint();
50 // No need to ask for genesis hash
51 if (cp.isPresent() && cp.get() == 0L) {
52 syncEventsHandler.startDownloadingSkeleton(cp.get(), selectedPeer);
53 return;
54 }
55
56 this.resetTimeElapsed();
57 trySendRequest();
58 }
59
60 private boolean isKnownBlock(byte[] hash) {
61 return blockStore.isBlockExist(hash);
62 }
63
64 private void trySendRequest() {
65 syncEventsHandler.sendBlockHashRequest(selectedPeer, connectionPointFinder.getFindingHeight());
66 }
67
68 @Override
69 public void onEnter() {
70 trySendRequest();
71 }
72
73 @Override
74 protected void onMessageTimeOut() {
75 syncEventsHandler.onErrorSyncing(
76 selectedPeer.getPeerNodeID(),
77 "Timeout waiting requests {}",
78 EventType.TIMEOUT_MESSAGE,
79 this.getClass(),
80 selectedPeer.getPeerNodeID());
81 }
82 }