|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.jgroups.stack.AckMcastSenderWindow
public class AckMcastSenderWindow
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.
Nested Class Summary | |
---|---|
static interface |
AckMcastSenderWindow.RetransmitCommand
Called by retransmitter thread whenever a message needs to be re-sent to a destination. |
Field Summary | |
---|---|
protected static Log |
log
Default retransmit thread suspend timeout (ms) |
Constructor Summary | |
---|---|
AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd)
Create and start the retransmitter |
|
AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd,
Interval retransmit_intervals)
Create and start the retransmitter |
|
AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd,
Interval retransmit_intervals,
TimeScheduler sched)
Create and start the retransmitter |
|
AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd,
TimeScheduler sched)
Create and start the retransmitter |
Method Summary | |
---|---|
void |
ack(long seqno,
Address sender)
An ACK has been received from sender . |
void |
add(long seqno,
Message msg,
java.util.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 |
java.util.List |
getStableMessages()
|
java.lang.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 |
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. |
java.lang.String |
toString()
|
void |
waitUntilAllAcksReceived(long timeout)
Waits until all outstanding messages have been ACKed by all receivers. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
protected static final Log log
Constructor Detail |
---|
public AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd, Interval retransmit_intervals, TimeScheduler sched)
cmd
- the callback object for retranmissionsretransmit_intervals
- the interval between two consecutive
retransmission attemptssched
- the external scheduler to use to schedule retransmissions
java.lang.IllegalArgumentException
- if cmd
is nullpublic AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd, TimeScheduler sched)
cmd
- the callback object for retranmissionssched
- the external scheduler to use to schedule retransmissions
java.lang.IllegalArgumentException
- if cmd
is nullpublic AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd, Interval retransmit_intervals)
cmd
- the callback object for retranmissionsretransmit_intervals
- the interval between two consecutive
retransmission attempts
java.lang.IllegalArgumentException
- if cmd
is nullpublic AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd)
cmd
- the callback object for retranmissions
java.lang.IllegalArgumentException
- if cmd
is nullMethod Detail |
---|
public void add(long seqno, Message msg, java.util.Vector receivers)
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 expectedpublic void ack(long seqno, Address sender)
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 ACKpublic void remove(Address obj)
obj
from all receiver sets and wake up
retransmission thread.
obj
- the sender to removepublic void suspect(Address suspected)
suspected
is suspected: remove it
from all receiver sets. This means that no ACKs are expected from this
process anymore.
suspected
- The suspected processpublic java.util.List getStableMessages()
public void clearStableMessages()
public long size()
public long getNumberOfResponsesExpected(long seqno)
public long getNumberOfResponsesReceived(long seqno)
public java.lang.String printDetails(long seqno)
public void waitUntilAllAcksReceived(long timeout)
timeout
- Miliseconds to wait. 0 means wait indefinitely.public void stop()
public void reset()
public java.lang.String toString()
toString
in class java.lang.Object
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |