Class PessimisticLockingInterceptor
- java.lang.Object
-
- org.infinispan.interceptors.BaseAsyncInterceptor
-
- org.infinispan.interceptors.DDAsyncInterceptor
-
- org.infinispan.interceptors.locking.AbstractLockingInterceptor
-
- org.infinispan.interceptors.locking.AbstractTxLockingInterceptor
-
- org.infinispan.interceptors.locking.PessimisticLockingInterceptor
-
- All Implemented Interfaces:
org.infinispan.commands.Visitor
,AsyncInterceptor
public class PessimisticLockingInterceptor extends AbstractTxLockingInterceptor
Locking interceptor to be used by pessimistic caches. Design note: when a lock "k" needs to be acquired (e.g. cache.put("k", "v")), if the lock owner is the local node, no remote call is performed to migrate locking logic to the other (numOwners - 1) lock owners. This is a good optimisation for in-vm transactions: if the local node crashes before prepare then the replicated lock information would be useless as the tx is rolled back. OTOH for remote hotrod/transactions this additional RPC makes sense because there's no such thing as transaction originator node, so this might become a configuration option when HotRod tx are in place. Implementation note: current implementation acquires locks remotely first and then locally. This is required by the deadlock detection logic, but might not be optimal: acquiring locks locally first might help to fail fast the in the case of keys being locked.- Author:
- Mircea Markus
-
-
Field Summary
-
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 PessimisticLockingInterceptor()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected org.infinispan.util.logging.Log
getLog()
protected java.lang.Object
handleReadManyCommand(InvocationContext ctx, org.infinispan.commands.FlagAffectedCommand command, java.util.Collection<?> keys)
protected <K> java.lang.Object
handleWriteManyCommand(InvocationContext ctx, org.infinispan.commands.write.WriteCommand command, java.util.Collection<K> keys, boolean forwarded)
protected java.lang.Object
visitDataReadCommand(InvocationContext ctx, org.infinispan.commands.DataCommand command)
protected java.lang.Object
visitDataWriteCommand(InvocationContext ctx, org.infinispan.commands.write.DataWriteCommand command)
java.lang.Object
visitLockControlCommand(org.infinispan.context.impl.TxInvocationContext ctx, org.infinispan.commands.control.LockControlCommand command)
java.lang.Object
visitPrepareCommand(org.infinispan.context.impl.TxInvocationContext ctx, org.infinispan.commands.tx.PrepareCommand command)
-
Methods inherited from class org.infinispan.interceptors.locking.AbstractTxLockingInterceptor
visitCommitCommand, visitRollbackCommand
-
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, visitEntrySetCommand, visitEvictCommand, visitGetKeysInGroupCommand, visitKeySetCommand, visitSizeCommand, 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
-
-
-
-
Method Detail
-
getLog
protected org.infinispan.util.logging.Log getLog()
- Specified by:
getLog
in classAbstractLockingInterceptor
-
visitDataReadCommand
protected final java.lang.Object visitDataReadCommand(InvocationContext ctx, org.infinispan.commands.DataCommand command) throws java.lang.Throwable
- Specified by:
visitDataReadCommand
in classAbstractLockingInterceptor
- Throws:
java.lang.Throwable
-
handleReadManyCommand
protected java.lang.Object handleReadManyCommand(InvocationContext ctx, org.infinispan.commands.FlagAffectedCommand command, java.util.Collection<?> keys)
- Overrides:
handleReadManyCommand
in classAbstractTxLockingInterceptor
-
visitPrepareCommand
public java.lang.Object visitPrepareCommand(org.infinispan.context.impl.TxInvocationContext ctx, org.infinispan.commands.tx.PrepareCommand command) throws java.lang.Throwable
- Specified by:
visitPrepareCommand
in interfaceorg.infinispan.commands.Visitor
- Overrides:
visitPrepareCommand
in classDDAsyncInterceptor
- Throws:
java.lang.Throwable
-
handleWriteManyCommand
protected <K> java.lang.Object handleWriteManyCommand(InvocationContext ctx, org.infinispan.commands.write.WriteCommand command, java.util.Collection<K> keys, boolean forwarded)
- Specified by:
handleWriteManyCommand
in classAbstractLockingInterceptor
-
visitDataWriteCommand
protected java.lang.Object visitDataWriteCommand(InvocationContext ctx, org.infinispan.commands.write.DataWriteCommand command) throws java.lang.Throwable
- Specified by:
visitDataWriteCommand
in classAbstractLockingInterceptor
- Throws:
java.lang.Throwable
-
visitLockControlCommand
public java.lang.Object visitLockControlCommand(org.infinispan.context.impl.TxInvocationContext ctx, org.infinispan.commands.control.LockControlCommand command)
- Specified by:
visitLockControlCommand
in interfaceorg.infinispan.commands.Visitor
- Overrides:
visitLockControlCommand
in classDDAsyncInterceptor
-
-