I was wondering if there was any way to check if lock on a certain key/keys was already owned by the application.
I know that at runtime, if lock is already own it will result in a no-op operation as stated :
https://docs.jboss.org/author/display/ISPN/Locking+and+Concurrency
which make sense when looking at source code in :
org.infinispan.interceptors.locking.PessimisticLockingInterceptor
@Override
public Object visitLockControlCommand(TxInvocationContext ctx, LockControlCommand command) throws Throwable {
if (!ctx.isInTxScope())
throw new IllegalStateException("Locks should only be acquired within the scope of a transaction!");
//first go remotely - required by DLD. Only acquire remote lock if multiple keys or the single key doesn't map
// to the local node.
if (ctx.isOriginLocal()) {
final boolean isSingleKeyAndLocal = !command.multipleKeys() && cdl.localNodeIsPrimaryOwner(command.getSingleKey());
if (!isSingleKeyAndLocal || command.multipleKeys()) {
LocalTransaction localTx = (LocalTransaction) ctx.getCacheTransaction();
if (!localTx.getAffectedKeys().containsAll(command.getKeys())) {
invokeNextInterceptor(ctx, command);
ctx.addAllAffectedKeys(command.getKeys());
} else {
log.tracef("Already own locks on keys: %s, skipping remote call", command.getKeys());
}
}
}
Though it would be nice to check in the application if a certain lock is already owned to do assertion of some kind.
Is it possible to do so actually ?