Author: chetanm Date: Fri Oct 20 05:48:26 2017 New Revision: 1812709 URL: http://svn.apache.org/viewvc?rev=1812709&view=rev Log: OAK-6849 - Avoid creating empty properties node under indexRules
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=1812709&r1=1812708&r2=1812709&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 Fri Oct 20 05:48:26 2017 @@ -188,14 +188,12 @@ public final class IndexDefinitionBuilde public static class IndexRule { private final Tree indexRule; - private final Tree propsTree; private final String ruleName; private final Map<String, PropertyRule> props = Maps.newHashMap(); private final Set<String> propNodeNames = Sets.newHashSet(); private IndexRule(Tree indexRule, String type) { this.indexRule = indexRule; - this.propsTree = getOrCreateChild(indexRule, LuceneIndexConstants.PROP_NODE); this.ruleName = type; loadExisting(); } @@ -235,7 +233,7 @@ public final class IndexDefinitionBuilde if (propDefnNodeName == null){ propDefnNodeName = createPropNodeName(name, regex); } - propTree = getOrCreateChild(propsTree, propDefnNodeName); + propTree = getOrCreateChild(getPropsTree(), propDefnNodeName); } propRule = new PropertyRule(this, propTree, name, regex); props.put(name, propRule); @@ -244,7 +242,11 @@ public final class IndexDefinitionBuilde } private void loadExisting() { - for (Tree tree : propsTree.getChildren()){ + if (!indexRule.hasChild(LuceneIndexConstants.PROP_NAME)) { + return; + } + + for (Tree tree : getPropsTree().getChildren()){ if (!tree.hasProperty(LuceneIndexConstants.PROP_NAME)){ continue; } @@ -259,7 +261,7 @@ public final class IndexDefinitionBuilde } private Tree findExisting(String name) { - for (Tree tree : propsTree.getChildren()){ + for (Tree tree : getPropsTree().getChildren()){ if (name.equals(tree.getProperty(LuceneIndexConstants.PROP_NAME).getValue(Type.STRING))){ return tree; } @@ -286,6 +288,10 @@ public final class IndexDefinitionBuilde public boolean hasPropertyRule(String propName){ return findExisting(propName) != null; } + + private Tree getPropsTree() { + return getOrCreateChild(indexRule, LuceneIndexConstants.PROP_NODE); + } } public static class PropertyRule { 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=1812709&r1=1812708&r2=1812709&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 Fri Oct 20 05:48:26 2017 @@ -304,4 +304,13 @@ public class IndexDefinitionBuilderTest assertTrue(state.getBoolean(LuceneIndexConstants.PROP_INDEX_NODE_TYPE)); assertTrue(ntFileRule.getBoolean(LuceneIndexConstants.PROP_SYNC)); } + + @Test + public void noPropertiesNodeForEmptyRule() throws Exception{ + builder.nodeTypeIndex(); + builder.indexRule("nt:file").sync(); + + NodeState state = builder.build(); + assertFalse(NodeStateUtils.getNode(state, "/indexRules/nt:file/properties").exists()); + } } \ No newline at end of file