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:
TP.ProbeHandler, NakReceiverWindow.Listener, Retransmitter.RetransmitCommand

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

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.
Retransmit requests are usually sent to the original sender of a message, but this can be changed by xmit_from_random_member (send to random member) or use_mcast_xmit_req (send to everyone). Responses can also be sent to everyone instead of the requester by setting use_mcast_xmit to true.

Author:
Bela Ban

Field Summary
protected  BoundedList<java.lang.String> digest_history
          Keeps a bounded list of the last N digest sets
protected  boolean print_stability_history_on_failed_xmit
          When not finding a message on an XMIT request, include the last N stability messages in the error message
protected  BoundedList<Digest> stability_msgs
          BoundedList, keeps the last 10 stability messages
 
Fields inherited from class org.jgroups.stack.Protocol
down_prot, ergonomics, id, log, name, stack, stats, up_prot
 
Constructor Summary
NAKACK()
           
 
Method Summary
protected  void checkForRebroadcasts()
           
 void compact()
           
 java.lang.Object down(Event evt)
          Callback.
 java.util.Map<java.lang.String,java.lang.Object> dumpStats()
           
 double getAverageLossRate()
           
 double getAverageSmoothedLossRate()
           
 long getCurrentSeqno()
           
 Digest getDigest()
          Returns a message digest: for each member P the lowest, highest delivered and highest received seqno is added
 int getGcLag()
          Deprecated. 
 boolean getLogDiscardMessages()
           
static int getMaxXmitBufSize()
          Deprecated. 
static long getMaxXmitSize()
          Deprecated. removed in 2.6
 long getMissingMessagesReceived()
           
 int getPendingRetransmissionRequests()
           
 int getReceivedTableSize()
           
 double getSmoothedAverageRetransmissionTime(Address sender)
          Returns the smoothed average retransmission time for a given sender
 double getTotalAverageRetransmissionTime()
           
 double getTotalAverageSmoothedRetransmissionTime()
           
static int getUndeliveredMessages()
          Deprecated. 
 NakReceiverWindow getWindow(Address mbr)
          Please don't use this method; it is only provided for unit testing !
 long getXmitRequestsReceived()
           
 long getXmitRequestsSent()
           
 long getXmitResponsesReceived()
           
 long getXmitResponsesSent()
           
 int getXmitTableSize()
           
 java.util.Map<java.lang.String,java.lang.String> handleProbe(java.lang.String... keys)
          Handles a probe.
 void init()
          Called after instance has been created (null constructor) and before protocol is started.
 boolean isDiscardDeliveredMsgs()
           
 boolean isUseMcastXmit()
           
 boolean isXmitFromRandomMember()
           
 void messageGapDetected(long from, long to, Address src)
          Called when a message gap is detected
 void missingMessageReceived(long seqno, Address original_sender)
           
 java.lang.String printDigestHistory()
           
 java.lang.String printLossRates()
           
 java.lang.String printMessages()
           
 java.lang.String printRetransmissionAvgs()
           
 java.lang.String printRetransmissionTimes()
           
 java.lang.String printRetransmitStats()
           
 java.lang.String printRetransmitTableSizes()
           
 java.lang.String printSmoothedRetransmissionAvgs()
           
 java.lang.String printStabilityHistory()
           
 java.lang.String printStabilityMessages()
           
 java.lang.String printStats()
           
 java.lang.String printXmitHistory()
           
 java.util.Vector<java.lang.Integer> 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.
protected  void retransmit(long first_seqno, long last_seqno, Address sender, boolean multicast_xmit_request)
           
 void setDiscardDeliveredMsgs(boolean discard_delivered_msgs)
           
 void setGcLag(int gc_lag)
          Deprecated. 
 void setLogDiscardMessages(boolean flag)
           
 void setLogDiscardMsgs(boolean flag)
           
static void setMaxXmitBufSize(int max_xmit_buf_size)
          Deprecated. 
 void setMaxXmitSize(long max_xmit_size)
          Deprecated. removed in 2.6
 void setTimer(TimeScheduler timer)
          Only used for unit tests, don't use !
 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().
 java.lang.String[] supportedKeys()
          Returns a list of supported keys
 java.lang.Object up(Event evt)
          Callback.
 
Methods inherited from class org.jgroups.stack.Protocol
destroy, downThreadEnabled, enableStats, getConfigurableObjects, getDownProtocol, getId, getLevel, getName, getProperties, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getValue, isErgonomics, providedDownServices, requiredDownServices, requiredUpServices, setDownProtocol, setErgonomics, setId, setLevel, setProperties, setPropertiesInternal, setProperty, setProtocolStack, setSocketFactory, setUpProtocol, setValue, setValues, statsEnabled, upThreadEnabled
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

print_stability_history_on_failed_xmit

protected boolean print_stability_history_on_failed_xmit
When not finding a message on an XMIT request, include the last N stability messages in the error message


stability_msgs

protected final BoundedList<Digest> stability_msgs
BoundedList, keeps the last 10 stability messages


digest_history

protected final BoundedList<java.lang.String> digest_history
Keeps a bounded list of the last N digest sets

Constructor Detail

NAKACK

public NAKACK()
Method Detail

getUndeliveredMessages

@Deprecated
public static int getUndeliveredMessages()
Deprecated. 


getXmitRequestsReceived

public long getXmitRequestsReceived()

getXmitRequestsSent

public long getXmitRequestsSent()

getXmitResponsesReceived

public long getXmitResponsesReceived()

getXmitResponsesSent

public long getXmitResponsesSent()

getMissingMessagesReceived

public long getMissingMessagesReceived()

getPendingRetransmissionRequests

public int getPendingRetransmissionRequests()

getXmitTableSize

public int getXmitTableSize()

getCurrentSeqno

public long getCurrentSeqno()

printRetransmitStats

public java.lang.String printRetransmitStats()

getReceivedTableSize

public int getReceivedTableSize()

getWindow

public NakReceiverWindow getWindow(Address mbr)
Please don't use this method; it is only provided for unit testing !

Parameters:
mbr -
Returns:

setTimer

public void setTimer(TimeScheduler timer)
Only used for unit tests, don't use !

Parameters:
timer -

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

@Deprecated
public int getGcLag()
Deprecated. 


setGcLag

@Deprecated
public void setGcLag(int gc_lag)
Deprecated. 


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

@Deprecated
public static int getMaxXmitBufSize()
Deprecated. 


setMaxXmitBufSize

@Deprecated
public static void setMaxXmitBufSize(int max_xmit_buf_size)
Deprecated. 


getMaxXmitSize

public static long getMaxXmitSize()
Deprecated. removed in 2.6

Returns:

setMaxXmitSize

public void setMaxXmitSize(long max_xmit_size)
Deprecated. removed in 2.6

Parameters:
max_xmit_size -

setLogDiscardMessages

public void setLogDiscardMessages(boolean flag)

setLogDiscardMsgs

public void setLogDiscardMsgs(boolean flag)

getLogDiscardMessages

public boolean getLogDiscardMessages()

dumpStats

public java.util.Map<java.lang.String,java.lang.Object> dumpStats()
Overrides:
dumpStats in class Protocol

printStats

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

printStabilityMessages

public java.lang.String printStabilityMessages()

printStabilityHistory

public java.lang.String printStabilityHistory()

printDigestHistory

public java.lang.String printDigestHistory()

printLossRates

public java.lang.String printLossRates()

printRetransmitTableSizes

public java.lang.String printRetransmitTableSizes()

compact

public void compact()

getAverageLossRate

public double getAverageLossRate()

getAverageSmoothedLossRate

public double getAverageSmoothedLossRate()

providedUpServices

public java.util.Vector<java.lang.Integer> 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)

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 java.lang.Object down(Event evt)
Callback. Called by superclass when event may be handled.

Do not use down_prot.down() 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 java.lang.Object 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

checkForRebroadcasts

protected void checkForRebroadcasts()

getDigest

public Digest getDigest()
Returns a message digest: for each member P the lowest, highest delivered and highest received seqno is added


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).

retransmit

protected void retransmit(long first_seqno,
                          long last_seqno,
                          Address sender,
                          boolean multicast_xmit_request)

missingMessageReceived

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

messageGapDetected

public void messageGapDetected(long from,
                               long to,
                               Address src)
Called when a message gap is detected

Specified by:
messageGapDetected in interface NakReceiverWindow.Listener

printMessages

public java.lang.String printMessages()

printRetransmissionAvgs

public java.lang.String printRetransmissionAvgs()

printSmoothedRetransmissionAvgs

public java.lang.String printSmoothedRetransmissionAvgs()

printRetransmissionTimes

public java.lang.String printRetransmissionTimes()

printXmitHistory

public java.lang.String printXmitHistory()

getTotalAverageRetransmissionTime

public double getTotalAverageRetransmissionTime()

getTotalAverageSmoothedRetransmissionTime

public double getTotalAverageSmoothedRetransmissionTime()

getSmoothedAverageRetransmissionTime

public double getSmoothedAverageRetransmissionTime(Address sender)
Returns the smoothed average retransmission time for a given sender


handleProbe

public java.util.Map<java.lang.String,java.lang.String> handleProbe(java.lang.String... keys)
Description copied from interface: TP.ProbeHandler
Handles a probe. For each key that is handled, the key and its result should be in the returned map.

Specified by:
handleProbe in interface TP.ProbeHandler
Returns:
Map. A map of keys and values. A null return value is permissible.

supportedKeys

public java.lang.String[] supportedKeys()
Description copied from interface: TP.ProbeHandler
Returns a list of supported keys

Specified by:
supportedKeys in interface TP.ProbeHandler


Copyright © 1998-2009 Bela Ban / Red Hat. All Rights Reserved.