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 ch...@apache.org on 2017/12/18 09:12:02 UTC
svn commit: r1818535 - in /jackrabbit/oak/trunk/oak-run/src:
main/java/org/apache/jackrabbit/oak/plugins/document/mongo/
test/java/org/apache/jackrabbit/oak/index/
test/java/org/apache/jackrabbit/oak/plugins/document/mongo/
Author: chetanm
Date: Mon Dec 18 09:12:02 2017
New Revision: 1818535
URL: http://svn.apache.org/viewvc?rev=1818535&view=rev
Log:
OAK-6353 - Use Document order traversal for reindexing performed on DocumentNodeStore setups
Make MongoDocumentTraversal logic work only with readOnly mode
Modified:
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentTraverser.java
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/DocumentStoreIndexerIT.java
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/DocumentTraverserTest.java
Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentTraverser.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentTraverser.java?rev=1818535&r1=1818534&r2=1818535&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentTraverser.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentTraverser.java Mon Dec 18 09:12:02 2017
@@ -28,31 +28,27 @@ import com.mongodb.DBCursor;
import org.apache.jackrabbit.oak.plugins.document.Collection;
import org.apache.jackrabbit.oak.plugins.document.Document;
import org.apache.jackrabbit.oak.plugins.document.NodeDocument;
-import org.apache.jackrabbit.oak.plugins.document.cache.CacheChangesTracker;
import org.apache.jackrabbit.oak.plugins.document.cache.NodeDocumentCache;
import org.apache.jackrabbit.oak.plugins.document.util.CloseableIterable;
-import static java.util.Collections.singletonList;
+import static com.google.common.base.Preconditions.checkState;
public class MongoDocumentTraverser {
private final MongoDocumentStore mongoStore;
+ private boolean disableReadOnlyCheck;
public MongoDocumentTraverser(MongoDocumentStore mongoStore) {
this.mongoStore = mongoStore;
}
public <T extends Document> CloseableIterable<T> getAllDocuments(Collection<T> collection, Predicate<String> filter) {
- //TODO Handle readOnly
- boolean readOnly = true;
+ if (!disableReadOnlyCheck) {
+ checkState(mongoStore.isReadOnly(), "Traverser can only be used with readOnly store");
+ }
+
DBCollection dbCollection = mongoStore.getDBCollection(collection);
Closer closer = Closer.create();
- CacheChangesTracker cacheChangesTracker;
- if (collection == Collection.NODES && !readOnly) {
- cacheChangesTracker = getNodeDocCache().registerTracker(NodeDocument.MIN_ID_VALUE, NodeDocument.MAX_ID_VALUE);
- closer.register(cacheChangesTracker::close);
- } else {
- cacheChangesTracker = null;
- }
+
DBCursor cursor = dbCollection.find();
//TODO This may lead to reads being routed to secondary depending on MongoURI
@@ -68,16 +64,20 @@ public class MongoDocumentTraverser {
//TODO Review the cache update approach where tracker has to track *all* docs
if (collection == Collection.NODES) {
NodeDocument nodeDoc = (NodeDocument) doc;
- if (readOnly) {
- getNodeDocCache().put(nodeDoc);
- }
- getNodeDocCache().putNonConflictingDocs(cacheChangesTracker, singletonList(nodeDoc));
+ getNodeDocCache().put(nodeDoc);
}
return doc;
});
return CloseableIterable.wrap(result, closer);
}
+ /**
+ * For testing only
+ */
+ void disableReadOnlyCheck() {
+ this.disableReadOnlyCheck = true;
+ }
+
private NodeDocumentCache getNodeDocCache() {
return mongoStore.getNodeDocumentCache();
}
Modified: jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/DocumentStoreIndexerIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/DocumentStoreIndexerIT.java?rev=1818535&r1=1818534&r2=1818535&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/DocumentStoreIndexerIT.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/DocumentStoreIndexerIT.java Mon Dec 18 09:12:02 2017
@@ -56,6 +56,7 @@ import org.apache.jackrabbit.oak.spi.sta
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStore;
import org.apache.jackrabbit.oak.spi.whiteboard.DefaultWhiteboard;
+import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
import org.apache.jackrabbit.oak.stats.StatisticsProvider;
import org.junit.Assume;
@@ -133,7 +134,7 @@ public class DocumentStoreIndexerIT exte
Whiteboard wb = new DefaultWhiteboard();
MongoDocumentStore ds = (MongoDocumentStore) docBuilder.getDocumentStore();
- wb.register(MongoDocumentStore.class, ds, emptyMap());
+ Registration r1 = wb.register(MongoDocumentStore.class, ds, emptyMap());
wb.register(StatisticsProvider.class, StatisticsProvider.NOOP, emptyMap());
configureIndex(store);
@@ -159,6 +160,16 @@ public class DocumentStoreIndexerIT exte
String checkpoint = store.checkpoint(100000);
+ //Shut down this store and restart in readOnly mode
+ store.dispose();
+ r1.unregister();
+
+ DocumentNodeStoreBuilder<?> docBuilderRO = builderProvider.newBuilder().setReadOnlyMode()
+ .setMongoDB(connectionFactory.getConnection().getDB());
+ ds = (MongoDocumentStore) docBuilderRO.getDocumentStore();
+ store = docBuilderRO.build();
+ wb.register(MongoDocumentStore.class, ds, emptyMap());
+
IndexHelper helper = new IndexHelper(store, store.getBlobStore(), wb, temporaryFolder.newFolder(),
temporaryFolder.newFolder(), asList(TEST_INDEX_PATH));
IndexerSupport support = new IndexerSupport(helper, checkpoint);
Modified: jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/DocumentTraverserTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/DocumentTraverserTest.java?rev=1818535&r1=1818534&r2=1818535&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/DocumentTraverserTest.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/plugins/document/mongo/DocumentTraverserTest.java Mon Dec 18 09:12:02 2017
@@ -58,6 +58,7 @@ public class DocumentTraverserTest exten
ds.invalidateCache();
MongoDocumentTraverser traverser = new MongoDocumentTraverser((MongoDocumentStore) ds);
+ traverser.disableReadOnlyCheck();
CloseableIterable<NodeDocument> itr = traverser.getAllDocuments(Collection.NODES, id -> getPathFromId(id).startsWith("/a"));
Set<String> paths = StreamSupport.stream(itr.spliterator(), false)
.map(NodeDocument::getPath)