@Override public void start() throws Exception { deliverManager = new DeliveryManagerImpl(); senderManager = new SenderManager(); if(deliverThread == null) { deliverThread=new DeliveryThread(this); deliverThread.setLocalAddress(localAddress.toString()); } deliverThread.start(deliverManager); statsCollector.setStatsEnabled(statsEnabled()); }
senderManager.addNewMessageToSend(messageID, destinations, sequenceNumber, deliverToMySelf); send(destinations, message, false); } catch (Exception e) {
long finalSequenceNumber = senderManager.addPropose(messageID, from, header.getSequencerNumber()); .setFlag(Message.Flag.OOB, Message.Flag.INTERNAL, Message.Flag.DONT_BUNDLE); Set<Address> destinations = senderManager.getDestination(messageID); if (destinations.contains(localAddress)) { destinations.remove(localAddress); if (senderManager.markSent(messageID)) { deliverManager.markReadyToDeliver(messageID, finalSequenceNumber);
private void handleViewChange(View view) { if (log.isTraceEnabled()) { log.trace("Handle view %s", view); } final Collection<Address> leavers = deliverManager.handleView(view); //basis behavior: drop leavers message (as senders) //basis behavior: avoid waiting for the acks Collection<MessageID> pendingSentMessages = senderManager.getPendingMessageIDs(); for (MessageID messageID : pendingSentMessages) { long finalSequenceNumber = senderManager.removeLeavers(messageID, leavers); if (finalSequenceNumber != SenderManager.NOT_READY) { ToaHeader finalHeader = ToaHeader.newFinalMessageHeader(messageID, finalSequenceNumber); Message finalMessage = new Message().src(localAddress).putHeader(this.id, finalHeader) .setFlag(Message.Flag.OOB, Message.Flag.INTERNAL, Message.Flag.DONT_BUNDLE); if (log.isTraceEnabled()) { log.trace("Message %s is ready to be delivered. Final sequencer number is %d", messageID, finalSequenceNumber); } send(senderManager.getDestination(messageID), finalMessage, false); //returns true if we are in destination set if (senderManager.markSent(messageID)) { deliverManager.markReadyToDeliver(messageID, finalSequenceNumber); } } } // TODO: Future work: How to add fault tolerance? (simple and efficient) }
private void handleViewChange(View view) { if (log.isTraceEnabled()) { log.trace("Handle view %s", view); } final Collection<Address> leavers = deliverManager.handleView(view); //basis behavior: drop leavers message (as senders) //basis behavior: avoid waiting for the acks Collection<MessageID> pendingSentMessages = senderManager.getPendingMessageIDs(); for (MessageID messageID : pendingSentMessages) { long finalSequenceNumber = senderManager.removeLeavers(messageID, leavers); if (finalSequenceNumber != SenderManager.NOT_READY) { ToaHeader finalHeader = ToaHeader.newFinalMessageHeader(messageID, finalSequenceNumber); Message finalMessage = new Message().src(localAddress).putHeader(this.id, finalHeader) .setFlag(Message.Flag.OOB, Message.Flag.INTERNAL, Message.Flag.DONT_BUNDLE); if (log.isTraceEnabled()) { log.trace("Message %s is ready to be delivered. Final sequencer number is %d", messageID, finalSequenceNumber); } send(senderManager.getDestination(messageID), finalMessage, false); //returns true if we are in destination set if (senderManager.markSent(messageID)) { deliverManager.markReadyToDeliver(messageID, finalSequenceNumber); } } } // TODO: Future work: How to add fault tolerance? (simple and efficient) }
long finalSequenceNumber = senderManager.addPropose(messageID, from, header.getSequencerNumber()); .setFlag(Message.Flag.OOB, Message.Flag.INTERNAL, Message.Flag.DONT_BUNDLE); Set<Address> destinations = senderManager.getDestination(messageID); if (destinations.contains(localAddress)) { destinations.remove(localAddress); if (senderManager.markSent(messageID)) { deliverManager.markReadyToDeliver(messageID, finalSequenceNumber);
@Override public void start() throws Exception { deliverManager = new DeliveryManagerImpl(); senderManager = new SenderManager(); if(deliverThread == null) { deliverThread=new DeliveryThread(this); deliverThread.setLocalAddress(localAddress.toString()); } deliverThread.start(deliverManager); statsCollector.setStatsEnabled(statsEnabled()); }
senderManager.addNewMessageToSend(messageID, destinations, sequenceNumber, deliverToMySelf); send(destinations, message, false); } catch (Exception e) {