/** * Add a new message sent * @param messageID the message ID * @param destinations the destination set * @param initialSequenceNumber the initial sequence number * @param deliverToMyself true if *this* member is in destination sent, false otherwise */ public void addNewMessageToSend(MessageID messageID, Collection<Address> destinations, long initialSequenceNumber, boolean deliverToMyself) { MessageInfo messageInfo = new MessageInfo(destinations, initialSequenceNumber, deliverToMyself); if (deliverToMyself) { messageInfo.setProposeReceived(messageID.getAddress()); } sentMessages.put(messageID, messageInfo); }
private synchronized boolean addPropose(Address from, long sequenceNumber) { setProposeReceived(from); highestSequenceNumberReceived = Math.max(highestSequenceNumberReceived, sequenceNumber); return checkAllProposesReceived(); }
private MessageInfo(Collection<Address> addresses, long sequenceNumber, boolean selfDeliver) { this.destinations = new ArrayList<>(addresses); this.highestSequenceNumberReceived = sequenceNumber; createNewBitSet(addresses.size()); this.toSelfDeliver = selfDeliver; }
/** * Add a new message sent * @param messageID the message ID * @param destinations the destination set * @param initialSequenceNumber the initial sequence number * @param deliverToMyself true if *this* member is in destination sent, false otherwise */ public void addNewMessageToSend(MessageID messageID, Collection<Address> destinations, long initialSequenceNumber, boolean deliverToMyself) { MessageInfo messageInfo = new MessageInfo(destinations, initialSequenceNumber, deliverToMyself); if (deliverToMyself) { messageInfo.setProposeReceived(messageID.getAddress()); } sentMessages.put(messageID, messageInfo); }
public synchronized boolean removeLeavers(Collection<Address> leavers) { for (Address address : leavers) { int idx = destinations.indexOf(address); if (idx == -1) { continue; } receivedPropose.set(idx, false); } return checkAllProposesReceived(); } }
public long removeLeavers(MessageID messageID, Collection<Address> leavers) { MessageInfo messageInfo = sentMessages.get(messageID); if (messageInfo != null && messageInfo.removeLeavers(leavers)) { return messageInfo.getAndMarkFinalSent(); } return NOT_READY; }
private synchronized long getAndMarkFinalSent() { if (checkAllProposesReceived() && !finalMessageSent) { finalMessageSent = true; return highestSequenceNumberReceived; } return NOT_READY; }
private synchronized boolean addPropose(Address from, long sequenceNumber) { setProposeReceived(from); highestSequenceNumberReceived = Math.max(highestSequenceNumberReceived, sequenceNumber); return checkAllProposesReceived(); }
private MessageInfo(Collection<Address> addresses, long sequenceNumber, boolean selfDeliver) { this.destinations = new ArrayList<>(addresses); this.highestSequenceNumberReceived = sequenceNumber; createNewBitSet(addresses.size()); this.toSelfDeliver = selfDeliver; }
public long removeLeavers(MessageID messageID, Collection<Address> leavers) { MessageInfo messageInfo = sentMessages.get(messageID); if (messageInfo != null && messageInfo.removeLeavers(leavers)) { return messageInfo.getAndMarkFinalSent(); } return NOT_READY; }
public synchronized boolean removeLeavers(Collection<Address> leavers) { for (Address address : leavers) { int idx = destinations.indexOf(address); if (idx == -1) { continue; } receivedPropose.set(idx, false); } return checkAllProposesReceived(); } }
private synchronized long getAndMarkFinalSent() { if (checkAllProposesReceived() && !finalMessageSent) { finalMessageSent = true; return highestSequenceNumberReceived; } return NOT_READY; }