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 2017/10/03 05:06:35 UTC
svn commit: r1810632 - in /jackrabbit/oak/trunk/oak-lucene/src:
main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
Author: chetanm
Date: Tue Oct 3 05:06:34 2017
New Revision: 1810632
URL: http://svn.apache.org/viewvc?rev=1810632&view=rev
Log:
OAK-6535 - Synchronous Lucene Property Indexes
add support for determining if given IndexDefinition has sync property
definitions
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java?rev=1810632&r1=1810631&r2=1810632&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinition.java Tue Oct 3 05:06:34 2017
@@ -266,6 +266,8 @@ public final class IndexDefinition imple
@Nullable
private final String[] indexTags;
+ private final boolean syncPropertyIndexes;
+
//~--------------------------------------------------------< Builder >
public static Builder newBuilder(NodeState root, NodeState defn, String indexPath){
@@ -402,6 +404,7 @@ public final class IndexDefinition imple
this.spellcheckEnabled = evaluateSpellcheckEnabled();
this.nrtIndexMode = supportsNRTIndexing(defn);
this.syncIndexMode = supportsSyncIndexing(defn);
+ this.syncPropertyIndexes = definedRules.stream().anyMatch(ir -> !ir.syncProps.isEmpty());
}
public NodeState getDefinitionNodeState() {
@@ -555,6 +558,10 @@ public final class IndexDefinition imple
return syncIndexMode;
}
+ public boolean hasSyncPropertyDefinitions() {
+ return syncPropertyIndexes;
+ }
+
/**
* Check if the index definition is fresh of some index has happened
*
@@ -871,6 +878,7 @@ public final class IndexDefinition imple
private final List<PropertyDefinition> functionRestrictions;
private final List<PropertyDefinition> notNullCheckEnabledProperties;
private final List<PropertyDefinition> nodeScopeAnalyzedProps;
+ private final List<PropertyDefinition> syncProps;
private final boolean indexesAllNodesOfMatchingType;
private final boolean nodeNameIndexed;
@@ -897,9 +905,10 @@ public final class IndexDefinition imple
List<PropertyDefinition> functionRestrictions = newArrayList();
List<PropertyDefinition> existentProperties = newArrayList();
List<PropertyDefinition> nodeScopeAnalyzedProps = newArrayList();
+ List<PropertyDefinition> syncProps = newArrayList();
List<Aggregate.Include> propIncludes = newArrayList();
this.propConfigs = collectPropConfigs(config, namePatterns, propIncludes, nonExistentProperties,
- existentProperties, nodeScopeAnalyzedProps, functionRestrictions);
+ existentProperties, nodeScopeAnalyzedProps, functionRestrictions, syncProps);
this.propAggregate = new Aggregate(nodeTypeName, propIncludes);
this.aggregate = combine(propAggregate, nodeTypeName);
@@ -913,6 +922,7 @@ public final class IndexDefinition imple
this.propertyIndexEnabled = hasAnyPropertyIndexConfigured();
this.indexesAllNodesOfMatchingType = areAlMatchingNodeByTypeIndexed();
this.nodeNameIndexed = evaluateNodeNameIndexed(config);
+ this.syncProps = ImmutableList.copyOf(syncProps);
validateRuleDefinition();
}
@@ -942,6 +952,7 @@ public final class IndexDefinition imple
this.nodeFullTextIndexed = aggregate.hasNodeAggregates() || original.nodeFullTextIndexed;
this.indexesAllNodesOfMatchingType = areAlMatchingNodeByTypeIndexed();
this.nodeNameIndexed = original.nodeNameIndexed;
+ this.syncProps = original.syncProps;
}
/**
@@ -1109,7 +1120,8 @@ public final class IndexDefinition imple
List<PropertyDefinition> nonExistentProperties,
List<PropertyDefinition> existentProperties,
List<PropertyDefinition> nodeScopeAnalyzedProps,
- List<PropertyDefinition> functionRestrictions) {
+ List<PropertyDefinition> functionRestrictions,
+ List<PropertyDefinition> syncProps) {
Map<String, PropertyDefinition> propDefns = newHashMap();
NodeState propNode = config.getChildNode(LuceneIndexConstants.PROP_NODE);
@@ -1165,6 +1177,10 @@ public final class IndexDefinition imple
&& !pd.isRegexp){
nodeScopeAnalyzedProps.add(pd);
}
+
+ if (pd.sync) {
+ syncProps.add(pd);
+ }
}
}
return ImmutableMap.copyOf(propDefns);
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java?rev=1810632&r1=1810631&r2=1810632&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexDefinitionTest.java Tue Oct 3 05:06:34 2017
@@ -83,6 +83,7 @@ public class IndexDefinitionTest {
IndexDefinition idxDefn = new IndexDefinition(root, builder.getNodeState(), "/foo");
assertTrue(idxDefn.saveDirListing());
assertFalse(idxDefn.isNRTIndexingEnabled());
+ assertFalse(idxDefn.hasSyncPropertyDefinitions());
}
@Test
@@ -986,6 +987,15 @@ public class IndexDefinitionTest {
assertTrue(defn.getApplicableIndexingRule("nt:base").getConfig("foo").unique);
}
+ @Test
+ public void syncPropertyDefinitions() throws Exception{
+ IndexDefinitionBuilder defnb = new IndexDefinitionBuilder();
+ defnb.indexRule("nt:base").property("foo").propertyIndex().sync();
+
+ IndexDefinition defn = IndexDefinition.newBuilder(root, defnb.build(), "/foo").build();
+ assertTrue(defn.hasSyncPropertyDefinitions());
+ }
+
//TODO indexesAllNodesOfMatchingType - with nullCheckEnabled
private static IndexingRule getRule(IndexDefinition defn, String typeName){