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 {