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
FieldsModifier and TypeFieldDescriptionprotected 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, lockManagerFields inherited from class org.infinispan.interceptors.BaseAsyncInterceptor
cacheConfiguration -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected ObjectvisitDataWriteCommand(org.infinispan.context.InvocationContext ctx, org.infinispan.commands.write.DataWriteCommand command) Methods inherited from class org.infinispan.interceptors.locking.NonTransactionalLockingInterceptor
getLog, handleReadManyCommand, handleWriteManyCommand, visitDataReadCommand, visitInvalidateCommandMethods 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, visitWriteOnlyManyEntriesCommandMethods inherited from class org.infinispan.interceptors.DDAsyncInterceptor
handleDefault, visitCommand, visitCommitCommand, visitEntrySetCommand, visitEvictCommand, visitKeySetCommand, visitLockControlCommand, visitPrepareCommand, visitRollbackCommand, visitSizeCommand, visitTouchCommand, visitUnknownCommandMethods inherited from class org.infinispan.interceptors.BaseAsyncInterceptor
asyncInvokeNext, asyncInvokeNext, asyncInvokeNext, asyncValue, delayedNull, delayedValue, delayedValue, invokeNext, invokeNextAndExceptionally, invokeNextAndFinally, invokeNextAndHandle, invokeNextThenAccept, invokeNextThenApply, isSuccessfullyDone, makeStage, setNextInterceptor, valueOrException
-
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:
visitDataWriteCommandin classorg.infinispan.interceptors.locking.NonTransactionalLockingInterceptor
-