public KademliaDiscovery(PeerTable peerTable) { this.peerTable = peerTable; this.owner = peerTable.getOwner(); }
@Scheduled(cron = "*/10 * * * * *") public void healthCheck() { if (!nodeStatus.isUpStatus()) { return; } peerHandlerGroup.healthCheck(peerTable.getOwner()); } }
@Override public PeerTable discover(PeerHandlerFactory factory) { this.factory = factory; List<Peer> prevTried = new ArrayList<>(); for (Peer peer : peerTable.getBootstrappingSeedList()) { String ynodeUriWithoutPubKey = peerTable.getOwner().getYnodeUri() .substring(peer.getYnodeUri().indexOf("@")); if (peer.getYnodeUri().contains(ynodeUriWithoutPubKey)) { continue; } prevTried.add(peer); PeerHandler peerHandler = null; try { log.info("Try connecting to SEED peer = {}", peer); peerHandler = factory.create(peer); List<Peer> peerList = peerHandler.findPeers(owner); peerList.forEach(peerTable::addPeer); } catch (Exception e) { log.error("Failed connecting to SEED peer = {}", peer); } finally { if (peerHandler != null) { peerHandler.stop(); } } } int peerCount = peerTable.count(); log.info("Start discover! peerCount={}", peerCount - 1); findPeers(0, prevTried); return peerTable; }
void logDebugging() { log.info("{} => peerTable={}, active={}", peerTable.getOwner(), String.format("%3d", peerTable.count()), getActivePeerCount()); } }
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); } }
@Test public void touchPeer() { peerTable.touchPeer(peerTable.getOwner()); }
@Override protected Server createServer(GRpcTestNode node) { String ynodeUri = node.peerTable.getOwner().getYnodeUri(); Server server = InProcessServerBuilder.forName(ynodeUri).directExecutor().addService( new DiscoveryService(node.consumer)).build(); gRpcCleanup.register(server); try { return server.start(); } catch (Exception e) { return null; } } }