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
  • Field Details

    • num_prev_mbrs

      protected int num_prev_mbrs
    • flushInvokerClass

      protected Class<Callable<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 Details

    • GMS

      public GMS()
  • Method Details

    • getView

      public String getView()
    • getNumberOfViews

      public int getNumberOfViews()
    • getLocalAddress

      public String getLocalAddress()
    • getMembers

      public 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 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 String dumpViewHandlerQueue()
    • dumpViewHandlerHistory

      public String dumpViewHandlerHistory()
    • suspendViewHandler

      public void suspendViewHandler()
    • resumeViewHandler

      public void resumeViewHandler()
    • printPreviousViews

      public 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 Vector<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 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:
      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 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:
      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(Collection<Address> new_mbrs, Collection<Address> old_mbrs, 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, 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(Vector<Address> mbrs)
      Returns true if local_addr is member of mbrs, else false
    • makeView

      public View makeView(Vector<Address> mbrs)
    • makeView

      public static View makeView(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 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 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 Map<String,String> handleProbe(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
      Parameters:
      keys -
      Returns:
      Mapinvalid input: '<'String,String>. A map of keys and values. A null return value is permissible.
    • supportedKeys

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