org.javagroups.protocols
Class SMACK
java.lang.Object
|
+--org.javagroups.stack.Protocol
|
+--org.javagroups.protocols.SMACK
- All Implemented Interfaces:
- AckMcastSenderWindow.RetransmitCommand
- public class SMACK
- extends Protocol
- implements AckMcastSenderWindow.RetransmitCommand
Simple Multicast ACK protocol. A positive acknowledgment-based protocol for reliable delivery of
multicast messages, which does not need any group membership service.
Basically works as follows:
- Send S sends multicast message M
- When member P receives M, it sends back a unicast ack to S
- When S receives the ack from P, it checks whether P is in its
membership list. If not, P will be added. This is necessary to retransmit the next message
sent to P.
- When S sends a multicast message M, all members are added to a
retransmission entry (containing all members to which the message
was sent), which is added to a hashmap (keyed by seqno). Whenever
an ack is received from receiver X, X will be removed from the
retransmission list for the given seqno. When the retransmission
list is empty, the seqno will be removed from the hashmap.
- A retransmitter thread in the sender periodically retransmits
(either via unicast, or multicast) messages for which no ack has
been received yet
- When a max number of (unsuccessful) retransmissions have been
exceeded, all remaining members for that seqno are removed from
the local membership, and the seqno is removed from te hashmap,
ceasing all retransmissions
Advantage of this protocol: no group membership necessary, fast.
- Version:
- $Revision: 1.11 $
- Author:
- Bela Ban Aug 2002
Fields inherited from class org.javagroups.stack.Protocol |
down_handler, down_prot, down_queue, down_thread, observer, props, stack, up_handler, up_prot, up_queue, up_thread |
Constructor Summary |
SMACK()
|
Method Summary |
void |
down(Event evt)
An event is to be sent down the stack. |
java.lang.String |
getName()
|
void |
retransmit(long seqno,
Message msg,
Address dest)
Retranmit the given msg |
boolean |
setProperties(java.util.Properties props)
Configures the protocol initially. |
void |
up(Event evt)
An event was received from the layer below. |
Methods inherited from class org.javagroups.stack.Protocol |
getDownProtocol, getDownQueue, getProperties, getUpProtocol, getUpQueue, init, passDown, passUp, providedDownServices, providedUpServices, receiveDownEvent, receiveUpEvent, requiredDownServices, requiredUpServices, setDownProtocol, setObserver, setPropertiesInternal, setProtocolStack, setUpProtocol, startDownHandler, startUpHandler, stopInternal |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
SMACK
public SMACK()
getName
public java.lang.String getName()
- Overrides:
getName
in class Protocol
setProperties
public boolean setProperties(java.util.Properties props)
- Description copied from class:
Protocol
- Configures the protocol initially. A configuration string consists of name=value
items, separated by a ';' (semicolon), e.g.:
"loopback=false;unicast_inport=4444"
- Overrides:
setProperties
in class Protocol
up
public void up(Event evt)
- Description copied from class:
Protocol
- An event was received from the layer below. Usually the current layer will want to examine
the event type and - depending on its type - perform some computation
(e.g. removing headers from a MSG event type, or updating the internal membership list
when receiving a VIEW_CHANGE event).
Finally the event is either a) discarded, or b) an event is sent down
the stack using
passDown()
or c) the event (or another event) is sent up
the stack using passUp()
.
- Overrides:
up
in class Protocol
down
public void down(Event evt)
- Description copied from class:
Protocol
- An event is to be sent down the stack. The layer may want to examine its type and perform
some action on it, depending on the event's type. If the event is a message MSG, then
the layer may need to add a header to it (or do nothing at all) before sending it down
the stack using
passDown()
. In case of a GET_ADDRESS event (which tries to
retrieve the stack's address from one of the bottom layers), the layer may need to send
a new response event back up the stack using passUp()
.
- Overrides:
down
in class Protocol
retransmit
public void retransmit(long seqno,
Message msg,
Address dest)
- Description copied from interface:
AckMcastSenderWindow.RetransmitCommand
- Retranmit the given msg
- Specified by:
retransmit
in interface AckMcastSenderWindow.RetransmitCommand
- Following copied from interface:
org.javagroups.stack.AckMcastSenderWindow.RetransmitCommand
- Parameters:
seqno
- the sequence number associated with the messagemsg
- the msg to retransmit (it should be a copy!)dest
- the msg destination
Copyright © 2001,2002 www.javagroups.com . All Rights Reserved.