org.jgroups.protocols.pbcast

## Class GMS

- java.lang.Object
- - org.jgroups.stack.Protocol
  - - org.jgroups.protocols.pbcast.GMS

- All Implemented Interfaces:
    TP.ProbeHandler

      public class GMS
      extends Protocol
      implements TP.ProbeHandler

  Group membership protocol. Handles joins/leaves/crashes (suspicions) and emits new views accordingly. Use VIEW_ENFORCER on top of this layer to make sure new members don't receive any messages until they are members
  Author:
    Bela Ban

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `GMS.GmsHeader`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected AckCollector` | `ack_collector` To collect VIEW_ACKs from all members
    `protected java.lang.Class<java.util.concurrent.Callable<java.lang.Boolean>>` | `flushInvokerClass`
    `protected Address` | `local_addr`
    `protected long` | `ltime`
    `protected Membership` | `members`
    `protected AckCollector` | `merge_ack_collector`
    `protected int` | `num_prev_mbrs`
    `protected TimeScheduler` | `timer`
    `protected View` | `view`
    `protected ViewId` | `view_id`

    - ### Fields inherited from class org.jgroups.stack.Protocol

      `down_prot, ergonomics, id, log, name, stack, stats, up_prot`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `GMS()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected boolean` | `_startFlush(View new_view, int maxAttempts, long randomFloor, long randomCeiling)`
    `void` | `becomeClient()`
    `void` | `becomeCoordinator()`
    `void` | `becomeParticipant()`
    `void` | `castViewChangeWithDest(View new_view, Digest digest, JoinRsp jr, java.util.Collection<Address> newMembers)` Broadcasts the new view and digest, and waits for acks from all members in the list given as argument.
    `protected boolean` | `checkSelfInclusion(java.util.Vector<Address> mbrs)` Returns true if local_addr is member of mbrs, else false
    `protected Address` | `determineCoordinator()`
    `java.lang.Object` | `down(Event evt)` An event is to be sent down the stack.
    `java.lang.String` | `dumpViewHandlerHistory()`
    `java.lang.String` | `dumpViewHandlerQueue()`
    `void` | `fixDigests()`
    `Digest` | `getDigest()` Sends down a GET_DIGEST event and waits for the GET_DIGEST_OK response, or timeout, whichever occurs first
    `GmsImpl` | `getImpl()`
    `static long` | `getJoinRetryTimeout()` Deprecated.
    `long` | `getJoinTimeout()`
    `java.lang.String` | `getLocalAddress()`
    `boolean` | `getLogCollectMessages()`
    `long` | `getMaxBundlingTime()`
    `java.lang.String` | `getMembers()`
    `MergeId` | `getMergeId()`
    `long` | `getMergeTimeout()`
    `View` | `getNextView(java.util.Collection<Address> new_mbrs, java.util.Collection<Address> old_mbrs, java.util.Collection<Address> suspected_mbrs)` Computes the next view.
    `int` | `getNumberOfViews()`
    `int` | `getNumMembers()`
    `java.lang.String` | `getView()`
    `long` | `getViewAckCollectionTimeout()`
    `int` | `getViewHandlerSize()`
    `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.
    `void` | `installView(View new_view)`
    `void` | `installView(View new_view, Digest digest)` Sets the new view and sends a VIEW_CHANGE event up and down the stack.
    `boolean` | `isCoordinator()`
    `static boolean` | `isShun()` Deprecated.
    `boolean` | `isViewBundling()`
    `boolean` | `isViewHandlerSuspended()`
    `View` | `makeView(java.util.Vector<Address> mbrs)`
    `static View` | `makeView(java.util.Vector<Address> mbrs, ViewId vid)`
    `void` | `mergeDigest(Digest d)` Send down a MERGE_DIGEST event
    `java.lang.String` | `printPreviousMembers()`
    `java.lang.String` | `printPreviousViews()`
    `java.util.Vector<java.lang.Integer>` | `requiredDownServices()` List of events that are required to be answered by some layer below.
    `void` | `resetStats()`
    `void` | `resumeViewHandler()`
    `void` | `sendJoinResponse(JoinRsp rsp, Address dest)`
    `void` | `setDigest(Digest d)` Send down a SET_DIGEST event
    `void` | `setImpl(GmsImpl new_impl)`
    `void` | `setJoinRetryTimeout(long t)` Deprecated.
    `void` | `setJoinTimeout(long t)`
    `void` | `setLogCollectMessages(boolean flag)`
    `void` | `setMaxBundlingTime(long max_bundling_time)`
    `void` | `setMergeTimeout(long timeout)`
    `void` | `setPrintLocalAddr(boolean flag)`
    `void` | `setPrintLocalAddress(boolean flag)`
    `void` | `setShun(boolean s)` Deprecated.
    `void` | `setViewAckCollectionTimeout(long view_ack_collection_timeout)`
    `void` | `setViewBundling(boolean view_bundling)`
    `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
    `void` | `suspendViewHandler()`
    `java.lang.Object` | `up(Event evt)` An event was received from the layer below.
    `protected boolean` | `wouldBeNewCoordinator(Address potential_new_coord)` Checks whether the potential_new_coord would be the new coordinator (2nd in line)

    - ### Methods inherited from class org.jgroups.stack.Protocol

      `destroy, downThreadEnabled, dumpStats, enableStats, getConfigurableObjects, getDownProtocol, getId, getLevel, getName, getProperties, getProtocolStack, getSocketFactory, getThreadFactory, getTransport, getUpProtocol, getValue, isErgonomics, printStats, providedDownServices, providedUpServices, 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

    - #### num_prev_mbrs

          protected int num_prev_mbrs

    - #### flushInvokerClass

          protected java.lang.Class<java.util.concurrent.Callable<java.lang.Boolean>> flushInvokerClass

    - #### local_addr

          protected Address local_addr

    - #### members

          protected final Membership members

    - #### view

          protected View view

    - #### view_id

          protected ViewId view_id

    - #### ltime

          protected long ltime

    - #### timer

          protected TimeScheduler timer

    - #### ack_collector

          protected final AckCollector ack_collector

      To collect VIEW_ACKs from all members

    - #### merge_ack_collector

          protected final AckCollector merge_ack_collector

  - ### Constructor Detail

    - #### GMS

          public GMS()

  - ### Method Detail

    - #### getView

          public java.lang.String getView()

    - #### getNumberOfViews

          public int getNumberOfViews()

    - #### getLocalAddress

          public java.lang.String getLocalAddress()

    - #### getMembers

          public java.lang.String getMembers()

    - #### getNumMembers

          public int getNumMembers()

    - #### getJoinTimeout

          public long getJoinTimeout()

    - #### setJoinTimeout

          public void setJoinTimeout(long t)

    - #### getMergeTimeout

          public long getMergeTimeout()

    - #### setMergeTimeout

          public void setMergeTimeout(long timeout)

    - #### getJoinRetryTimeout

          public static long getJoinRetryTimeout()

      Deprecated.

    - #### setJoinRetryTimeout

          public void setJoinRetryTimeout(long t)

      Deprecated.

    - #### isShun

          @Deprecated
          public static boolean isShun()

      Deprecated.

    - #### setShun

          @Deprecated
          public void setShun(boolean s)

      Deprecated.

    - #### printPreviousMembers

          public java.lang.String printPreviousMembers()

    - #### setPrintLocalAddress

          public void setPrintLocalAddress(boolean flag)

    - #### setPrintLocalAddr

          public void setPrintLocalAddr(boolean flag)

    - #### getViewAckCollectionTimeout

          public long getViewAckCollectionTimeout()

    - #### setViewAckCollectionTimeout

          public void setViewAckCollectionTimeout(long view_ack_collection_timeout)

    - #### isViewBundling

          public boolean isViewBundling()

    - #### setViewBundling

          public void setViewBundling(boolean view_bundling)

    - #### getMaxBundlingTime

          public long getMaxBundlingTime()

    - #### setMaxBundlingTime

          public void setMaxBundlingTime(long max_bundling_time)

    - #### getViewHandlerSize

          public int getViewHandlerSize()

    - #### isViewHandlerSuspended

          public boolean isViewHandlerSuspended()

    - #### dumpViewHandlerQueue

          public java.lang.String dumpViewHandlerQueue()

    - #### dumpViewHandlerHistory

          public java.lang.String dumpViewHandlerHistory()

    - #### suspendViewHandler

          public void suspendViewHandler()

    - #### resumeViewHandler

          public void resumeViewHandler()

    - #### printPreviousViews

          public java.lang.String printPreviousViews()

    - #### isCoordinator

          public boolean isCoordinator()

    - #### getMergeId

          public MergeId getMergeId()

    - #### setLogCollectMessages

          public void setLogCollectMessages(boolean flag)

    - #### getLogCollectMessages

          public boolean getLogCollectMessages()

    - #### resetStats

          public void resetStats()

      Overrides:
        `resetStats` in class `Protocol`

    - #### requiredDownServices

          public java.util.Vector<java.lang.Integer> requiredDownServices()

      Description copied from class: `Protocol`
      List of events that are required to be answered by some layer below.
      Overrides:
        `requiredDownServices` in class `Protocol`
      Returns:
        Vector (of Integers)

    - #### setImpl

          public void setImpl(GmsImpl new_impl)

    - #### getImpl

          public GmsImpl getImpl()

    - #### 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

    - #### 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`

    - #### becomeCoordinator

          public void becomeCoordinator()

    - #### becomeParticipant

          public void becomeParticipant()

    - #### becomeClient

          public void becomeClient()

    - #### fixDigests

          public void fixDigests()

    - #### getNextView

          public View getNextView(java.util.Collection<Address> new_mbrs,
                         java.util.Collection<Address> old_mbrs,
                         java.util.Collection<Address> suspected_mbrs)

      Computes the next view. Returns a copy that has `old_mbrs` and `suspected_mbrs` removed and `new_mbrs` added.

    - #### castViewChangeWithDest

          public void castViewChangeWithDest(View new_view,
                                    Digest digest,
                                    JoinRsp jr,
                                    java.util.Collection<Address> newMembers)

      Broadcasts the new view and digest, and waits for acks from all members in the list given as argument. If the list is null, we take the members who are part of new_view
      Parameters:
        `new_view` -
        `digest` -
        `newMembers` -

    - #### sendJoinResponse

          public void sendJoinResponse(JoinRsp rsp,
                              Address dest)

    - #### installView

          public void installView(View new_view)

    - #### installView

          public void installView(View new_view,
                         Digest digest)

      Sets the new view and sends a VIEW_CHANGE event up and down the stack. If the view is a MergeView (subclass of View), then digest will be non-null and has to be set before installing the view.

    - #### determineCoordinator

          protected Address determineCoordinator()

    - #### wouldBeNewCoordinator

          protected boolean wouldBeNewCoordinator(Address potential_new_coord)

      Checks whether the potential_new_coord would be the new coordinator (2nd in line)

    - #### checkSelfInclusion

          protected boolean checkSelfInclusion(java.util.Vector<Address> mbrs)

      Returns true if local_addr is member of mbrs, else false

    - #### makeView

          public View makeView(java.util.Vector<Address> mbrs)

    - #### makeView

          public static View makeView(java.util.Vector<Address> mbrs,
                      ViewId vid)

    - #### setDigest

          public void setDigest(Digest d)

      Send down a SET_DIGEST event

    - #### mergeDigest

          public void mergeDigest(Digest d)

      Send down a MERGE_DIGEST event

    - #### getDigest

          public Digest getDigest()

      Sends down a GET_DIGEST event and waits for the GET_DIGEST_OK response, or timeout, whichever occurs first

    - #### _startFlush

          protected boolean _startFlush(View new_view,
                            int maxAttempts,
                            long randomFloor,
                            long randomCeiling)

    - #### 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`

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