/** * Process with address <code>suspected</code> is suspected: remove it * from all receiver sets. This means that no ACKs are expected from this * process anymore. * * @param suspected The suspected process */ public void suspect(Address suspected) { if(log.isInfoEnabled()) log.info(ExternalStrings.AckMcastSenderWindow_SUSPECT_IS__0, suspected); remove(suspected); suspects.add(suspected); if(suspects.size() >= max_suspects) suspects.removeFirst(); }
/** * @param entry the record associated with the msg to retransmit. It * contains the list of receivers that haven't yet ack reception */ protected/*GemStoneAddition*/ void _retransmit(Entry entry) { Address sender; boolean received; synchronized(entry) { for(Enumeration e = entry.senders.keys(); e.hasMoreElements();) { sender = (Address)e.nextElement(); received = ((Boolean)entry.senders.get(sender)).booleanValue(); if (!received) { if(suspects.contains(sender)) { if(log.isWarnEnabled()) log.warn("removing " + sender + " from retransmit list as it is in the suspect list"); remove(sender); continue; } if(log.isInfoEnabled()) log.info("--> retransmitting msg #" + entry.seqno + " to " + sender); cmd.retransmit(entry.seqno, entry.msg.copy(), sender); } } } }
void removeMember(Address mbr) { synchronized(members) { if(mbr != null) { Object tmp; View new_view; members.removeElement(mbr); tmp=members.clone(); if(trace) log.trace("removed " + mbr + ", members=" + tmp); new_view=new View(new ViewId(local_addr, vid++), (Vector)tmp); passUp(new Event(Event.VIEW_CHANGE, new_view)); passDown(new Event(Event.VIEW_CHANGE, new_view)); if(sender_win != null) sender_win.remove(mbr); // causes retransmissions to mbr to stop } } }