use of org.apache.jackrabbit.oak.plugins.index.progress.IndexingProgressReporter in project jackrabbit-oak by apache.
the class DocumentStoreIndexerBase method reindex.
public void reindex() throws CommitFailedException, IOException {
IndexingProgressReporter progressReporter = new IndexingProgressReporter(IndexUpdateCallback.NOOP, NodeTraversalCallback.NOOP);
configureEstimators(progressReporter);
NodeState checkpointedState = indexerSupport.retrieveNodeStateForCheckpoint();
NodeStore copyOnWriteStore = new MemoryNodeStore(checkpointedState);
indexerSupport.switchIndexLanesAndReindexFlag(copyOnWriteStore);
NodeBuilder builder = copyOnWriteStore.getRoot().builder();
CompositeIndexer indexer = prepareIndexers(copyOnWriteStore, builder, progressReporter);
if (indexer.isEmpty()) {
return;
}
closer.register(indexer);
FlatFileStore flatFileStore = buildFlatFileStore(checkpointedState, indexer, indexer::shouldInclude, null);
progressReporter.reset();
if (flatFileStore.getEntryCount() > 0) {
FlatFileStore finalFlatFileStore = flatFileStore;
progressReporter.setNodeCountEstimator((String basePath, Set<String> indexPaths) -> finalFlatFileStore.getEntryCount());
}
progressReporter.reindexingTraversalStart("/");
preIndexOpertaions(indexer.getIndexers());
Stopwatch indexerWatch = Stopwatch.createStarted();
for (NodeStateEntry entry : flatFileStore) {
reportDocumentRead(entry.getPath(), progressReporter);
indexer.index(entry);
}
progressReporter.reindexingTraversalEnd();
progressReporter.logReport();
log.info("Completed the indexing in {}", indexerWatch);
copyOnWriteStore.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
indexerSupport.postIndexWork(copyOnWriteStore);
}
use of org.apache.jackrabbit.oak.plugins.index.progress.IndexingProgressReporter in project jackrabbit-oak by apache.
the class DocumentStoreIndexerIT method bundling.
@Test
public void bundling() throws Exception {
MongoConnection c = getConnection();
DocumentNodeStoreBuilder<?> docBuilder = builderProvider.newBuilder().setMongoDB(c.getMongoClient(), c.getDBName());
DocumentNodeStore store = docBuilder.build();
Whiteboard wb = new DefaultWhiteboard();
MongoDocumentStore ds = (MongoDocumentStore) docBuilder.getDocumentStore();
Registration r1 = wb.register(MongoDocumentStore.class, ds, emptyMap());
wb.register(StatisticsProvider.class, StatisticsProvider.NOOP, emptyMap());
configureIndex(store);
configureBundling(store);
NodeBuilder builder = store.getRoot().builder();
NodeBuilder appNB = newNode("app:Asset");
createChild(appNB, "jcr:content", // not bundled
"jcr:content/comments", "jcr:content/metadata", // not bundled
"jcr:content/metadata/xmp", // includes all
"jcr:content/renditions", "jcr:content/renditions/original", "jcr:content/renditions/original/jcr:content");
builder.child("test").setChildNode("book.jpg", appNB.getNodeState());
store.merge(builder, EmptyHook.INSTANCE, CommitInfo.EMPTY);
// Check that bundling is working
assertNull(getNodeDocument(ds, "/test/book.jpg/jcr:content"));
assertNotNull(getNodeDocument(ds, "/test/book.jpg"));
String checkpoint = store.checkpoint(100000);
// Shut down this store and restart in readOnly mode
store.dispose();
r1.unregister();
MongoConnection c2 = connectionFactory.getConnection();
DocumentNodeStoreBuilder<?> docBuilderRO = builderProvider.newBuilder().setReadOnlyMode().setMongoDB(c2.getMongoClient(), c2.getDBName());
ds = (MongoDocumentStore) docBuilderRO.getDocumentStore();
store = docBuilderRO.build();
wb.register(MongoDocumentStore.class, ds, emptyMap());
ExtendedIndexHelper helper = new ExtendedIndexHelper(store, store.getBlobStore(), wb, temporaryFolder.newFolder(), temporaryFolder.newFolder(), asList(TEST_INDEX_PATH));
IndexerSupport support = new IndexerSupport(helper, checkpoint);
CollectingIndexer testIndexer = new CollectingIndexer(p -> p.startsWith("/test"));
DocumentStoreIndexer index = new DocumentStoreIndexer(helper, support) {
@Override
protected CompositeIndexer prepareIndexers(NodeStore nodeStore, NodeBuilder builder, IndexingProgressReporter progressReporter) {
return new CompositeIndexer(asList(testIndexer));
}
};
index.reindex();
assertThat(testIndexer.paths, containsInAnyOrder("/test", "/test/book.jpg", "/test/book.jpg/jcr:content", "/test/book.jpg/jcr:content/comments", "/test/book.jpg/jcr:content/metadata", "/test/book.jpg/jcr:content/metadata/xmp", "/test/book.jpg/jcr:content/renditions", "/test/book.jpg/jcr:content/renditions/original", "/test/book.jpg/jcr:content/renditions/original/jcr:content"));
store.dispose();
}
Aggregations