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 regularNonTransactionalLockingInterceptor
, 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 hasFlag.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 returnCompletableFuture
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
-
Constructor Summary
Constructors Constructor Description LockingInterceptor()
-
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
-
-
-
-
Method Detail
-
visitDataWriteCommand
protected Object visitDataWriteCommand(org.infinispan.context.InvocationContext ctx, org.infinispan.commands.write.DataWriteCommand command) throws Throwable
- Overrides:
visitDataWriteCommand
in classorg.infinispan.interceptors.locking.NonTransactionalLockingInterceptor
- Throws:
Throwable
-
-