Index: core/src/main/java/org/infinispan/util/concurrent/locks/containers/AbstractPerEntryLockContainer.java =================================================================== --- core/src/main/java/org/infinispan/util/concurrent/locks/containers/AbstractPerEntryLockContainer.java (revision Local version) +++ core/src/main/java/org/infinispan/util/concurrent/locks/containers/AbstractPerEntryLockContainer.java (revision Shelved version) @@ -22,6 +22,9 @@ */ package org.infinispan.util.concurrent.locks.containers; +import org.infinispan.util.logging.Log; +import org.infinispan.util.logging.LogFactory; + import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.TimeUnit; @@ -37,6 +40,8 @@ */ public abstract class AbstractPerEntryLockContainer implements LockContainer { + private final Log log = LogFactory.getLog(AbstractPerEntryLockContainer.class); + protected final ConcurrentMap locks; protected AbstractPerEntryLockContainer(int concurrencyLevel) { @@ -81,8 +86,14 @@ Lock existingLock = locks.putIfAbsent(key, lock); if (existingLock != null && existingLock != lock) { // we have the wrong lock! Unlock and retry. + if (log.isTraceEnabled()) + log.tracef("Got wrong lock! Release and reaquire", lock); + safeRelease(lock); } else { + if (log.isTraceEnabled()) + log.tracef("Acquired lock %s", lock); + // we got the right lock. return lock; } @@ -95,8 +106,13 @@ public void releaseLock(Object key) { Lock l = locks.remove(key); - if (l != null) l.unlock(); + if (l != null) { + if (log.isTraceEnabled()) + log.tracef("Unlock lock %s", l); + + l.unlock(); - } + } + } public int getLockId(Object key) { return System.identityHashCode(getLock(key)); Index: core/src/main/java/org/infinispan/util/concurrent/locks/LockManagerImpl.java =================================================================== --- core/src/main/java/org/infinispan/util/concurrent/locks/LockManagerImpl.java (revision Local version) +++ core/src/main/java/org/infinispan/util/concurrent/locks/LockManagerImpl.java (revision Shelved version) @@ -83,7 +83,7 @@ public boolean lockAndRecord(Object key, InvocationContext ctx) throws InterruptedException { long lockTimeout = getLockAcquisitionTimeout(ctx); - if (trace) log.tracef("Attempting to lock %s with acquisition timeout of %s millis", key, lockTimeout); + if (trace) log.tracef("Attempting to lock key=%s with acquisition timeout of %s millis", key, lockTimeout); if (lockContainer.acquireLock(key, lockTimeout, MILLISECONDS) != null) { // successfully locked! if (ctx instanceof TxInvocationContext) { @@ -95,7 +95,7 @@ throw new IllegalStateException("Transaction "+tx+" appears to no longer be valid!"); } } - if (trace) log.trace("Successfully acquired lock!"); + if (trace) log.trace("Successfully acquired lock!"); return true; } @@ -109,7 +109,7 @@ } public void unlock(Object key) { - if (trace) log.tracef("Attempting to unlock %s", key); + if (trace) log.tracef("Attempting to unlock key=%s", key); lockContainer.releaseLock(key); } Index: core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java =================================================================== --- core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java (revision Local version) +++ core/src/main/java/org/infinispan/transaction/xa/TransactionXaAdapter.java (revision Shelved version) @@ -152,7 +152,8 @@ Xid xid = convertXid(externalXid); if (trace) log.tracef("forget called for xid %s", xid); try { + if (configuration.isTransactionRecoveryEnabled()) - recoveryManager.removeRecoveryInformationFromCluster(null, xid, true); + recoveryManager.removeRecoveryInformationFromCluster(null, xid, true); } catch (Exception e) { log.warn("Exception removing recovery information: ", e); throw new XAException(XAException.XAER_RMERR);