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 {


Reply via email to