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 th...@apache.org on 2013/12/03 14:48:36 UTC

svn commit: r1547390 - /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/blob/MongoBlobStore.java

Author: thomasm
Date: Tue Dec  3 13:48:36 2013
New Revision: 1547390

URL: http://svn.apache.org/r1547390
Log:
OAK-760 MongoBlobStore: read from a secondary member when possible

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/blob/MongoBlobStore.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/blob/MongoBlobStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/blob/MongoBlobStore.java?rev=1547390&r1=1547389&r2=1547390&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/blob/MongoBlobStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/mongomk/blob/MongoBlobStore.java Tue Dec  3 13:48:36 2013
@@ -29,6 +29,7 @@ import com.mongodb.DBCollection;
 import com.mongodb.DBObject;
 import com.mongodb.MongoException;
 import com.mongodb.QueryBuilder;
+import com.mongodb.ReadPreference;
 import com.mongodb.WriteResult;
 
 /**
@@ -160,7 +161,19 @@ public class MongoBlobStore extends Abst
 
     private MongoBlob getBlob(String id, long lastMod) {
         DBObject query = getBlobQuery(id, lastMod);
-        return (MongoBlob) getBlobCollection().findOne(query);
+        
+        // try the secondary first
+        // TODO add a configuration option for whether to try reading from secondary
+        ReadPreference pref = ReadPreference.secondaryPreferred();
+        DBObject fields = new BasicDBObject();
+        fields.put(MongoBlob.KEY_DATA, 1);
+        MongoBlob blob = (MongoBlob) getBlobCollection().findOne(query, fields, pref);
+        if (blob == null) {
+            // not found in the secondary: try the primary
+            pref = ReadPreference.primary();
+            blob = (MongoBlob) getBlobCollection().findOne(query, fields, pref);
+        }
+        return blob;
     }
 
     private static DBObject getBlobQuery(String id, long lastMod) {