Author: chetanm
Date: Fri Dec 15 09:38:21 2017
New Revision: 1818252

URL: http://svn.apache.org/viewvc?rev=1818252&view=rev
Log:
OAK-6353 - Use Document order traversal for reindexing performed on 
DocumentNodeStore setups

Reconfigure the progress reporter and also track the entryCount in FlatFileStore

Modified:
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/DocumentStoreIndexer.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileNodeStoreBuilder.java
    
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStore.java

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/DocumentStoreIndexer.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/DocumentStoreIndexer.java?rev=1818252&r1=1818251&r2=1818252&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/DocumentStoreIndexer.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/DocumentStoreIndexer.java
 Fri Dec 15 09:38:21 2017
@@ -63,7 +63,7 @@ public class DocumentStoreIndexer implem
     private final IndexHelper indexHelper;
     private final List<NodeStateIndexerProvider> indexerProviders;
     private final IndexerSupport indexerSupport;
-    private final IndexingProgressReporter progressReporter =
+    private IndexingProgressReporter progressReporter =
             new IndexingProgressReporter(IndexUpdateCallback.NOOP, 
NodeTraversalCallback.NOOP);
 
     public DocumentStoreIndexer(IndexHelper indexHelper, IndexerSupport 
indexerSupport) throws IOException {
@@ -108,6 +108,8 @@ public class DocumentStoreIndexer implem
                 .build();
         closer.register(flatFileStore);
 
+        reconfigureReporter(flatFileStore);
+
         progressReporter.reindexingTraversalStart("/");
 
         for (NodeStateEntry entry : flatFileStore) {
@@ -128,18 +130,41 @@ public class DocumentStoreIndexer implem
     }
 
     private void configureEstimators() {
+        configureTraversalRateEstimator(progressReporter);
+        long nodesCount = getEstimatedDocumentCount();
+        if (nodesCount > 0) {
+            progressReporter.setNodeCountEstimator((String basePath, 
Set<String> indexPaths) -> nodesCount);
+            log.info("Estimated number of documents in Mongo are {}", 
nodesCount);
+        }
+    }
+
+    private void reconfigureReporter(FlatFileStore flatFileStore) {
+        progressReporter =
+                new IndexingProgressReporter(IndexUpdateCallback.NOOP, 
NodeTraversalCallback.NOOP);
+        configureTraversalRateEstimator(progressReporter);
+        long entryCount = flatFileStore.getEntryCount();
+        if (entryCount > 0) {
+            progressReporter.setNodeCountEstimator((String basePath, 
Set<String> indexPaths) -> entryCount);
+            log.info("Estimated number of entries in flat file store are {}", 
entryCount);
+        } else {
+            log.info("Number of entries in flat file store are unknown");
+        }
+    }
+
+    private void configureTraversalRateEstimator(IndexingProgressReporter 
progressReporter) {
         StatisticsProvider statsProvider = indexHelper.getStatisticsProvider();
         if (statsProvider instanceof MetricStatisticsProvider) {
             MetricRegistry registry = ((MetricStatisticsProvider) 
statsProvider).getRegistry();
             progressReporter.setTraversalRateEstimator(new 
MetricRateEstimator("async", registry));
         }
+    }
 
+    private long getEstimatedDocumentCount(){
         MongoConnection mongoConnection = 
indexHelper.getService(MongoConnection.class);
         if (mongoConnection != null) {
-            long nodesCount = 
mongoConnection.getDB().getCollection("nodes").count();
-            progressReporter.setNodeCountEstimator((String basePath, 
Set<String> indexPaths) -> nodesCount);
-            log.info("Estimated number of documents in Mongo are {}", 
nodesCount);
+            return mongoConnection.getDB().getCollection("nodes").count();
         }
+        return 0;
     }
 
     @Override

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileNodeStoreBuilder.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileNodeStoreBuilder.java?rev=1818252&r1=1818251&r2=1818252&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileNodeStoreBuilder.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileNodeStoreBuilder.java
 Fri Dec 15 09:38:21 2017
@@ -46,6 +46,7 @@ public class FlatFileNodeStoreBuilder {
     private final File workDir;
     private Iterable<String> preferredPathElements = Collections.emptySet();
     private BlobStore blobStore;
+    private long entryCount = 0;
 
     private boolean useZip = Boolean.getBoolean(OAK_INDEXER_USE_ZIP);
     private boolean deleteOriginal = 
Boolean.parseBoolean(System.getProperty(OAK_INDEXER_DELETE_ORIGINAL, "true"));
@@ -68,7 +69,11 @@ public class FlatFileNodeStoreBuilder {
 
     public FlatFileStore build() throws IOException {
         //TODO Check not null blobStore
-        return new FlatFileStore(createdSortedStoreFile(), new 
NodeStateEntryReader(blobStore), size(preferredPathElements));
+        FlatFileStore store = new FlatFileStore(createdSortedStoreFile(), new 
NodeStateEntryReader(blobStore), size(preferredPathElements));
+        if (entryCount > 0) {
+            store.setEntryCount(entryCount);
+        }
+        return store;
     }
 
     private File createdSortedStoreFile() throws IOException {
@@ -121,9 +126,10 @@ public class FlatFileNodeStoreBuilder {
         ) {
             for (NodeStateEntry e : nodeStates) {
                 entryWriter.write(e);
+                entryCount++;
             }
         }
-        log.info("Dumped nodestates in json format in {}", sw);
+        log.info("Dumped {} nodestates in json format in {}",entryCount, sw);
         return file;
     }
 

Modified: 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStore.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStore.java?rev=1818252&r1=1818251&r2=1818252&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStore.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/index/indexer/document/flatfile/FlatFileStore.java
 Fri Dec 15 09:38:21 2017
@@ -38,6 +38,7 @@ public class FlatFileStore implements It
     private final File storeFile;
     private final NodeStateEntryReader entryReader;
     private final int checkChildLimit;
+    private long entryCount = -1;
 
     public FlatFileStore(File storeFile, NodeStateEntryReader entryReader, int 
checkChildLimit) {
         this.storeFile = storeFile;
@@ -45,6 +46,14 @@ public class FlatFileStore implements It
         this.checkChildLimit = checkChildLimit;
     }
 
+    public long getEntryCount() {
+        return entryCount;
+    }
+
+    public void setEntryCount(long entryCount) {
+        this.entryCount = entryCount;
+    }
+
     @Override
     public Iterator<NodeStateEntry> iterator() {
         return new FlatFileStoreIterator(createBaseIterator(), 
checkChildLimit);


Reply via email to