/** * Termination predicate. Given a set of votes, determines if * have sufficient to declare the end of the election round. * * @param votes Set of votes * @param l Identifier of the vote received last * @param zxid zxid of the the vote received last */ protected boolean termPredicate( HashMap<Long, Vote> votes, Vote vote) { HashSet<Long> set = new HashSet<Long>(); /* * First make the views consistent. Sometimes peers will have * different zxids for a server depending on timing. */ for (Map.Entry<Long,Vote> entry : votes.entrySet()) { if (vote.equals(entry.getValue())){ set.add(entry.getKey()); } } return self.getQuorumVerifier().containsQuorum(set); }
/** * Given a set of votes, return the SyncedLearnerTracker which is used to * determines if have sufficient to declare the end of the election round. * * @param votes * Set of votes * @param vote * Identifier of the vote received last * @return the SyncedLearnerTracker with vote details */ protected SyncedLearnerTracker getVoteTracker(Map<Long, Vote> votes, Vote vote) { SyncedLearnerTracker voteSet = new SyncedLearnerTracker(); voteSet.addQuorumVerifier(self.getQuorumVerifier()); if (self.getLastSeenQuorumVerifier() != null && self.getLastSeenQuorumVerifier().getVersion() > self .getQuorumVerifier().getVersion()) { voteSet.addQuorumVerifier(self.getLastSeenQuorumVerifier()); } /* * First make the views consistent. Sometimes peers will have different * zxids for a server depending on timing. */ for (Map.Entry<Long, Vote> entry : votes.entrySet()) { if (vote.equals(entry.getValue())) { voteSet.addAck(entry.getKey()); } } return voteSet; }
/** * Termination predicate. Given a set of votes, determines if * have sufficient to declare the end of the election round. * * @param votes Set of votes * @param l Identifier of the vote received last * @param zxid zxid of the the vote received last */ private boolean termPredicate( HashMap<Long, Vote> votes, Vote vote) { HashSet<Long> set = new HashSet<Long>(); /* * First make the views consistent. Sometimes peers will have * different zxids for a server depending on timing. */ for (Map.Entry<Long,Vote> entry : votes.entrySet()) { if (vote.equals(entry.getValue())){ set.add(entry.getKey()); } } if(self.getQuorumVerifier().containsQuorum(set)) return true; else return false; }