Author: chetanm
Date: Tue Jul 25 07:00:12 2017
New Revision: 1802891

URL: http://svn.apache.org/viewvc?rev=1802891&view=rev
Log:
OAK-6487 - IndexUpdate should not reindex newly imported index definitions

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java?rev=1802891&r1=1802890&r2=1802891&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
 Tue Jul 25 07:00:12 2017
@@ -219,8 +219,11 @@ public class IndexUpdate implements Edit
             return !rootState.ignoreReindexFlags;
         }
         // reindex in the case this is a new node, even though the reindex flag
-        // might be set to 'false' (possible via content import)
-        boolean result = 
!before.getChildNode(INDEX_DEFINITIONS_NAME).hasChildNode(name);
+        // might be set to 'false' (possible via content import).
+        // However if its already indexed i.e. has some hidden nodes 
(containing hidden data)
+        // then no need to reindex
+        boolean result = 
!before.getChildNode(INDEX_DEFINITIONS_NAME).hasChildNode(name)
+                && !hasAnyHiddenNodes(definition);
         if (result) {
             log.info("Found a new index node [{}]. Reindexing is requested",
                     name);
@@ -228,6 +231,15 @@ public class IndexUpdate implements Edit
         return result;
     }
 
+    private static boolean hasAnyHiddenNodes(NodeBuilder builder){
+        for (String name : builder.getChildNodeNames()) {
+            if (NodeStateUtils.isHidden(name)){
+                return true;
+            }
+        }
+        return false;
+    }
+
     private void collectIndexEditors(NodeBuilder definitions,
             NodeState before) throws CommitFailedException {
         for (String name : definitions.getChildNodeNames()) {

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java?rev=1802891&r1=1802890&r2=1802891&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
 Tue Jul 25 07:00:12 2017
@@ -234,6 +234,26 @@ public class IndexUpdateTest {
     }
 
     @Test
+    public void testReindexAuto_ImportCase() throws Exception{
+        NodeState before = builder.getNodeState();
+
+        NodeBuilder idx = 
createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME),
+                "rootIndex", false, false, ImmutableSet.of("foo"), null);
+        idx.child(":index");
+
+        NodeState after = builder.getNodeState();
+
+        NodeState indexed = HOOK.processCommit(before, after, 
CommitInfo.EMPTY);
+        NodeState ns = checkPathExists(indexed, INDEX_DEFINITIONS_NAME,
+                "rootIndex");
+
+        assertEquals(0, ns.getLong("reindexCount"));
+        PropertyState ps = ns.getProperty(REINDEX_PROPERTY_NAME);
+        assertNotNull(ps);
+        assertFalse(ps.getValue(Type.BOOLEAN));
+    }
+
+    @Test
     public void testReindexHidden() throws Exception {
         NodeState before = EmptyNodeState.EMPTY_NODE;
         NodeBuilder builder = before.builder();


Reply via email to