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;
}
}