org.jgroups.stack
Class RangeBasedRetransmitter

java.lang.Object
  extended by org.jgroups.stack.Retransmitter
      extended by org.jgroups.stack.RangeBasedRetransmitter

public class RangeBasedRetransmitter
extends Retransmitter

This retransmitter is specialized in maintaining ranges of seqnos, e.g. [3-20], [89-89], [100-120]. The ranges are stored in a sorted hashmap and the Comparable.compareTo(Object) method compares both ranges again ranges, and ranges against seqnos. The latter helps to find a range given a seqno, e.g. seqno 105 will find range [100-120].

Each range is implemented by SeqnoRange, which has a bitset of all missing seqnos. When a seqno is received, that bit set is updated; the bit corresponding to the seqno is set to 1. A task linked to the range periodically retransmits missing messages.

When all bits are 1 (= all messages have been received), the range is removed from the hashmap and the retransmission task is cancelled.

RangeBasedRetransmitter requires sequence numbers and sequence number ranges to be added in ascending and non-overlapping order: e.g. 1 4 [10-21] 22 [50-60] is ok, while [3-7] [5-8] 20 18 is not !

Author:
Bela Ban

Nested Class Summary
protected  class RangeBasedRetransmitter.RangeTask
           
 
Nested classes/interfaces inherited from class org.jgroups.stack.Retransmitter
Retransmitter.RetransmitCommand, Retransmitter.Task
 
Field Summary
 
Fields inherited from class org.jgroups.stack.Retransmitter
cmd, log, retransmit_timeouts, sender, timer, xmit_stagger_timeout
 
Constructor Summary
RangeBasedRetransmitter(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.
 java.lang.String printStats()
           
 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
 int size()
           
 java.lang.String toString()
           
 
Methods inherited from class org.jgroups.stack.Retransmitter
getXmitStaggerTimeout, setRetransmitTimeouts, setXmitStaggerTimeout
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

RangeBasedRetransmitter

public RangeBasedRetransmitter(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
Method Detail

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

Specified by:
add in class Retransmitter

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

Specified by:
remove in class Retransmitter

reset

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

Specified by:
reset in class Retransmitter

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

size

public int size()
Specified by:
size in class Retransmitter

printStats

public java.lang.String printStats()


Copyright © 1998-2012 Bela Ban / Red Hat. All Rights Reserved.