[jbosscache-commits] JBoss Cache SVN: r6045 - core/trunk/src/main/java/org/jboss/cache/lock.
jbosscache-commits at lists.jboss.org
jbosscache-commits at lists.jboss.org
Wed Jun 25 14:29:49 EDT 2008
Author: manik.surtani at jboss.com
Date: 2008-06-25 14:29:49 -0400 (Wed, 25 Jun 2008)
New Revision: 6045
Modified:
core/trunk/src/main/java/org/jboss/cache/lock/FqnLockManager.java
core/trunk/src/main/java/org/jboss/cache/lock/LockManager.java
core/trunk/src/main/java/org/jboss/cache/lock/MVCCLockManager.java
core/trunk/src/main/java/org/jboss/cache/lock/NodeBasedLockManager.java
Log:
Added extra methods to interface
Modified: core/trunk/src/main/java/org/jboss/cache/lock/FqnLockManager.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/lock/FqnLockManager.java 2008-06-25 18:28:12 UTC (rev 6044)
+++ core/trunk/src/main/java/org/jboss/cache/lock/FqnLockManager.java 2008-06-25 18:29:49 UTC (rev 6045)
@@ -47,4 +47,9 @@
{
return getReadOwners(node.getFqn());
}
+
+ public boolean isLocked(NodeSPI node)
+ {
+ return isLocked(node.getFqn());
+ }
}
Modified: core/trunk/src/main/java/org/jboss/cache/lock/LockManager.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/lock/LockManager.java 2008-06-25 18:28:12 UTC (rev 6044)
+++ core/trunk/src/main/java/org/jboss/cache/lock/LockManager.java 2008-06-25 18:29:49 UTC (rev 6045)
@@ -258,6 +258,14 @@
/**
* Returns true if the node is locked (either for reading or writing) by anyone, and false otherwise.
*
+ * @param fqn node to inspect
+ * @return true of locked; false if not.
+ */
+ boolean isLocked(Fqn fqn);
+
+ /**
+ * Returns true if the node is locked (either for reading or writing) by anyone, and false otherwise.
+ *
* @param n node to inspect
* @param lockType lockType to test for
* @return true of locked; false if not.
@@ -302,4 +310,11 @@
* @param node node to inspect
*/
String printLockInfo(NodeSPI node);
+
+ /**
+ * Prints lock information for all locks.
+ *
+ * @return
+ */
+ String printLockInfo();
}
Modified: core/trunk/src/main/java/org/jboss/cache/lock/MVCCLockManager.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/lock/MVCCLockManager.java 2008-06-25 18:28:12 UTC (rev 6044)
+++ core/trunk/src/main/java/org/jboss/cache/lock/MVCCLockManager.java 2008-06-25 18:29:49 UTC (rev 6045)
@@ -1,6 +1,8 @@
package org.jboss.cache.lock;
import net.jcip.annotations.ThreadSafe;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.jboss.cache.CacheSPI;
import org.jboss.cache.DataContainer;
import org.jboss.cache.Fqn;
@@ -13,6 +15,7 @@
import org.jboss.cache.util.concurrent.locks.OwnableReentrantLock;
import javax.transaction.TransactionManager;
+import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Set;
@@ -47,6 +50,8 @@
private TransactionManager transactionManager;
private InvocationContextContainer invocationContextContainer;
private static final int DEFAULT_CONCURRENCY = 20;
+ private static final Log log = LogFactory.getLog(MVCCLockManager.class);
+ private static final boolean trace = log.isTraceEnabled();
@Inject
public void injectDataContainer(DataContainer dataContainer, CacheSPI cache, TransactionManager transactionManager, InvocationContextContainer invocationContextContainer)
@@ -80,6 +85,7 @@
public boolean lock(Fqn fqn, LockType lockType, Object owner) throws InterruptedException
{
assertIsWriteLock(lockType);
+ if (trace) log.trace("Attempting to lock " + fqn);
Lock lock = lockContainer.getLock(fqn);
return lock.tryLock(lockAcquisitionTimeout, MILLISECONDS);
}
@@ -87,6 +93,7 @@
public boolean lock(Fqn fqn, LockType lockType, Object owner, long timeoutMillis) throws InterruptedException
{
assertIsWriteLock(lockType);
+ if (trace) log.trace("Attempting to lock " + fqn);
Lock lock = lockContainer.getLock(fqn);
return lock.tryLock(timeoutMillis, MILLISECONDS);
}
@@ -94,6 +101,7 @@
public boolean lockAndRecord(Fqn fqn, LockType lockType, InvocationContext ctx) throws InterruptedException
{
assertIsWriteLock(lockType);
+ if (trace) log.trace("Attempting to lock " + fqn);
Lock lock = lockContainer.getLock(fqn);
if (lock.tryLock(ctx.getContextLockAcquisitionTimeout(lockAcquisitionTimeout), MILLISECONDS))
{
@@ -107,6 +115,7 @@
public void unlock(Fqn fqn, Object owner)
{
+ if (trace) log.trace("Attempting to unlock " + fqn);
Lock lock = lockContainer.getLock(fqn);
lock.unlock();
}
@@ -119,7 +128,11 @@
// unlocking needs to be done in reverse order.
Fqn[] fqns = new Fqn[locks.size()];
fqns = locks.toArray(fqns);
- for (int i = fqns.length - 1; i > -1; i--) lockContainer.getLock(fqns[i]).unlock();
+ for (int i = fqns.length - 1; i > -1; i--)
+ {
+ if (trace) log.trace("Attempting to unlock " + fqns[i]);
+ lockContainer.getLock(fqns[i]).unlock();
+ }
}
}
@@ -228,9 +241,9 @@
return lockContainer.ownsLock(fqn, owner);
}
- public boolean isLocked(NodeSPI n)
+ public boolean isLocked(Fqn fqn)
{
- return lockContainer.isLocked(n.getFqn());
+ return lockContainer.isLocked(fqn);
}
public boolean isLocked(NodeSPI n, LockType lockType)
@@ -251,11 +264,16 @@
public String printLockInfo(NodeSPI node)
{
- return "Not supported in this impl.";
+ return printLockInfo();
}
+ public String printLockInfo()
+ {
+ return lockContainer.toString();
+ }
+
@ThreadSafe
- abstract class LockContainer
+ public abstract class LockContainer
{
private final int lockSegmentMask;
private final int lockSegmentShift;
@@ -318,9 +336,11 @@
abstract boolean isLocked(Fqn fqn);
abstract Lock getLock(Fqn fqn);
+
+ public abstract int getNumLocksHeld();
}
- class ReentrantLockContainer extends LockContainer
+ public class ReentrantLockContainer extends LockContainer
{
ReentrantLock[] sharedLocks;
@@ -332,9 +352,18 @@
ReentrantLock getLock(Fqn fqn)
{
- return sharedLocks[hashToIndex(fqn)];
+ ReentrantLock l = sharedLocks[hashToIndex(fqn)];
+ if (trace) log.trace("Found lock " + l + " for fqn " + fqn);
+ return l;
}
+ public int getNumLocksHeld()
+ {
+ int i = 0;
+ for (ReentrantLock l : sharedLocks) if (l.isLocked()) i++;
+ return i;
+ }
+
boolean ownsLock(Fqn fqn, Object owner)
{
ReentrantLock lock = getLock(fqn);
@@ -346,9 +375,16 @@
ReentrantLock lock = getLock(fqn);
return lock.isLocked();
}
+
+ public String toString()
+ {
+ return "ReentrantLockContainer{" +
+ "sharedLocks=" + (sharedLocks == null ? null : Arrays.asList(sharedLocks)) +
+ '}';
+ }
}
- class OwnableReentrantLockContainer extends LockContainer
+ public class OwnableReentrantLockContainer extends LockContainer
{
OwnableReentrantLock[] sharedLocks;
@@ -360,7 +396,9 @@
OwnableReentrantLock getLock(Fqn fqn)
{
- return sharedLocks[hashToIndex(fqn)];
+ OwnableReentrantLock l = sharedLocks[hashToIndex(fqn)];
+ if (trace) log.trace("Found lock " + l + " for fqn " + fqn);
+ return l;
}
boolean ownsLock(Fqn fqn, Object owner)
@@ -374,5 +412,19 @@
OwnableReentrantLock lock = getLock(fqn);
return lock.isLocked();
}
+
+ public int getNumLocksHeld()
+ {
+ int i = 0;
+ for (OwnableReentrantLock l : sharedLocks) if (l.isLocked()) i++;
+ return i;
+ }
+
+ public String toString()
+ {
+ return "OwnableReentrantLockContainer{" +
+ "sharedLocks=" + (sharedLocks == null ? null : Arrays.asList(sharedLocks)) +
+ '}';
+ }
}
}
Modified: core/trunk/src/main/java/org/jboss/cache/lock/NodeBasedLockManager.java
===================================================================
--- core/trunk/src/main/java/org/jboss/cache/lock/NodeBasedLockManager.java 2008-06-25 18:28:12 UTC (rev 6044)
+++ core/trunk/src/main/java/org/jboss/cache/lock/NodeBasedLockManager.java 2008-06-25 18:29:49 UTC (rev 6045)
@@ -251,6 +251,11 @@
return n.getLock().isLocked();
}
+ public boolean isLocked(Fqn fqn)
+ {
+ return isLocked(dataContainer.peek(fqn));
+ }
+
public boolean isLocked(NodeSPI n, LockType type)
{
switch (type)
@@ -299,4 +304,9 @@
return sb.toString();
}
+
+ public String printLockInfo()
+ {
+ return printLockInfo(dataContainer.getRoot());
+ }
}
More information about the jbosscache-commits
mailing list