|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.jgroups.stack.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. |
Constructor Summary | |
AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd)
Create and start the retransmitter |
|
AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd,
long[] retransmit_intervals)
Create and start the retransmitter |
|
AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd,
long[] 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.Vector |
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 |
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. |
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 |
Constructor Detail |
public AckMcastSenderWindow(AckMcastSenderWindow.RetransmitCommand cmd, long[] retransmit_intervals, 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, 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, long[] retransmit_intervals)
cmd
- the callback object for retranmissions
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.Vector 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 start()
public void stop()
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.
public void reset()
public java.lang.String toString()
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |