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/12 08:50:49 UTC

svn commit: r1773752 - in /jackrabbit/oak/trunk/oak-lucene/src: main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/IndexDefinitionBuilder.java test/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/IndexDefinitionBuilderTest.java

Author: chetanm
Date: Mon Dec 12 08:50:48 2016
New Revision: 1773752

URL: http://svn.apache.org/viewvc?rev=1773752&view=rev
Log:
OAK-5271 - IndexDefinitionBuilder should ignore safe change in "async" for determining reindex flag value

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/IndexDefinitionBuilder.java
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/IndexDefinitionBuilderTest.java

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/IndexDefinitionBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/IndexDefinitionBuilder.java?rev=1773752&r1=1773751&r2=1773752&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/IndexDefinitionBuilder.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/IndexDefinitionBuilder.java Mon Dec 12 08:50:48 2016
@@ -28,6 +28,7 @@ import javax.jcr.RepositoryException;
 
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
+import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.PathUtils;
@@ -133,11 +134,11 @@ public final class IndexDefinitionBuilde
         if (reindexRequired){
             return true;
         }
-        return !EqualsDiff.equals(initial, builder.getNodeState());
+        return !SelectiveEqualsDiff.equals(initial, builder.getNodeState());
     }
 
     private void setReindexFlagIfRequired(){
-        if (!reindexRequired && !EqualsDiff.equals(initial, builder.getNodeState()) && autoManageReindexFlag){
+        if (!reindexRequired && !SelectiveEqualsDiff.equals(initial, builder.getNodeState()) && autoManageReindexFlag){
             tree.setProperty("reindex", true);
             reindexRequired = true;
         }
@@ -448,6 +449,30 @@ public final class IndexDefinitionBuilde
         return child;
     }
 
+    static class SelectiveEqualsDiff extends EqualsDiff {
+        public static boolean equals(NodeState before, NodeState after) {
+            return before.exists() == after.exists()
+                    && after.compareAgainstBaseState(before, new SelectiveEqualsDiff());
+        }
+
+        @Override
+        public boolean propertyChanged(PropertyState before, PropertyState after) {
+            if (IndexConstants.ASYNC_PROPERTY_NAME.equals(before.getName())){
+                Set<String> asyncBefore = getAsyncValuesWithoutNRT(before);
+                Set<String> asyncAfter = getAsyncValuesWithoutNRT(after);
+                return asyncBefore.equals(asyncAfter);
+            }
+            return false;
+        }
+
+        private Set<String> getAsyncValuesWithoutNRT(PropertyState state){
+            Set<String> async = Sets.newHashSet(state.getValue(Type.STRINGS));
+            async.remove(IndexConstants.INDEXING_MODE_NRT);
+            async.remove(IndexConstants.INDEXING_MODE_SYNC);
+            return async;
+        }
+    }
+
     static String getSafePropName(String relativePropName) {
         String propName = PathUtils.getName(relativePropName);
         int indexOfColon = propName.indexOf(':');

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/IndexDefinitionBuilderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/IndexDefinitionBuilderTest.java?rev=1773752&r1=1773751&r2=1773752&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/IndexDefinitionBuilderTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/IndexDefinitionBuilderTest.java Mon Dec 12 08:50:48 2016
@@ -229,6 +229,24 @@ public class IndexDefinitionBuilderTest
     }
 
     @Test
+    public void reindexAndAsyncFlagChange() throws Exception{
+        builder.async("async", IndexConstants.INDEXING_MODE_NRT);
+
+        nodeBuilder = builder.build().builder();
+        nodeBuilder.setProperty(REINDEX_PROPERTY_NAME, false);
+
+        NodeState oldState = nodeBuilder.getNodeState();
+
+        builder = new IndexDefinitionBuilder(nodeBuilder);
+        builder.async("async", IndexConstants.INDEXING_MODE_SYNC);
+        assertFalse(builder.build().getBoolean(REINDEX_PROPERTY_NAME));
+
+        builder = new IndexDefinitionBuilder(oldState.builder());
+        builder.async("fulltext-async", IndexConstants.INDEXING_MODE_SYNC);
+        assertTrue(builder.build().getBoolean(REINDEX_PROPERTY_NAME));
+    }
+
+    @Test
     public void propRuleCustomName() throws Exception{
         builder.indexRule("nt:base").property("foo").property("bar");
         builder.indexRule("nt:base").property("fooProp", "foo2");