public Object down(Message message) { Address dest = message.getDest(); if (dest != null && dest instanceof AnycastAddress && !message.isFlagSet(Message.Flag.NO_TOTAL_ORDER)) { // anycast message sendTotalOrderAnycastMessage(extract((AnycastAddress) dest), message); } else if (dest != null && dest instanceof AnycastAddress) { //anycast address with NO_TOTAL_ORDER flag (should no be possible, but...) send(extract((AnycastAddress) dest), message, true); } else { //normal message down_prot.down(message); } return null; }
send(destinations, message, false); } catch (Exception e) { logException("Exception caught while sending anycast message. Error is " + e.getLocalizedMessage(),
public Object down(Message message) { Address dest = message.getDest(); if (dest != null && dest instanceof AnycastAddress && !message.isFlagSet(Message.Flag.NO_TOTAL_ORDER)) { // anycast message sendTotalOrderAnycastMessage(extract((AnycastAddress) dest), message); } else if (dest != null && dest instanceof AnycastAddress) { //anycast address with NO_TOTAL_ORDER flag (should no be possible, but...) send(extract((AnycastAddress) dest), message, true); } else { //normal message down_prot.down(message); } return null; }
send(destinations, finalMessage, false);
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) }
send(destinations, message, false); } catch (Exception e) { logException("Exception caught while sending anycast message. Error is " + e.getLocalizedMessage(),
send(destinations, finalMessage, false);
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) }