org.jgroups.protocols.pbcast
Class NAKACK

java.lang.Object
  extended by org.jgroups.stack.Protocol
      extended by org.jgroups.protocols.pbcast.NAKACK
All Implemented Interfaces:
NakReceiverWindow.Listener, Retransmitter.RetransmitCommand

public class NAKACK
extends Protocol
implements Retransmitter.RetransmitCommand, NakReceiverWindow.Listener

Negative AcKnowledgement layer (NAKs). Messages are assigned a monotonically increasing sequence number (seqno). Receivers deliver messages ordered according to seqno and request retransmission of missing messages. Retransmitted messages are bundled into bigger ones, e.g. when getting an xmit request for messages 1-10, instead of sending 10 unicast messages, we bundle all 10 messages into 1 and send it. However, since this protocol typically sits below FRAG, we cannot count on FRAG to fragement/defragment the (possibly) large message into smaller ones. Therefore we only bundle messages up to max_xmit_size bytes to prevent too large messages. For example, if the bundled message size was a total of 34000 bytes, and max_xmit_size=16000, we'd send 3 messages: 2 16K and a 2K message. Note that max_xmit_size should be the same value as FRAG.frag_size (or smaller).
Retransmit requests are always sent to the sender. If the sender dies, and not everyone has received its messages, they will be lost. In the future, this may be changed to have receivers store all messages, so that retransmit requests can be answered by any member. Trivial to implement, but not done yet. For most apps, the default retransmit properties are sufficient, if not use vsync.

Author:
Bela Ban

Field Summary
 
Fields inherited from class org.jgroups.stack.Protocol
down_handler, down_prot, down_queue, down_thread, down_thread_prio, log, observer, props, stack, stats, trace, up_handler, up_prot, up_queue, up_thread, up_thread_prio, warn
 
Constructor Summary
NAKACK()
           
 
Method Summary
 void down(Event evt)
          Callback.
 java.util.Map dumpStats()
           
 int getGcLag()
           
 int getMaxXmitBufSize()
           
 long getMaxXmitSize()
           
 long getMissingMessagesReceived()
           
 java.lang.String getName()
           
 int getPendingRetransmissionRequests()
           
 int getReceivedTableSize()
           
 int getSentTableSize()
           
 long getXmitRequestsReceived()
           
 long getXmitRequestsSent()
           
 long getXmitResponsesReceived()
           
 long getXmitResponsesSent()
           
 void init()
          Called after instance has been created (null constructor) and before protocol is started.
 boolean isDiscardDeliveredMsgs()
           
 boolean isUseMcastXmit()
           
 boolean isXmitFromRandomMember()
           
 void missingMessageReceived(long seqno, Message msg)
           
 java.lang.String printMessages()
           
 java.lang.String printSentMsgs()
           
 java.lang.String printStats()
           
 java.util.Vector providedDownServices()
          List of events that are provided to layers below (they will be handled when sent down from below).
 java.util.Vector providedUpServices()
          List of events that are provided to layers above (they will be handled when sent down from above).
 void resetStats()
           
 void retransmit(long first_seqno, long last_seqno, Address sender)
          Implementation of Retransmitter.RetransmitCommand.
 void setDiscardDeliveredMsgs(boolean discard_delivered_msgs)
           
 void setGcLag(int gc_lag)
           
 void setMaxXmitBufSize(int max_xmit_buf_size)
           
 void setMaxXmitSize(long max_xmit_size)
           
 boolean setProperties(java.util.Properties props)
          Configures the protocol initially.
 void setUseMcastXmit(boolean use_mcast_xmit)
           
 void setXmitFromRandomMember(boolean xmit_from_random_member)
           
 void start()
          This method is called on a Channel.connect(String).
 void stop()
          This method is called on a Channel.disconnect().
 void up(Event evt)
          Callback.
 
Methods inherited from class org.jgroups.stack.Protocol
destroy, downThreadEnabled, enableStats, getDownProtocol, getDownQueue, getProperties, getUpProtocol, getUpQueue, handleSpecialDownEvent, isTrace, isWarn, passDown, passUp, receiveDownEvent, receiveUpEvent, requiredDownServices, requiredUpServices, setDownProtocol, setObserver, setPropertiesInternal, setProtocolStack, setTrace, setUpProtocol, setWarn, startDownHandler, startUpHandler, statsEnabled, stopInternal, upThreadEnabled
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

NAKACK

public NAKACK()
Method Detail

getName

public java.lang.String getName()
Specified by:
getName in class Protocol

getXmitRequestsReceived

public long getXmitRequestsReceived()

getXmitRequestsSent

public long getXmitRequestsSent()

getXmitResponsesReceived

public long getXmitResponsesReceived()

getXmitResponsesSent

public long getXmitResponsesSent()

getMissingMessagesReceived

public long getMissingMessagesReceived()

getPendingRetransmissionRequests

public int getPendingRetransmissionRequests()

getSentTableSize

public int getSentTableSize()

getReceivedTableSize

public int getReceivedTableSize()

resetStats

public void resetStats()
Overrides:
resetStats in class Protocol

init

public void init()
          throws java.lang.Exception
Description copied from class: Protocol
Called after instance has been created (null constructor) and before protocol is started. Properties are already set. Other protocols are not yet connected and events cannot yet be sent.

Overrides:
init in class Protocol
Throws:
java.lang.Exception - Thrown if protocol cannot be initialized successfully. This will cause the ProtocolStack to fail, so the channel constructor will throw an exception

getGcLag

public int getGcLag()

setGcLag

public void setGcLag(int gc_lag)

isUseMcastXmit

public boolean isUseMcastXmit()

setUseMcastXmit

public void setUseMcastXmit(boolean use_mcast_xmit)

isXmitFromRandomMember

public boolean isXmitFromRandomMember()

setXmitFromRandomMember

public void setXmitFromRandomMember(boolean xmit_from_random_member)

isDiscardDeliveredMsgs

public boolean isDiscardDeliveredMsgs()

setDiscardDeliveredMsgs

public void setDiscardDeliveredMsgs(boolean discard_delivered_msgs)

getMaxXmitBufSize

public int getMaxXmitBufSize()

setMaxXmitBufSize

public void setMaxXmitBufSize(int max_xmit_buf_size)

getMaxXmitSize

public long getMaxXmitSize()

setMaxXmitSize

public void setMaxXmitSize(long max_xmit_size)

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

dumpStats

public java.util.Map dumpStats()
Overrides:
dumpStats in class Protocol

printStats

public java.lang.String printStats()
Overrides:
printStats in class Protocol

providedUpServices

public java.util.Vector providedUpServices()
Description copied from class: Protocol
List of events that are provided to layers above (they will be handled when sent down from above).

Overrides:
providedUpServices in class Protocol
Returns:
Vector (of Integers)

providedDownServices

public java.util.Vector providedDownServices()
Description copied from class: Protocol
List of events that are provided to layers below (they will be handled when sent down from below).

Overrides:
providedDownServices in class Protocol
Returns:
Vector (of Integers)

start

public void start()
           throws java.lang.Exception
Description copied from class: Protocol
This method is called on a Channel.connect(String). Starts work. Protocols are connected and queues are ready to receive events. Will be called from bottom to top. This call will replace the START and START_OK events.

Overrides:
start in class Protocol
Throws:
java.lang.Exception - Thrown if protocol cannot be started successfully. This will cause the ProtocolStack to fail, so Channel.connect(String) will throw an exception

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

down

public void down(Event evt)
Callback. Called by superclass when event may be handled.

Do not use passDown() in this method as the event is passed down by default by the superclass after this method returns !

Overrides:
down in class Protocol

up

public void up(Event evt)
Callback. Called by superclass when event may be handled.

Do not use PassUp in this method as the event is passed up by default by the superclass after this method returns !

Overrides:
up in class Protocol

retransmit

public void retransmit(long first_seqno,
                       long last_seqno,
                       Address sender)
Implementation of Retransmitter.RetransmitCommand. Called by retransmission thread when gap is detected.

Specified by:
retransmit in interface Retransmitter.RetransmitCommand
Parameters:
first_seqno - The sequence number of the first missing message
last_seqno - The sequence number of the last missing message
sender - The destination of the member to which the retransmit request will be sent (nak-based scheme), or to which the message will be retransmitted (ack-based scheme).

missingMessageReceived

public void missingMessageReceived(long seqno,
                                   Message msg)
Specified by:
missingMessageReceived in interface NakReceiverWindow.Listener

printMessages

public java.lang.String printMessages()

printSentMsgs

public java.lang.String printSentMsgs()


Copyright ? 1998-2005 Bela Ban. All Rights Reserved.