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
    Modifier and Type | Field and Description
    --- | ---
    `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

    Constructors
    Constructor and Description
    `NAKACK()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `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.