Author: chetanm
Date: Thu Mar 27 15:21:08 2014
New Revision: 1582349

URL: http://svn.apache.org/r1582349
Log:
OAK-1341 - DocumentNodeStore: Implement revision garbage collection (WIP)

Support for gc of deleted nodes

-- Prefer reading from secondary
-- Fix MongoFixture to create a new DocumentStore for every call

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbstractDocumentStoreTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreFixture.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java?rev=1582349&r1=1582348&r2=1582349&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoVersionGCSupport.java
 Thu Mar 27 15:21:08 2014
@@ -24,6 +24,7 @@ import com.mongodb.DBCollection;
 import com.mongodb.DBCursor;
 import com.mongodb.DBObject;
 import com.mongodb.QueryBuilder;
+import com.mongodb.ReadPreference;
 import org.apache.jackrabbit.oak.plugins.document.Collection;
 import org.apache.jackrabbit.oak.plugins.document.NodeDocument;
 import org.apache.jackrabbit.oak.plugins.document.VersionGCSupport;
@@ -31,6 +32,13 @@ import org.apache.jackrabbit.oak.plugins
 
 import static com.google.common.collect.Iterables.transform;
 
+/**
+ * Mongo specific version of VersionGCSupport which uses mongo queries
+ * to fetch required NodeDocuments
+ *
+ * <p>Version collection involves looking into old record and mostly unmodified
+ * documents. In such case read from secondaries are preferred</p>
+ */
 public class MongoVersionGCSupport extends VersionGCSupport {
     private final MongoDocumentStore store;
 
@@ -46,7 +54,7 @@ public class MongoVersionGCSupport exten
                                 
.start(NodeDocument.DELETED_ONCE).is(Boolean.TRUE)
                                 
.put(NodeDocument.MODIFIED).lessThan(lastModifiedTime)
                         .get();
-        DBCursor cursor = getNodeCollection().find(query);
+        DBCursor cursor = 
getNodeCollection().find(query).setReadPreference(ReadPreference.secondaryPreferred());
         return CloseableIterable.wrap(transform(cursor, new Function<DBObject, 
NodeDocument>() {
             @Override
             public NodeDocument apply(DBObject input) {

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbstractDocumentStoreTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbstractDocumentStoreTest.java?rev=1582349&r1=1582348&r2=1582349&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbstractDocumentStoreTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/AbstractDocumentStoreTest.java
 Thu Mar 27 15:21:08 2014
@@ -29,7 +29,7 @@ public abstract class AbstractDocumentSt
     protected DocumentStore ds;
 
     public AbstractDocumentStoreTest(DocumentStoreFixture dsf) {
-        this.ds = dsf.getDocumentStore();
+        this.ds = dsf.createDocumentStore();
         this.dsname = dsf.getName();
     }
 

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreFixture.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreFixture.java?rev=1582349&r1=1582348&r2=1582349&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreFixture.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentStoreFixture.java
 Thu Mar 27 15:21:08 2014
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.plugin
 
 import javax.sql.DataSource;
 
+import com.mongodb.BasicDBObject;
 import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
 import org.apache.jackrabbit.oak.plugins.document.mongo.MongoDocumentStore;
 import org.apache.jackrabbit.oak.plugins.document.rdb.RDBDataSourceFactory;
@@ -40,7 +41,7 @@ public abstract class DocumentStoreFixtu
 
     public abstract String getName();
 
-    public abstract DocumentStore getDocumentStore();
+    public abstract DocumentStore createDocumentStore();
 
     public boolean isAvailable() {
         return true;
@@ -58,7 +59,7 @@ public abstract class DocumentStoreFixtu
         }
 
         @Override
-        public DocumentStore getDocumentStore() {
+        public DocumentStore createDocumentStore() {
             return ds;
         }
     }
@@ -84,7 +85,7 @@ public abstract class DocumentStoreFixtu
         }
 
         @Override
-        public DocumentStore getDocumentStore() {
+        public DocumentStore createDocumentStore() {
             return ds;
         }
 
@@ -96,21 +97,14 @@ public abstract class DocumentStoreFixtu
 
     public static class MongoFixture extends DocumentStoreFixture {
         public static final String DEFAULT_URI = 
"mongodb://localhost:27017/oak-test";
-        private DocumentStore ds;
-        private DB mongoDB;
+        private String uri;
 
         public MongoFixture(){
             this(DEFAULT_URI);
         }
 
         public MongoFixture(String dbUri) {
-            try {
-                MongoConnection connection = new MongoConnection(dbUri);
-                this.mongoDB = connection.getDB();
-                this.ds = new MongoDocumentStore(mongoDB, new 
DocumentMK.Builder());
-            } catch (Exception e) {
-                LOG.trace("Mongo instance not available at " + dbUri + ", 
skipping tests...");
-            }
+            this.uri = dbUri;
         }
 
         @Override
@@ -119,18 +113,26 @@ public abstract class DocumentStoreFixtu
         }
 
         @Override
-        public DocumentStore getDocumentStore() {
-            return ds;
+        public DocumentStore createDocumentStore() {
+            try {
+                MongoConnection connection = new MongoConnection(uri);
+                DB db = connection.getDB();
+                MongoUtils.dropCollections(db);
+                return new MongoDocumentStore(db, new DocumentMK.Builder());
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
         }
 
         @Override
         public boolean isAvailable() {
-            return this.ds != null;
-        }
-
-        @Override
-        public void dispose() throws Exception {
-            mongoDB.dropDatabase();
+            try{
+                MongoConnection connection = new MongoConnection(uri);
+                connection.getDB().command(new BasicDBObject("ping", 1));
+                return true;
+            }catch(Exception e){
+                return false;
+            }
         }
     }
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorTest.java?rev=1582349&r1=1582348&r2=1582349&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/VersionGarbageCollectorTest.java
 Thu Mar 27 15:21:08 2014
@@ -71,7 +71,7 @@ public class VersionGarbageCollectorTest
         clock = new Clock.Virtual();
         store = new DocumentMK.Builder()
                 .clock(clock)
-                .setDocumentStore(fixture.getDocumentStore())
+                .setDocumentStore(fixture.createDocumentStore())
                 .getNodeStore();
         gc = store.getVersionGarbageCollector();
 
@@ -81,7 +81,7 @@ public class VersionGarbageCollectorTest
 
     @After
     public void tearDown() throws Exception {
-        fixture.dispose();
+        store.dispose();
     }
 
     @Test
@@ -129,9 +129,4 @@ public class VersionGarbageCollectorTest
         //TODO Add test scenario for deletion along with previous docs
     }
 
-
-    @Test
-    public void sample() throws Exception{
-
-    }
 }
\ No newline at end of file


Reply via email to