org.jgroups.stack
Class AckReceiverWindow

java.lang.Object
  extended by org.jgroups.stack.AckReceiverWindow

public class AckReceiverWindow
extends java.lang.Object

Counterpart of AckSenderWindow. Simple FIFO buffer. Every message received is ACK'ed (even duplicates) and added to a hashmap keyed by seqno. The next seqno to be received is stored in next_to_remove. When a message with a seqno less than next_to_remove is received, it will be discarded. The remove() method removes and returns a message whose seqno is equal to next_to_remove, or null if not found.
Change May 28 2002 (bela): replaced TreeSet with HashMap. Keys do not need to be sorted, and adding a key to a sorted set incurs overhead.

Author:
Bela Ban

Field Summary
static Message TOMBSTONE
           
 
Constructor Summary
AckReceiverWindow(long initial_seqno)
           
AckReceiverWindow(long initial_seqno, int segment_capacity)
           
 
Method Summary
 boolean add(long seqno, Message msg)
          Adds a new message.
 byte add2(long seqno, Message msg)
          Adds a message if not yet received
 java.util.concurrent.atomic.AtomicBoolean getProcessing()
           
 java.lang.String printMessages()
           
 Message remove()
          Removes a message whose seqno is equal to next_to_remove, increments the latter.
 Tuple<java.util.List<Message>,java.lang.Long> removeMany(int max)
          Removes as many messages as possible (in sequence, without gaps)
 java.util.List<Message> removeManyAsList(int max)
           
 void reset()
           
 int size()
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

TOMBSTONE

public static final Message TOMBSTONE
Constructor Detail

AckReceiverWindow

public AckReceiverWindow(long initial_seqno)

AckReceiverWindow

public AckReceiverWindow(long initial_seqno,
                         int segment_capacity)
Method Detail

getProcessing

public java.util.concurrent.atomic.AtomicBoolean getProcessing()

add

public boolean add(long seqno,
                   Message msg)
Adds a new message. Message cannot be null

Returns:
True if the message was added, false if not (e.g. duplicate, message was already present)

add2

public byte add2(long seqno,
                 Message msg)
Adds a message if not yet received

Parameters:
seqno -
msg -
Returns:
-1 if not added because seqno < next_to_remove, 0 if not added because already present, 1 if added successfully

remove

public Message remove()
Removes a message whose seqno is equal to next_to_remove, increments the latter. Returns message that was removed, or null, if no message can be removed. Messages are thus removed in order.


removeMany

public Tuple<java.util.List<Message>,java.lang.Long> removeMany(int max)
Removes as many messages as possible (in sequence, without gaps)

Parameters:
max - Max number of messages to be removed
Returns:
Tuple,Long>: a tuple of the message list and the highest seqno removed

removeManyAsList

public java.util.List<Message> removeManyAsList(int max)

reset

public void reset()

size

public int size()

toString

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

printMessages

public java.lang.String printMessages()


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