Class 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.
    Author:
    Bela Ban
    See Also:
    STATE, STATE_SOCK
    • Field Detail

      • start

        protected long start
      • stop

        protected long stop
      • num_state_reqs

        protected final java.util.concurrent.atomic.LongAdder num_state_reqs
      • num_bytes_sent

        protected final java.util.concurrent.atomic.LongAdder num_bytes_sent
      • avg_state_size

        protected double avg_state_size
      • view

        protected volatile View view
      • members

        protected final java.util.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
    • Constructor Detail

      • STATE_TRANSFER

        public STATE_TRANSFER()
    • Method Detail

      • getNumberOfStateRequests

        public long getNumberOfStateRequests()
      • getNumberOfStateBytesSent

        public long getNumberOfStateBytesSent()
      • getAverageStateSize

        public double getAverageStateSize()
      • requiredDownServices

        public java.util.List<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
      • init

        public void init()
                  throws java.lang.Exception
        Description copied from class: Protocol
        Called after a protocol has been created and before the protocol is started. Attributes are already set. Other protocols are not yet connected and events cannot yet be sent.
        Specified by:
        init in interface Lifecycle
        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 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 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:
        java.lang.Exception - Thrown if protocol cannot be started successfully. This will cause the ProtocolStack to fail, so JChannel.connect(String) will throw an exception
      • closeBarrierAndSuspendStable

        public void closeBarrierAndSuspendStable()
      • openBarrierAndResumeStable

        public void openBarrierAndResumeStable()
      • openBarrier

        public void openBarrier()
      • resumeStable

        public void resumeStable()
      • up

        public java.lang.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 java.lang.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 java.lang.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
      • 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​(java.lang.Throwable exception)
      • handleStateReq

        protected void handleStateReq​(Address requester)
      • getStateFromApplication

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

        protected void sendException​(Address requester,
                                     java.lang.Throwable exception)
      • handleStateRsp

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