private void printDeadMambers(GossipManager gossipService) { List<LocalMember> members = gossipService.getDeadMembers(); if (members.isEmpty()) { System.out.println("Dead: (none)"); return; } System.out.println("Dead: " + 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" + "======================="); }
public Integer call() throws Exception { int total = 0; for (int i = 0; i < clusterMembers - 1; ++i) { total += clients.get(i).getDeadMembers().size(); } return total; } }).afterWaitingAtMost(50, TimeUnit.SECONDS).isEqualTo(4);
protected void sendToDeadMember(){ LocalMember member = selectPartner(gossipManager.getDeadMembers()); sendMembershipList(gossipManager.getMyself(), member); }
private void sendToDeadMember() { sendMembershipList(gossipManager.getMyself(), selectPartner(gossipManager.getDeadMembers())); }
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; }
gossipManager.getLiveMembers().stream().map(Member::getId) .collect(Collectors.toList()), gossipManager.getDeadMembers().stream().map(Member::getId) .collect(Collectors.toList())));
@Test public void useMemberListIfProvided() throws URISyntaxException { LocalMember member = new LocalMember( "aCluster", new URI("udp://localhost:2000"), "aGossipMember", System.nanoTime(), new HashMap<String, String>(), 1000, 1, "exponential"); List<Member> memberList = new ArrayList<>(); memberList.add(member); GossipManager gossipManager = builder .uri(new URI("udp://localhost:8000")) .gossipMembers(memberList).registry(new MetricRegistry()).build(); assertEquals(1, gossipManager.getDeadMembers().size()); assertEquals(member.getId(), gossipManager.getDeadMembers().get(0).getId()); }
debugState(senderMember, remoteList); for (LocalMember i : gossipManager.getDeadMembers()) { if (i.getId().equals(senderMember.getId())) { LOGGER.debug(gossipManager.getMyself() + " contacted by dead member " + senderMember.getUri());