/** * Checks whether one member (unicast msg) or all members (multicast msg) have enough credits. Add those * that don't to the creditors list. Called with sent_lock held * @param dest * @param length */ private void determineCreditors(Address dest, int length) { boolean multicast=dest == null || dest.isMulticastAddress(); Address mbr; Long credits; if(multicast) { for(Map.Entry<Address,Long> entry: sent.entrySet()) { mbr=entry.getKey(); credits=entry.getValue(); if(credits <= length) creditors.add(mbr); } } else { credits=sent.get(dest); if(credits != null && credits <= length) creditors.add(dest); } }
boolean multicast=dest == null || dest.isMulticastAddress(); long lowest=max_credits, new_credit; Long val;
return; Address dest=msg.getDest(); if(dest == null || dest.isMulticastAddress()) { received.lock(); boolean locked=true;
boolean mcast=dest == null || dest.isMulticastAddress(); StringBuilder sb=new StringBuilder("received ("); sb.append(mcast? "mcast) " : "ucast) ").append(length).append(" bytes from ").append(sender);
continue; dst=entry.getKey(); multicast=dst == null || dst.isMulticastAddress(); try { if(first) {
dest=msg.getDest(); src=msg.getSrc(); mcast=dest == null || dest.isMulticastAddress();
Message msg=(Message)evt.getArg(); Address dest=msg.getDest(); if(dest != null && !dest.isMulticastAddress()) // only handle multicast messages break;
boolean multicast=dest == null || dest.isMulticastAddress(); if(loopback && (multicast || dest.equals(local_addr))) {
if (msg.getDest()!=null && ! msg.getDest().isMulticastAddress()) { return down_prot.down(evt);
if (dst == null || dst.isMulticastAddress()) { break;
public Object down(Event evt) { switch(evt.getType()) { case Event.VIEW_CHANGE: determineCoordinatorAndNextMember((View)evt.getArg()); break; case Event.MSG: Message msg=(Message)evt.getArg(); Address dest=msg.getDest(); if(dest == null || dest.isMulticastAddress()) { // only process multipoint messages if(coord == null) log.error("coordinator is null, cannot send message to coordinator"); else { msg.setSrc(local_addr); forwardTo(coord, msg); } return null; // handled here, don't pass down by default } break; } return down_prot.down(evt); }
if((msg.getDest() == null || msg.getDest().isMulticastAddress()) && log.isErrorEnabled()) log.error("NO CAUSAL.Header found"); return up_prot.up(evt);
Message msg=(Message)evt.getArg(); Address dest=msg.getDest(); if(dest != null && !dest.isMulticastAddress()) { break; // unicast address: not null and not mcast, pass down unchanged
public Object down(Event evt) { if(is_coord == true && evt.getType() == Event.MSG && local_addr != null) { Message msg=(Message)evt.getArg(); Address dest=msg.getDest(); if(dest == null || dest.isMulticastAddress()) { msg.putHeader(getName(), new MergefastHeader(local_addr)); } } if(evt.getType() == Event.VIEW_CHANGE) { handleViewChange((View)evt.getArg()); } return down_prot.down(evt); }
dst=msg.getDest(); if(dst == null || dst.isMulticastAddress()) // only handle unicast messages break; // pass up
if(dest != null && !dest.isMulticastAddress()) // we don't handle unicast messages break;
Message msg=(Message)evt.getArg(); if(msg == null) break; if(msg.getDest() == null || msg.getDest().isMulticastAddress()) { msg.putHeader(name, new SmackHeader(SmackHeader.MCAST, seqno)); sender_win.add(seqno, msg, (Vector)members.clone());
public Object down(Event evt) { switch(evt.getType()) { case Event.MSG: Message msg=(Message)evt.getArg(); Address dest=msg.getDest(); if(dest == null || dest.isMulticastAddress()) { // only handle multicasts long next_seqno=nextSeqno(); SequencerHeader hdr=new SequencerHeader(SequencerHeader.FORWARD, local_addr, next_seqno); msg.putHeader(name, hdr); if(!is_coord) { forwardToCoord(msg, next_seqno); } else { broadcast(msg); } return null; // don't pass down } break; case Event.VIEW_CHANGE: handleViewChange((View)evt.getArg()); break; } return down_prot.down(evt); }