You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2015/10/29 14:26:56 UTC

svn commit: r1711248 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStoreTest.java

Author: mreutegg
Date: Thu Oct 29 13:26:56 2015
New Revision: 1711248

URL: http://svn.apache.org/viewvc?rev=1711248&view=rev
Log:
OAK-3567: Long running query holds TreeLock

Adjust test to check if withLock parameter is respected

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStoreTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java?rev=1711248&r1=1711247&r2=1711248&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java Thu Oct 29 13:26:56 2015
@@ -31,6 +31,7 @@ import java.util.TreeMap;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -139,6 +140,11 @@ public class MongoDocumentStore implemen
     private final Striped<ReadWriteLock> parentLocks = Striped.readWriteLock(64);
 
     /**
+     * Counts how many times {@link TreeLock}s were acquired.
+     */
+    private final AtomicLong lockAcquisitionCounter = new AtomicLong();
+
+    /**
      * Comparator for maps with {@link Revision} keys. The maps are ordered
      * descending, newest revisions first!
      */
@@ -1371,6 +1377,7 @@ public class MongoDocumentStore implemen
      * @return the acquired lock for the given key.
      */
     private TreeLock acquire(String key, Collection<?> collection) {
+        lockAcquisitionCounter.incrementAndGet();
         if (collection == Collection.NODES) {
             return TreeLock.shared(parentLocks.get(getParentId(key)), locks.get(key));
         } else {
@@ -1387,6 +1394,7 @@ public class MongoDocumentStore implemen
      * @return the acquired lock for the given parent key.
      */
     private TreeLock acquireExclusive(String parentKey) {
+        lockAcquisitionCounter.incrementAndGet();
         return TreeLock.exclusive(parentLocks.get(parentKey));
     }
 
@@ -1431,6 +1439,10 @@ public class MongoDocumentStore implemen
         this.maxLockedQueryTimeMS = maxLockedQueryTimeMS;
     }
 
+    long getLockAcquisitionCount() {
+        return lockAcquisitionCounter.get();
+    }
+
     private final static class TreeLock {
 
         private final Lock parentLock;

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStoreTest.java?rev=1711248&r1=1711247&r2=1711248&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStoreTest.java Thu Oct 29 13:26:56 2015
@@ -32,6 +32,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.document.util.Utils;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -66,10 +67,12 @@ public class MongoDocumentStoreTest exte
             }
             mk.commit("/", sb.toString(), null, null);
             store.queriesWithoutLock.set(0);
+            long lockCount = store.getLockAcquisitionCount();
             List<NodeDocument> docs = store.query(Collection.NODES, fromId, toId,
                     "foo", System.currentTimeMillis(), Integer.MAX_VALUE);
             assertTrue(docs.isEmpty());
             if (store.queriesWithoutLock.get() > 0) {
+                assertEquals(lockCount + 1, store.getLockAcquisitionCount());
                 return;
             }
         }