Class LockingInterceptor

java.lang.Object
org.infinispan.interceptors.BaseAsyncInterceptor
org.infinispan.interceptors.DDAsyncInterceptor
org.infinispan.interceptors.locking.AbstractLockingInterceptor
org.infinispan.interceptors.locking.NonTransactionalLockingInterceptor
org.infinispan.hibernate.cache.commons.access.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 final org.infinispan.interceptors.InvocationFinallyFunction<org.infinispan.commands.write.DataWriteCommand>
     
    protected final org.infinispan.interceptors.InvocationFinallyFunction<org.infinispan.commands.write.DataWriteCommand>
     

    Fields inherited from class org.infinispan.interceptors.locking.AbstractLockingInterceptor

    cdl, invalidationMode, lockManager

    Fields inherited from class org.infinispan.interceptors.BaseAsyncInterceptor

    cacheConfiguration
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    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, visitInvalidateCommand

    Methods inherited from class org.infinispan.interceptors.locking.AbstractLockingInterceptor

    getLockTimeoutMillis, lockAndRecord, start, visitClearCommand, visitComputeCommand, visitComputeIfAbsentCommand, visitGetAllCommand, visitGetCacheEntryCommand, visitGetKeyValueCommand, visitInvalidateL1Command, visitIracPutKeyValueCommand, visitPutKeyValueCommand, visitPutMapCommand, visitReadOnlyKeyCommand, visitReadOnlyManyCommand, visitReadWriteKeyCommand, visitReadWriteKeyValueCommand, visitReadWriteManyCommand, visitReadWriteManyEntriesCommand, visitRemoveCommand, visitRemoveExpiredCommand, visitReplaceCommand, visitWriteOnlyKeyCommand, visitWriteOnlyKeyValueCommand, visitWriteOnlyManyCommand, visitWriteOnlyManyEntriesCommand

    Methods inherited from class org.infinispan.interceptors.DDAsyncInterceptor

    handleDefault, visitCommand, visitCommitCommand, visitEntrySetCommand, visitEvictCommand, visitKeySetCommand, visitLockControlCommand, visitPrepareCommand, visitRollbackCommand, visitSizeCommand, visitTouchCommand, visitUnknownCommand

    Methods inherited from class org.infinispan.interceptors.BaseAsyncInterceptor

    asyncInvokeNext, asyncInvokeNext, asyncInvokeNext, asyncValue, delayedNull, delayedValue, delayedValue, invokeNext, invokeNextAndExceptionally, invokeNextAndFinally, invokeNextAndHandle, invokeNextThenAccept, invokeNextThenApply, isSuccessfullyDone, makeStage, setNextInterceptor, valueOrException

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • unlockAllReturnCheckCompletableFutureHandler

      protected final org.infinispan.interceptors.InvocationFinallyFunction<org.infinispan.commands.write.DataWriteCommand> unlockAllReturnCheckCompletableFutureHandler
    • invokeNextAndUnlock

      protected final org.infinispan.interceptors.InvocationFinallyFunction<org.infinispan.commands.write.DataWriteCommand> invokeNextAndUnlock
  • Constructor Details

    • LockingInterceptor

      public LockingInterceptor()
  • Method Details

    • visitDataWriteCommand

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