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");