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:08:00 UTC
svn commit: r1810637 - in /jackrabbit/oak/trunk/oak-lucene/src:
main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/
test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/
Author: chetanm
Date: Tue Oct 3 05:07:59 2017
New Revision: 1810637
URL: http://svn.apache.org/viewvc?rev=1810637&view=rev
Log:
OAK-6535 - Synchronous Lucene Property Indexes
Ensure that property index lookup returns absolute path
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookup.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookupTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexStorageTest.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java
Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookup.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookup.java?rev=1810637&r1=1810636&r2=1810637&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookup.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookup.java Tue Oct 3 05:07:59 2017
@@ -32,6 +32,8 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.spi.query.Filter;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import static com.google.common.collect.Iterables.transform;
+import static org.apache.jackrabbit.oak.commons.PathUtils.isAbsolute;
import static org.apache.jackrabbit.oak.plugins.index.lucene.property.HybridPropertyIndexUtil.PROPERTY_INDEX;
import static org.apache.jackrabbit.oak.plugins.index.lucene.property.HybridPropertyIndexUtil.PROP_HEAD_BUCKET;
import static org.apache.jackrabbit.oak.plugins.index.lucene.property.HybridPropertyIndexUtil.PROP_PREVIOUS_BUCKET;
@@ -46,6 +48,16 @@ public class HybridPropertyIndexLookup {
this.indexState = indexState;
}
+ /**
+ * Performs query based on provided property restriction
+ *
+ * @param filter filter from the query being performed
+ * @param pd property definition as per index definition
+ * @param propertyName actual property name which may or may not be same as
+ * property name in property restriction
+ * @param restriction property restriction matching given property
+ * @return iterable consisting of absolute paths as per index content
+ */
public Iterable<String> query(Filter filter, PropertyDefinition pd,
String propertyName, Filter.PropertyRestriction restriction) {
//The propertyName may differ from name in restriction. For e.g. for relative properties
@@ -73,11 +85,14 @@ public class HybridPropertyIndexLookup {
//TODO Check for non root indexes
String indexName = indexPath + "(" + propertyName + ")";
+ Iterable<String> result;
if (pd.unique) {
- return queryUnique(filter, indexName, propIndexRootNode, propIdxNodeName, encodedValues);
+ result = queryUnique(filter, indexName, propIndexRootNode, propIdxNodeName, encodedValues);
} else {
- return querySimple(filter, indexName, propIndexNode, encodedValues);
+ result = querySimple(filter, indexName, propIndexNode, encodedValues);
}
+
+ return transform(result, path -> isAbsolute(path) ? path : "/" + path);
}
private static Iterable<String> queryUnique(Filter filter, String indexName, NodeState propIndexRootNode,
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookupTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookupTest.java?rev=1810637&r1=1810636&r2=1810637&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookupTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexLookupTest.java Tue Oct 3 05:07:59 2017
@@ -97,6 +97,23 @@ public class HybridPropertyIndexLookupTe
assertThat(query(f, "foo", "jcr:content/foo"), containsInAnyOrder("/a"));
}
+ @Test
+ public void pathResultAbsolutePath() throws Exception{
+ defnb.indexRule("nt:base").property("foo").sync();
+
+ propertyUpdated("/a", "foo", "bar");
+
+ String propertyName = "foo";
+ FilterImpl filter = createFilter();
+ filter.restrictProperty("foo", Operator.EQUAL, newString("bar"));
+
+ HybridPropertyIndexLookup lookup = new HybridPropertyIndexLookup(indexPath, builder.getNodeState());
+ Iterable<String> paths = lookup.query(filter, pd(propertyName), propertyName,
+ filter.getPropertyRestriction(propertyName));
+
+ assertThat(ImmutableList.copyOf(paths), containsInAnyOrder("/a"));
+ }
+
private void propertyUpdated(String nodePath, String propertyRelativeName, String value){
callback.propertyUpdated(nodePath, propertyRelativeName, pd(propertyRelativeName),
null, createProperty(PathUtils.getName(propertyRelativeName), value));
@@ -116,8 +133,7 @@ public class HybridPropertyIndexLookupTe
HybridPropertyIndexLookup lookup = new HybridPropertyIndexLookup(indexPath, builder.getNodeState());
Iterable<String> paths = lookup.query(filter, pd(propertyName), propertyName,
filter.getPropertyRestriction(propertyRestrictionName));
- Cursor c = Cursors.newPathCursor(paths, new QueryEngineSettings());
- return ImmutableList.copyOf(Iterators.transform(c, r -> r.getPath()));
+ return ImmutableList.copyOf(paths);
}
private PropertyDefinition pd(String propName){
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexStorageTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexStorageTest.java?rev=1810637&r1=1810636&r2=1810637&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexStorageTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexStorageTest.java Tue Oct 3 05:07:59 2017
@@ -208,8 +208,7 @@ public class HybridPropertyIndexStorageT
HybridPropertyIndexLookup lookup = new HybridPropertyIndexLookup(indexPath, builder.getNodeState());
FilterImpl filter = createFilter(root, "nt:base");
Iterable<String> paths = lookup.query(filter, pd(propertyName), propertyName, value);
- Cursor c = Cursors.newPathCursor(paths, new QueryEngineSettings());
- return ImmutableList.copyOf(Iterators.transform(c, r -> r.getPath()));
+ return ImmutableList.copyOf(paths);
}
private PropertyIndexUpdateCallback newCallback(){
Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java?rev=1810637&r1=1810636&r2=1810637&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/PropertyIndexCleanerTest.java Tue Oct 3 05:07:59 2017
@@ -241,8 +241,7 @@ public class PropertyIndexCleanerTest {
FilterImpl filter = FilterImpl.newTestInstance();
Iterable<String> paths = lookup.query(filter, pd(indexPath, propertyName), propertyName,
PropertyValues.newString(value));
- Cursor c = Cursors.newPathCursor(paths, new QueryEngineSettings());
- return ImmutableList.copyOf(Iterators.transform(c, r -> r.getPath()));
+ return ImmutableList.copyOf(paths);
}
private static class SimpleAsyncInfoService implements AsyncIndexInfoService {