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