org.jgroups.stack
Class Retransmitter

java.lang.Object
  extended byorg.jgroups.stack.Retransmitter

public class Retransmitter
extends java.lang.Object

Maintains a pool of sequence numbers of messages that need to be retransmitted. Messages are aged and retransmission requests sent according to age (linear backoff used). If a TimeScheduler instance is given to the constructor, it will be used, otherwise Reransmitter will create its own. The retransmit timeouts have to be set first thing after creating an instance. The add() method adds a range of sequence numbers of messages to be retransmitted. The remove() method removes a sequence number again, cancelling retransmission requests for it. Whenever a message needs to be retransmitted, the RetransmitCommand.retransmit() method is called. It can be used e.g. by an ack-based scheme (e.g. AckSenderWindow) to retransmit a message to the receiver, or by a nak-based scheme to send a retransmission request to the sender of the missing message.

Version:
$Revision: 1.10 $
Author:
John Giorgiadis, Bela Ban

Nested Class Summary
static interface Retransmitter.RetransmitCommand
          Retransmit command (see Gamma et al.) used to retrieve missing messages
 
Field Summary
protected static org.apache.commons.logging.Log log
           
 
Constructor Summary
Retransmitter(Address sender, Retransmitter.RetransmitCommand cmd)
          Create a new Retransmitter associated with the given sender address
Retransmitter(Address sender, Retransmitter.RetransmitCommand cmd, TimeScheduler sched)
          Create a new Retransmitter associated with the given sender address
 
Method Summary
 void add(long first_seqno, long last_seqno)
          Add the given range [first_seqno, last_seqno] in the list of entries eligible for retransmission.
static void main(java.lang.String[] args)
           
 void remove(long seqno)
          Remove the given sequence number from the list of seqnos eligible for retransmission.
 void reset()
          Reset the retransmitter: clear all msgs and cancel all the respective tasks
 void setRetransmitTimeouts(long[] timeouts)
           
 int size()
           
 void stop()
          Stop the rentransmition and clear all pending msgs.
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

log

protected static final org.apache.commons.logging.Log log
Constructor Detail

Retransmitter

public Retransmitter(Address sender,
                     Retransmitter.RetransmitCommand cmd,
                     TimeScheduler sched)
Create a new Retransmitter associated with the given sender address

Parameters:
sender - the address from which retransmissions are expected or to which retransmissions are sent
cmd - the retransmission callback reference
sched - retransmissions scheduler

Retransmitter

public Retransmitter(Address sender,
                     Retransmitter.RetransmitCommand cmd)
Create a new Retransmitter associated with the given sender address

Parameters:
sender - the address from which retransmissions are expected or to which retransmissions are sent
cmd - the retransmission callback reference
Method Detail

setRetransmitTimeouts

public void setRetransmitTimeouts(long[] timeouts)

add

public void add(long first_seqno,
                long last_seqno)
Add the given range [first_seqno, last_seqno] in the list of entries eligible for retransmission. If first_seqno > last_seqno, then the range [last_seqno, first_seqno] is added instead

If retransmitter thread is suspended, wake it up


remove

public void remove(long seqno)
Remove the given sequence number from the list of seqnos eligible for retransmission. If there are no more seqno intervals in the respective entry, cancel the entry from the retransmission scheduler and remove it from the pending entries


reset

public void reset()
Reset the retransmitter: clear all msgs and cancel all the respective tasks


stop

public void stop()
Stop the rentransmition and clear all pending msgs.

If this retransmitter has been provided an externally managed scheduler, then just clear all msgs and the associated tasks, else stop the scheduler. In this case the method blocks until the scheduler's thread is dead. Only the owner of the scheduler should stop it.


toString

public java.lang.String toString()

size

public int size()

main

public static void main(java.lang.String[] args)


Copyright ? 1998-2005 Bela Ban. All Rights Reserved.