private void printLiveMembers(GossipManager gossipService) { List<LocalMember> members = gossipService.getLiveMembers(); if (members.isEmpty()) { System.out.println("Live: (none)"); return; } System.out.println("Live: " + members.get(0)); for (int i = 1; i < members.size(); i++) { System.out.println(" : " + members.get(i)); } }
private void debugState(RemoteMember senderMember, List<Member> remoteList){ LOGGER.warn( "-----------------------\n" + "Me " + gossipManager.getMyself() + "\n" + "Sender " + senderMember + "\n" + "RemoteList " + remoteList + "\n" + "Live " + gossipManager.getLiveMembers()+ "\n" + "Dead " + gossipManager.getDeadMembers()+ "\n" + "======================="); }
/** * sends an optimistic shutdown message to several clusters nodes */ protected void sendShutdownMessage(){ List<LocalMember> l = gossipManager.getLiveMembers(); int sendTo = l.size() < 3 ? 1 : l.size() / 3; for (int i = 0; i < sendTo; i++) { threadService.execute(() -> sendShutdownMessage(gossipManager.getMyself(), selectPartner(l))); } } }
/** * sends an optimistic shutdown message to several clusters nodes */ protected void sendShutdownMessage(){ List<LocalMember> l = gossipManager.getLiveMembers(); int sendTo = l.size() < 3 ? 1 : l.size() / 2; for (int i = 0; i < sendTo; i++) { threadService.execute(() -> sendShutdownMessage(gossipManager.getMyself(), selectPartner(l))); } } }
public Integer call() throws Exception { int total = 0; for (int i = 0; i < clusterMembers; ++i) { total += clients.get(i).getLiveMembers().size(); } return total; }}).afterWaitingAtMost(40, TimeUnit.SECONDS).isEqualTo(20);
public Integer call() throws Exception { int total = 0; for (int i = 0; i < clusterMembers; ++i) { total += clients.get(i).getLiveMembers().size(); } return total; } }).afterWaitingAtMost(60, TimeUnit.SECONDS).isEqualTo(20);
public Integer call() throws Exception { int total = 0; for (int i = 0; i < clusterMembers; ++i) { total += clients.get(i).getLiveMembers().size(); } return total; } }).afterWaitingAtMost(40, TimeUnit.SECONDS).isEqualTo(20);
public Integer call() throws Exception { int total = 0; for (int i = 0; i < clusterMembers; ++i) { total += clients.get(i).getLiveMembers().size(); } return total; } }).afterWaitingAtMost(40, TimeUnit.SECONDS).isEqualTo(16);
private List<LocalMember> sameDatacenterDifferentRack(){ String myDc = gossipManager.getMyself().getProperties().get(DATACENTER); String rack = gossipManager.getMyself().getProperties().get(RACK); if (myDc == null|| rack == null){ return Collections.emptyList(); } List<LocalMember> notMyDc = new ArrayList<LocalMember>(10); for (LocalMember i : gossipManager.getLiveMembers()){ if (myDc.equals(i.getProperties().get(DATACENTER)) && !rack.equals(i.getProperties().get(RACK))){ notMyDc.add(i); } } return notMyDc; }
private List<LocalMember> differentDataCenter(){ String myDc = gossipManager.getMyself().getProperties().get(DATACENTER); String rack = gossipManager.getMyself().getProperties().get(RACK); if (myDc == null|| rack == null){ return Collections.emptyList(); } List<LocalMember> notMyDc = new ArrayList<LocalMember>(10); for (LocalMember i : gossipManager.getLiveMembers()){ if (!myDc.equals(i.getProperties().get(DATACENTER))){ notMyDc.add(i); } } return notMyDc; }
private List<LocalMember> sameRackNodes(){ String myDc = gossipManager.getMyself().getProperties().get(DATACENTER); String rack = gossipManager.getMyself().getProperties().get(RACK); if (myDc == null|| rack == null){ return Collections.emptyList(); } List<LocalMember> sameDcAndRack = new ArrayList<LocalMember>(10); for (LocalMember i : gossipManager.getLiveMembers()){ if (myDc.equals(i.getProperties().get(DATACENTER)) && rack.equals(i.getProperties().get(RACK))){ sameDcAndRack.add(i); } } return sameDcAndRack; }
protected void sendToALiveMember(){ LocalMember member = selectPartner(gossipManager.getLiveMembers()); sendMembershipList(gossipManager.getMyself(), member); }
private SharedDataMessage generateLockMessage(String key) { VoteCandidate voteCandidate = new VoteCandidate(gossipManager.getMyself().getId(), key, new ConcurrentHashMap<>()); voteCandidate.addVote(new Vote(gossipManager.getMyself().getId(), true, false, gossipManager.getLiveMembers().stream().map(Member::getId).collect(Collectors.toList()), gossipManager.getDeadMembers().stream().map(Member::getId) .collect(Collectors.toList()))); Map<String, VoteCandidate> voteCandidateMap = new ConcurrentHashMap<>(); voteCandidateMap.put(voteCandidate.getCandidateNodeId(), voteCandidate); MajorityVote majorityVote = new MajorityVote(voteCandidateMap); SharedDataMessage lockMessage = new SharedDataMessage(); lockMessage.setKey(generateLockKey(key)); lockMessage.setPayload(majorityVote); lockMessage.setExpireAt(Long.MAX_VALUE); lockMessage.setTimestamp(System.currentTimeMillis()); return lockMessage; }
private void assertTwoAlive(List<GossipManager> clients){ TUnit.assertThat(() -> { int total = 0; for (int i = 0; i < clients.size(); ++i) { total += clients.get(i).getLiveMembers().size(); } return total; }).afterWaitingAtMost(20, TimeUnit.SECONDS).isEqualTo(2); }
gossipManager.getLiveMembers().stream().map(Member::getId) .collect(Collectors.toList()), gossipManager.getDeadMembers().stream().map(Member::getId)
@Override public void init() { super.init(); scheduledExecutorService.scheduleAtFixedRate(() -> { threadService.execute(() -> { sendToALiveMember(); }); }, 0, gossipManager.getSettings().getGossipInterval(), TimeUnit.MILLISECONDS); scheduledExecutorService.scheduleAtFixedRate(() -> { sendToDeadMember(); }, 0, gossipManager.getSettings().getGossipInterval(), TimeUnit.MILLISECONDS); scheduledExecutorService.scheduleAtFixedRate( () -> sendPerNodeData(gossipManager.getMyself(), selectPartner(gossipManager.getLiveMembers())), 0, gossipManager.getSettings().getGossipInterval(), TimeUnit.MILLISECONDS); scheduledExecutorService.scheduleAtFixedRate( () -> sendSharedData(gossipManager.getMyself(), selectPartner(gossipManager.getLiveMembers())), 0, gossipManager.getSettings().getGossipInterval(), TimeUnit.MILLISECONDS); }
@Test public void createMembersListIfNull() throws URISyntaxException { GossipManager gossipManager = builder.gossipMembers(null).registry(new MetricRegistry()).build(); assertNotNull(gossipManager.getLiveMembers()); }
String value = ""; try { value = gossipService1.getLiveMembers().get(0).getProperties().get("a"); } catch (RuntimeException e){ } return value; String value = ""; try { value = gossipService2.getLiveMembers().get(0).getProperties().get("a"); } catch (RuntimeException e){ } return value;
int total = 0; for (int i = 0; i < 4; ++i) { total += nodes.get(i).getLiveMembers().size();
@Test public void simpleDataTest(){ TUnit.assertThat(() -> { int total = 0; for (GossipManager client : clients){ total += client.getLiveMembers().size(); } return total; }).afterWaitingAtMost(10, TimeUnit.SECONDS).isEqualTo(2); clients.get(0).gossipPerNodeData(generatePerNodeMsg("a", "b")); clients.get(0).gossipSharedData(generateSharedMsg("a", "c")); TUnit.assertThat(() -> { PerNodeDataMessage x = clients.get(1).findPerNodeGossipData(1 + "", "a"); if (x == null) return ""; else return x.getPayload(); }).afterWaitingAtMost(10, TimeUnit.SECONDS).isEqualTo("b"); TUnit.assertThat(() -> { SharedDataMessage x = clients.get(1).findSharedGossipData("a"); if (x == null) return ""; else return x.getPayload(); }).afterWaitingAtMost(10, TimeUnit.SECONDS).isEqualTo("c"); }