[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