org.jgroups.protocols
Class SMACK
java.lang.Object
org.jgroups.stack.Protocol
org.jgroups.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:
- Sender 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 the hashmap,
ceasing all retransmissions
Advantage of this protocol: no group membership necessary, fast.
- Author:
- Bela Ban Aug 2002
Fix membershop bug: start a, b, kill b, restart b: b will be suspected by a.
Constructor Summary |
SMACK()
|
Methods inherited from class org.jgroups.stack.Protocol |
destroy, downThreadEnabled, dumpStats, enableStats, getConfigurableObjects, getDownProtocol, getId, getLevel, getName, getProperties, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getValue, init, isErgonomics, printStats, providedDownServices, providedUpServices, requiredDownServices, requiredUpServices, resetStats, setDownProtocol, setErgonomics, setId, setLevel, setProperties, setPropertiesInternal, setProperty, setProtocolStack, setSocketFactory, setUpProtocol, setValue, setValues, start, statsEnabled, upThreadEnabled |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
SMACK
public SMACK()
stop
public void stop()
- Description copied from class:
Protocol
- This method is called on a
Channel.disconnect()
. Stops work (e.g. by closing multicast socket).
Will be called from top to bottom. This means that at the time of the method invocation the
neighbor protocol below is still working. This method will replace the
STOP, STOP_OK, CLEANUP and CLEANUP_OK events. The ProtocolStack guarantees that
when this method is called all messages in the down queue will have been flushed
- Overrides:
stop
in class Protocol
up
public java.lang.Object 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
down_prot.down()
or c) the event (or another event) is sent up
the stack using up_prot.up()
.
- Overrides:
up
in class Protocol
down
public java.lang.Object 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
down_prot.down()
. 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 up_prot.up()
.
- 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
- Parameters:
seqno
- the sequence number associated with the messagemsg
- the msg to retransmit (it should be a copy!)dest
- the msg destination
Copyright © 1998-2009 Bela Ban / Red Hat. All Rights Reserved.