| java.lang.Object org.jgroups.stack.AckMcastSenderWindow
All known Subclasses: org.jgroups.protocols.SMACK,
AckMcastSenderWindow | public class AckMcastSenderWindow (Code) | | 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.
author: Bela Ban June 9 1999 author: John Georgiadis May 8 2001 version: $Revision: 1.10.6.1 $ |
Inner Class :public interface RetransmitCommand | |
Field Summary | |
final protected static Log | log |
Method Summary | |
public void | ack(long seqno, Address sender) An ACK has been received from sender . | public void | add(long seqno, Message msg, Vector receivers) Adds a new message to the hash table. | public void | clearStableMessages() | public long | getNumberOfResponsesExpected(long seqno) | public long | getNumberOfResponsesReceived(long seqno) | public Vector | getStableMessages() a copy of stable messages, or null (if non available). | public String | printDetails(long seqno) | public void | remove(Address obj) Remove obj from all receiver sets and wake up
retransmission thread. | public void | reset() Remove all pending msgs from the hashtable. | public long | size() | public void | start() Start the retransmitter. | 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. | public void | suspect(Address suspected) Process with address suspected is suspected: remove it
from all receiver sets. | public String | toString() | public void | waitUntilAllAcksReceived(long timeout) Waits until all outstanding messages have been ACKed by all receivers.
Takes into account suspicions and view changes. |
log | final protected static Log log(Code) | | |
AckMcastSenderWindow | public AckMcastSenderWindow(RetransmitCommand cmd, long[] retransmit_intervals, TimeScheduler sched)(Code) | | Create and start the retransmitter
Parameters: cmd - the callback object for retranmissions Parameters: retransmit_intervals - the interval between two consecutiveretransmission attempts Parameters: sched - the external scheduler to use to schedule retransmissions throws: IllegalArgumentException - if cmd is null |
AckMcastSenderWindow | public AckMcastSenderWindow(RetransmitCommand cmd, TimeScheduler sched)(Code) | | Create and start the retransmitter
Parameters: cmd - the callback object for retranmissions Parameters: sched - the external scheduler to use to schedule retransmissions throws: IllegalArgumentException - if cmd is null |
AckMcastSenderWindow | public AckMcastSenderWindow(RetransmitCommand cmd, long[] retransmit_intervals)(Code) | | Create and start the retransmitter
Parameters: cmd - the callback object for retranmissions Parameters: retransmit_intervals - the interval between two consecutiveretransmission attempts throws: IllegalArgumentException - if cmd is null |
AckMcastSenderWindow | public AckMcastSenderWindow(RetransmitCommand cmd)(Code) | | Create and start the retransmitter
Parameters: cmd - the callback object for retranmissions throws: IllegalArgumentException - if cmd is null |
ack | public void ack(long seqno, Address sender)(Code) | | 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.
Parameters: seqno - The sequence number of the message for which an ACK hasbeen received. Parameters: sender - The sender which sent the ACK |
add | public void add(long seqno, Message msg, Vector receivers)(Code) | | Adds a new message to the hash table.
Parameters: seqno - The sequence number associated with the message Parameters: msg - The message (should be a copy!) Parameters: receivers - The set of addresses to which the message was sentand from which consequently an ACK is expected |
clearStableMessages | public void clearStableMessages()(Code) | | |
getNumberOfResponsesExpected | public long getNumberOfResponsesExpected(long seqno)(Code) | | Returns the number of members for a given entry for which acks have to be received
|
getNumberOfResponsesReceived | public long getNumberOfResponsesReceived(long seqno)(Code) | | Returns the number of members for a given entry for which acks have been received
|
getStableMessages | public Vector getStableMessages()(Code) | | a copy of stable messages, or null (if non available). Removesall stable messages afterwards |
printDetails | public String printDetails(long seqno)(Code) | | Prints all members plus whether an ack has been received from those members for a given seqno
|
remove | public void remove(Address obj)(Code) | | Remove obj from all receiver sets and wake up
retransmission thread.
Parameters: obj - the sender to remove |
reset | public void reset()(Code) | | Remove all pending msgs from the hashtable. Cancel all associated
tasks in the retransmission scheduler
|
size | public long size()(Code) | | the number of currently pending msgs |
start | public void start()(Code) | | Start the retransmitter. This has no effect, if the retransmitter
was externally provided
|
stop | public void stop()(Code) | | 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)(Code) | | Process with address suspected is suspected: remove it
from all receiver sets. This means that no ACKs are expected from this
process anymore.
Parameters: suspected - The suspected process |
waitUntilAllAcksReceived | public void waitUntilAllAcksReceived(long timeout)(Code) | | 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).
Parameters: timeout - Miliseconds to wait. 0 means wait indefinitely. |
|
|