public void bootstrapping(Discovery discovery, int maxPeer) { PeerTable peerTable = discovery.discover(peerHandlerGroup.getPeerHandlerFactory()); for (Peer peer : peerTable.getClosestPeers(maxPeer)) { if (peerHandlerGroup.handlerCount() >= maxPeer) { break; } peerHandlerGroup.addHandler(peerTable.getOwner(), peer); } }
@Override public synchronized void touchPeer(Peer p) { if (!contains(p)) { return; } for (PeerBucket b : buckets) { Peer found = b.findByPeer(p); if (found != null) { found.touch(); break; } } }
public List<String> getPeers(Peer peer) { List<String> peerList = getPeerUriList(); addPeer(peer); return peerList; }
private void addPeerHandler() { assert peerHandlerGroup.getActivePeerList().isEmpty(); peerHandlerGroup.addHandler(OWNER, Peer.valueOf("ynode://75bff16c@127.0.0.1:32918")); assert !peerHandlerGroup.getActivePeerList().isEmpty(); } }
@Scheduled(cron = "*/10 * * * * *") public void healthCheck() { if (!nodeStatus.isUpStatus()) { return; } peerHandlerGroup.healthCheck(peerTable.getOwner()); } }
@Override public synchronized List<Peer> getClosestPeers(int maxPeers) { List<Peer> closestEntries = getAllPeers(); closestEntries.remove(owner); closestEntries.sort(new DistanceComparator(owner.getPeerId().getBytes())); if (closestEntries.size() > maxPeers) { closestEntries = closestEntries.subList(0, maxPeers); } return closestEntries; }
public static PeerTable createPeerTable(int port) { Peer owner = Peer.valueOf(NODE_URI_PREFIX + port); PeerTable peerTable = new KademliaPeerTable(owner, storeBuilder.buildPeerStore()); List<String> seedList = Collections.singletonList(NODE_URI_PREFIX + 32918); peerTable.setSeedPeerList(seedList); return peerTable; } }
@Bean PeerHandlerGroup peerHandlerGroup(PeerTable peerTable, PeerHandlerFactory peerHandlerFactory) { PeerHandlerGroup peerHandlerGroup = new SimplePeerHandlerGroup(peerHandlerFactory); peerHandlerGroup.setPeerEventListener(peerTable); return peerHandlerGroup; }
/** * call back from PeerHandlerGroup * @param peer disconnected peer */ @Override public void peerDisconnected(Peer peer) { buckets[getBucketId(peer)].dropPeer(peer); peerStore.remove(peer.getPeerId()); } }
private static PeerHandler dummy(Peer peer) { return new PeerHandlerMock(peer.getYnodeUri()); } }
void bootstrapping() { super.bootstrapping(new KademliaDiscovery(peerTable), MAX_PEERS); }
GRpcTestNode(PeerHandlerFactory factory, int port) { this.port = port; this.peerHandlerGroup = new SimplePeerHandlerGroup(factory); this.peerTable = PeerTestUtils.createPeerTable(port); this.consumer = new DiscoveryServiceConsumer(peerTable); }
@Override public int compare(Peer p1, Peer p2) { int d1 = p1.getPeerId().distanceTo(targetId); int d2 = p2.getPeerId().distanceTo(targetId); return Integer.compare(d1, d2); } }
private void removeHandler(PeerHandler peerHandler) { peerHandler.stop(); handlerMap.remove(peerHandler.getPeer().toAddress()); peerEventListener.peerDisconnected(peerHandler.getPeer()); log.debug("Removed handler size={}", handlerMap.size()); }
public static BestBlock of(BranchId branchId, long index) { BestBlock bestBlock = new BestBlock(); bestBlock.setBranchId(branchId); bestBlock.setIndex(index); return bestBlock; } }
@Override public List<String> getAllActivePeer() { return peerHandlerGroup.getActivePeerList(); } }
@Test public void destroyAll() { addPeerHandler(); peerHandlerGroup.destroyAll(); }
private int getBucketsCount() { int i = 0; for (PeerBucket b : buckets) { if (b.getPeersCount() > 0) { i++; } } return i; }
@Before public void setUp() { this.peerHandlerGroup = new SimplePeerHandlerGroup(PeerHandlerMock.factory); peerHandlerGroup.setPeerEventListener(peer -> { assert peer != null; }); }