Class STATE_TRANSFER

java.lang.Object
org.jgroups.stack.Protocol
org.jgroups.protocols.pbcast.STATE_TRANSFER
All Implemented Interfaces:
Lifecycle, ProcessingQueue.Handler<Address>

public class STATE_TRANSFER extends Protocol implements ProcessingQueue.Handler<Address>
STATE_TRANSFER protocol based on byte array transfer. A state request is sent to a chosen member (coordinator if null). That member makes a copy D of its current digest and asks the application for a copy of its current state S. Then the member returns both S and D to the requester. The requester first sets its digest to D and then returns the state to the application.
See Also:
  • Field Details

    • start

      protected long start
    • stop

      protected long stop
    • num_state_reqs

      protected final LongAdder num_state_reqs
    • num_bytes_sent

      protected final LongAdder num_bytes_sent
    • avg_state_size

      protected double avg_state_size
    • view

      protected volatile View view
    • members

      protected final List<Address> members
    • state_requesters

      protected final ProcessingQueue<Address> state_requesters
      List of members requesting state
    • waiting_for_state_response

      protected volatile boolean waiting_for_state_response
      set to true while waiting for a STATE_RSP
    • flushProtocolInStack

      protected boolean flushProtocolInStack
  • Constructor Details

    • STATE_TRANSFER

      public STATE_TRANSFER()
  • Method Details

    • getNumberOfStateRequests

      @Deprecated public long getNumberOfStateRequests()
      Deprecated.
      Don't remove! https://issues.redhat.com/browse/JGRP-2814
    • getNumberOfStateBytesSent

      @Deprecated public long getNumberOfStateBytesSent()
      Deprecated.
      Don't remove! https://issues.redhat.com/browse/JGRP-2814
    • getAverageStateSize

      @Deprecated public double getAverageStateSize()
      Deprecated.
      Don't remove! https://issues.redhat.com/browse/JGRP-2814
    • requiredDownServices

      public List<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
    • resetStats

      public void resetStats()
      Overrides:
      resetStats in class Protocol
    • start

      public void start() throws Exception
      Description copied from class: Protocol
      This method is called on a JChannel.connect(String); starts work. Protocols are connected ready to receive events. Will be called from bottom to top.
      Specified by:
      start in interface Lifecycle
      Overrides:
      start in class Protocol
      Throws:
      Exception - Thrown if protocol cannot be started successfully. This will cause the ProtocolStack to fail, so JChannel.connect(String) will throw an exception
    • stop

      public void stop()
      Description copied from class: Protocol
      Called on a JChannel.disconnect(); stops work (e.g. by closing multicast socket). Will be called from top to bottom.
      Specified by:
      stop in interface Lifecycle
      Overrides:
      stop in class Protocol
    • closeBarrierAndSuspendStable

      public void closeBarrierAndSuspendStable()
    • openBarrierAndResumeStable

      public void openBarrierAndResumeStable()
    • openBarrier

      public void openBarrier()
    • resumeStable

      public void resumeStable()
    • up

      public Object up(Event evt)
      Description copied from class: Protocol
      An event was received from the protocol below. Usually the current protocol 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
    • up

      public Object up(Message msg)
      Description copied from class: Protocol
      A single message was received. Protocols may examine the message and do something (e.g. add a header) with it before passing it 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. A protocol 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 protocol may need to add a header to it (or do nothing at all) before sending it down the stack using down_prot.down().
      Overrides:
      down in class Protocol
    • isDigestNeeded

      protected boolean isDigestNeeded()
      When FLUSH is used we do not need to pass digests between members see JGroups/doc/design/PartialStateTransfer.txt see JGroups/doc/design/FLUSH.txt
      Returns:
      true if use of digests is required, false otherwise
    • punchHoleFor

      protected void punchHoleFor(Address member)
    • closeHoleFor

      protected void closeHoleFor(Address member)
    • determineCoordinator

      protected Address determineCoordinator()
      Return the first element of members which is not me. Otherwise return null.
    • handleViewChange

      protected void handleViewChange(View v)
    • handleException

      protected void handleException(Throwable exception)
    • handle

      public void handle(Address state_requester)
      Specified by:
      handle in interface ProcessingQueue.Handler<Address>
    • handleStateReq

      protected void handleStateReq(Address requester)
    • getStateFromApplication

      protected void getStateFromApplication(Address requester, Digest digest)
    • sendException

      protected void sendException(Address requester, Throwable exception)
    • handleStateRsp

      protected void handleStateRsp(Digest digest, Address sender, byte[] state)
      Set the digest and the send the state up to the application