org.jgroups.stack
Class AckMcastSenderWindow
java.lang.Object
org.jgroups.stack.AckMcastSenderWindow
public class AckMcastSenderWindow
extends java.lang.Object
Keeps track of ACKs from receivers for each message. When a new message is
sent, it is tagged with a sequence number and the receiver set (set of
members to which the message is sent) and added to a hashtable
(key = sequence number, val = message + receiver set). Each incoming ACK
is noted and when all ACKs for a specific sequence number haven been
received, the corresponding entry is removed from the hashtable. A
retransmission thread periodically re-sends the message point-to-point to
all receivers from which no ACKs have been received yet. A view change or
suspect message causes the corresponding non-existing receivers to be
removed from the hashtable.
This class may need flow control in order to avoid needless
retransmissions because of timeouts.
- Bela Ban June 9 1999
- John Georgiadis May 8 2001
void | ack(long seqno, Address sender) - An ACK has been received from
sender .
|
void | add(long seqno, Message msg, Vector receivers) - Adds a new message to the hash table.
|
void | clearStableMessages()
|
long | getNumberOfResponsesExpected(long seqno) - Returns the number of members for a given entry for which acks have to be received
|
long | getNumberOfResponsesReceived(long seqno) - Returns the number of members for a given entry for which acks have been received
|
Vector | getStableMessages()
|
String | printDetails(long seqno) - Prints all members plus whether an ack has been received from those members for a given seqno
|
void | remove(Address obj) - Remove
obj from all receiver sets and wake up
retransmission thread.
|
void | reset() - Remove all pending msgs from the hashtable.
|
long | size()
|
void | start() - Start the retransmitter.
|
void | stop() - Stop the rentransmition and clear all pending msgs.
|
void | suspect(Address suspected) - Process with address
suspected is suspected: remove it
from all receiver sets.
|
String | toString()
|
void | waitUntilAllAcksReceived(long timeout) - Waits until all outstanding messages have been ACKed by all receivers.
|
log
protected static final Log log
AckMcastSenderWindow
public AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd,
long[] retransmit_intervals)
Create and start the retransmitter
cmd
- the callback object for retranmissionsretransmit_intervals
- the interval between two consecutive
retransmission attempts
AckMcastSenderWindow
public AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd,
long[] retransmit_intervals,
TimeScheduler sched)
Create and start the retransmitter
cmd
- the callback object for retranmissionsretransmit_intervals
- the interval between two consecutive
retransmission attemptssched
- the external scheduler to use to schedule retransmissions
AckMcastSenderWindow
public AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd,
TimeScheduler sched)
Create and start the retransmitter
cmd
- the callback object for retranmissionssched
- the external scheduler to use to schedule retransmissions
ack
public void ack(long seqno,
Address sender)
An ACK has been received from sender
. Tag the sender in
the hash table as 'received'. If all ACKs have been received, remove
the entry all together.
seqno
- The sequence number of the message for which an ACK has
been received.sender
- The sender which sent the ACK
add
public void add(long seqno,
Message msg,
Vector receivers)
Adds a new message to the hash table.
seqno
- The sequence number associated with the messagemsg
- The message (should be a copy!)receivers
- The set of addresses to which the message was sent
and from which consequently an ACK is expected
clearStableMessages
public void clearStableMessages()
getNumberOfResponsesExpected
public long getNumberOfResponsesExpected(long seqno)
Returns the number of members for a given entry for which acks have to be received
getNumberOfResponsesReceived
public long getNumberOfResponsesReceived(long seqno)
Returns the number of members for a given entry for which acks have been received
getStableMessages
public Vector getStableMessages()
- a copy of stable messages, or null (if non available). Removes
all stable messages afterwards
printDetails
public String printDetails(long seqno)
Prints all members plus whether an ack has been received from those members for a given seqno
remove
public void remove(Address obj)
Remove obj
from all receiver sets and wake up
retransmission thread.
obj
- the sender to remove
reset
public void reset()
Remove all pending msgs from the hashtable. Cancel all associated
tasks in the retransmission scheduler
size
public long size()
- the number of currently pending msgs
start
public void start()
Start the retransmitter. This has no effect, if the retransmitter
was externally provided
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.
suspect
public void suspect(Address suspected)
Process with address suspected
is suspected: remove it
from all receiver sets. This means that no ACKs are expected from this
process anymore.
suspected
- The suspected process
toString
public String toString()
waitUntilAllAcksReceived
public void waitUntilAllAcksReceived(long timeout)
Waits until all outstanding messages have been ACKed by all receivers.
Takes into account suspicions and view changes. Returns when there are
no entries left in the hashtable. While waiting, no entries can be
added to the hashtable (they will be discarded).
timeout
- Miliseconds to wait. 0 means wait indefinitely.
Copyright B) 1998-2005 Bela Ban. All Rights Reserved.