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 2016/12/08 06:17:20 UTC

svn commit: r1773187 - in /jackrabbit/oak/trunk/oak-lucene/src: main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeTest.java

Author: chetanm
Date: Thu Dec  8 06:17:20 2016
New Revision: 1773187

URL: http://svn.apache.org/viewvc?rev=1773187&view=rev
Log:
OAK-5218 - Enable use of hybrid index before first async indexing is done

Rely on :async node to detect if its a fresh setup we no async indexing run so far and only then make use of NRT index to answer queries.

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeTest.java

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java?rev=1773187&r1=1773186&r2=1773187&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNode.java Thu Dec  8 06:17:20 2016
@@ -32,6 +32,7 @@ import javax.annotation.Nullable;
 
 import com.google.common.collect.Iterables;
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
 import org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.NRTIndex;
 import org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.NRTIndexFactory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.hybrid.ReaderRefreshPolicy;
@@ -48,6 +49,12 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 public class IndexNode {
+    /**
+     * Name of the hidden node under which information about the checkpoints
+     * seen and indexed by each async indexer is kept.
+     */
+    static final String ASYNC = ":async";
+
     private static final AtomicInteger INDEX_NODE_COUNTER = new AtomicInteger();
 
     static IndexNode open(String indexPath, NodeState root, NodeState defnNodeState,
@@ -56,12 +63,16 @@ public class IndexNode {
         IndexDefinition definition = new IndexDefinition(root, defnNodeState, indexPath);
         List<LuceneIndexReader> readers = readerFactory.createReaders(definition, defnNodeState, indexPath);
         NRTIndex nrtIndex = nrtFactory != null ? nrtFactory.createIndex(definition) : null;
-        if (!readers.isEmpty() || (nrtIndex != null && !IndexDefinition.hasPersistedIndex(defnNodeState))){
+        if (!readers.isEmpty() || (nrtIndex != null && !hasAsyncIndexerRun(root))){
             return new IndexNode(PathUtils.getName(indexPath), definition, readers, nrtIndex);
         }
         return null;
     }
 
+    static boolean hasAsyncIndexerRun(NodeState root) {
+        return root.hasChildNode(ASYNC);
+    }
+
     private static final Logger log = LoggerFactory.getLogger(IndexNode.class);
 
     private final List<LuceneIndexReader> readers;

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeTest.java?rev=1773187&r1=1773186&r2=1773187&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexNodeTest.java Thu Dec  8 06:17:20 2016
@@ -92,9 +92,9 @@ public class IndexNodeTest {
     @Test
     public void nullIndex_NonFreshIndex() throws Exception{
         NodeBuilder builder = createNRTIndex().builder();
-        //Create a hidden node to indicate that its not a fresh index
-        builder.child(":status");
-        assertNull(IndexNode.open("/foo", root, builder.getNodeState(), readerFactory, nrtFactory));
+        NodeBuilder rootBuilder = root.builder();
+        rootBuilder.child(IndexNode.ASYNC);
+        assertNull(IndexNode.open("/foo", rootBuilder.getNodeState(), builder.getNodeState(), readerFactory, nrtFactory));
     }
 
     private static NodeState createNRTIndex(){