@Override public void handleAccepted(PaxosMessage proposal) { ensureSize(chosen, proposal.getInstanceNum() + 1); // Prevent NPE if (chosen.get(proposal.getInstanceNum()) != null) return; // Something has already been chosen so I dont care anymore. List<PaxosMessage> acceptedVotes = proposalAcceptedVotes.get(proposal.getInstanceNum()); if (acceptedVotes == null) { acceptedVotes = new ArrayList<PaxosMessage>(); acceptedVotes.add(proposal); proposalAcceptedVotes.put(proposal.getInstanceNum(), acceptedVotes); } else { for (PaxosMessage acceptedVote : acceptedVotes) { if (proposal.getProposerId() == acceptedVote.getProposerId()) return; // This person is reaffirming their acceptance of this instances proposal. } acceptedVotes.add(proposal); proposalAcceptedVotes.put(proposal.getInstanceNum(), acceptedVotes); } // handle being chosen if (proposalAcceptedVotes.get(proposal.getInstanceNum()).size() >= serverSet.getQuorumSize()) { onChosen(proposal); } }
private boolean nodeIsLeader() { return id == getLeader() && prepareResponseFrom.size() >= serverSet.getQuorumSize(); }