Class LockingInterceptor

  • All Implemented Interfaces:
    org.infinispan.commands.Visitor, org.infinispan.interceptors.AsyncInterceptor

    public class LockingInterceptor
    extends org.infinispan.interceptors.locking.NonTransactionalLockingInterceptor
    With regular NonTransactionalLockingInterceptor, async replication does not work in combination with synchronous replication: sync replication relies on locking to order writes on backup while async replication relies on FIFO-ordering from primary to backup. If these two combine, there's a possibility that on backup two modifications modifications will proceed concurrently. Similar issue threatens consistency when the command has Flag.CACHE_MODE_LOCAL - these commands don't acquire locks either. Therefore, this interceptor locks the entry all the time. UnorderedDistributionInterceptor does not forward the message from non-origin to any other node, and the distribution interceptor won't block on RPC but will return CompletableFuture and we'll wait for it here.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected org.infinispan.interceptors.InvocationFinallyFunction invokeNextAndUnlock  
      protected org.infinispan.interceptors.InvocationFinallyFunction unlockAllReturnCheckCompletableFutureHandler  
      • Fields inherited from class org.infinispan.interceptors.locking.AbstractLockingInterceptor

        cdl, invalidationMode, lockManager
      • Fields inherited from class org.infinispan.interceptors.BaseAsyncInterceptor

        cacheConfiguration
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected Object visitDataWriteCommand​(org.infinispan.context.InvocationContext ctx, org.infinispan.commands.write.DataWriteCommand command)  
      • Methods inherited from class org.infinispan.interceptors.locking.NonTransactionalLockingInterceptor

        getLog, handleReadManyCommand, handleWriteManyCommand, visitDataReadCommand
      • Methods inherited from class org.infinispan.interceptors.locking.AbstractLockingInterceptor

        getLockTimeoutMillis, lockAndRecord, start, visitClearCommand, visitComputeCommand, visitComputeIfAbsentCommand, visitGetAllCommand, visitGetCacheEntryCommand, visitGetKeyValueCommand, visitInvalidateCommand, visitInvalidateL1Command, visitPutKeyValueCommand, visitPutMapCommand, visitReadOnlyKeyCommand, visitReadOnlyManyCommand, visitReadWriteKeyCommand, visitReadWriteKeyValueCommand, visitReadWriteManyCommand, visitReadWriteManyEntriesCommand, visitRemoveCommand, visitReplaceCommand, visitWriteOnlyKeyCommand, visitWriteOnlyKeyValueCommand, visitWriteOnlyManyCommand, visitWriteOnlyManyEntriesCommand
      • Methods inherited from class org.infinispan.interceptors.DDAsyncInterceptor

        handleDefault, visitCommand, visitCommitCommand, visitDistributedExecuteCommand, visitEntrySetCommand, visitEvictCommand, visitGetKeysInGroupCommand, visitKeySetCommand, visitLockControlCommand, visitPrepareCommand, visitRollbackCommand, visitSizeCommand, visitUnknownCommand
      • Methods inherited from class org.infinispan.interceptors.BaseAsyncInterceptor

        asyncInvokeNext, asyncInvokeNext, asyncValue, invokeNext, invokeNextAndExceptionally, invokeNextAndFinally, invokeNextAndHandle, invokeNextThenAccept, invokeNextThenApply, isSuccessfullyDone, makeStage, setNextInterceptor, valueOrException
      • Methods inherited from interface org.infinispan.commands.Visitor

        visitApplyDeltaCommand, visitRemoveExpiredCommand
    • Field Detail

      • unlockAllReturnCheckCompletableFutureHandler

        protected final org.infinispan.interceptors.InvocationFinallyFunction unlockAllReturnCheckCompletableFutureHandler
      • invokeNextAndUnlock

        protected final org.infinispan.interceptors.InvocationFinallyFunction invokeNextAndUnlock
    • Constructor Detail

      • LockingInterceptor

        public LockingInterceptor()
    • Method Detail

      • visitDataWriteCommand

        protected Object visitDataWriteCommand​(org.infinispan.context.InvocationContext ctx,
                                               org.infinispan.commands.write.DataWriteCommand command)
                                        throws Throwable
        Overrides:
        visitDataWriteCommand in class org.infinispan.interceptors.locking.NonTransactionalLockingInterceptor
        Throws:
        Throwable