Author: mreutegg
Date: Thu Mar 12 15:11:49 2015
New Revision: 1666218
URL: http://svn.apache.org/r1666218
Log:
OAK-2614: Timeout for MongoDB query
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.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=1666218&r1=1666217&r2=1666218&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 Mar 12 15:11:49 2015
@@ -28,6 +28,7 @@ import java.util.Map.Entry;
import java.util.TreeMap;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.regex.Matcher;
@@ -153,6 +154,18 @@ public class MongoDocumentStore implemen
private final long maxDeltaForModTimeIdxSecs =
Long.getLong("oak.mongo.maxDeltaForModTimeIdxSecs",-1);
+ /**
+ * Duration in milliseconds after which a mongo query will be terminated.
+ * <p>
+ * If this value is -1 no timeout is being set at all, if it is 1 or
greater
+ * this translated to MongoDB's maxTimeNS being set accordingly.
+ * <p>
+ * Default is -1.
+ * See:
http://mongodb.github.io/node-mongodb-native/driver-articles/anintroductionto1_4_and_2_6.html#maxtimems
+ */
+ private final long maxQueryTimeMS =
+ Long.getLong("oak.mongo.maxQueryTimeMS", -1);
+
private String lastReadWriteMode;
private final Map<String, String> metadata;
@@ -501,6 +514,10 @@ public class MongoDocumentStore implemen
final long start = PERFLOG.start();
try {
DBCursor cursor =
dbCollection.find(query).sort(BY_ID_ASC).hint(hint);
+ if (maxQueryTimeMS > 0) {
+ // OAK-2614: set maxTime if maxQueryTimeMS > 0
+ cursor.maxTime(maxQueryTimeMS, TimeUnit.MILLISECONDS);
+ }
ReadPreference readPreference =
getMongoReadPreference(collection, parentId,
getDefaultReadPreference(collection));