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


Reply via email to