Interface StateTransferLock

  • All Known Implementing Classes:
    StateTransferLockImpl

    public interface StateTransferLock
    We use the state transfer lock for three different things:
    1. We don't want to execute a command until we have the transaction table for that topology id. For this purpose it works like a latch, commands wait on the latch and state transfer opens the latch when it has received all the transaction data for that topology id.
    2. Do not write anything to the data container in a segment that we have already removed. For this purpose, ownership checks and data container writes acquire a shared lock, and the segment removal acquires an exclusive lock.
    3. We want to handle state requests only after we have installed the same topology id, because this guarantees that we also have installed the corresponding view id and we have all the joiners in our JGroups view. Here it works like a latch as well, state requests wait on the latch and state transfer opens the latch when it has received all the transaction data for that topology id.
    Since:
    5.2
    Author:
    anistor@redhat.com, Dan Berindei
    • Method Detail

      • acquireExclusiveTopologyLock

        void acquireExclusiveTopologyLock()
      • releaseExclusiveTopologyLock

        void releaseExclusiveTopologyLock()
      • acquireSharedTopologyLock

        void acquireSharedTopologyLock()
      • releaseSharedTopologyLock

        void releaseSharedTopologyLock()
      • notifyTransactionDataReceived

        void notifyTransactionDataReceived​(int topologyId)
      • transactionDataFuture

        java.util.concurrent.CompletableFuture<java.lang.Void> transactionDataFuture​(int expectedTopologyId)
      • waitForTransactionData

        @Deprecated
        default void waitForTransactionData​(int expectedTopologyId,
                                            long timeout,
                                            java.util.concurrent.TimeUnit unit)
                                     throws java.lang.InterruptedException,
                                            java.util.concurrent.TimeoutException
        Deprecated.
        Throws:
        java.lang.InterruptedException
        java.util.concurrent.TimeoutException
      • transactionDataReceived

        boolean transactionDataReceived​(int expectedTopologyId)
      • notifyTopologyInstalled

        void notifyTopologyInstalled​(int topologyId)
      • topologyFuture

        java.util.concurrent.CompletableFuture<java.lang.Void> topologyFuture​(int expectedTopologyId)
      • waitForTopology

        @Deprecated
        default void waitForTopology​(int expectedTopologyId,
                                     long timeout,
                                     java.util.concurrent.TimeUnit unit)
                              throws java.lang.InterruptedException,
                                     java.util.concurrent.TimeoutException
        Deprecated.
        Throws:
        java.lang.InterruptedException
        java.util.concurrent.TimeoutException
      • topologyReceived

        boolean topologyReceived​(int expectedTopologyId)