org.jgroups.protocols.pbcast

## Class NAKACK

- java.lang.Object
- - org.jgroups.stack.Protocol
  - - 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

Fields
`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<Digest>, 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

Constructors
Constructor and Description
`NAKACK()`

### Method Summary

Methods
`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<Digest>, 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<String,String>. 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`