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:08 UTC

svn commit: r1810630 - /jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexStorageTest.java

Author: chetanm
Date: Tue Oct  3 05:06:07 2017
New Revision: 1810630

URL: http://svn.apache.org/viewvc?rev=1810630&view=rev
Log:
OAK-6535 - Synchronous Lucene Property Indexes

Add test for bucket rollover effect on query result

Modified:
    jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/property/HybridPropertyIndexStorageTest.java

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=1810630&r1=1810629&r2=1810630&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:06:07 2017
@@ -40,12 +40,16 @@ import org.apache.jackrabbit.oak.spi.sta
 import org.junit.Test;
 
 import static org.apache.jackrabbit.oak.InitialContent.INITIAL_CONTENT;
+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;
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 import static org.apache.jackrabbit.oak.plugins.memory.PropertyStates.createProperty;
 import static org.apache.jackrabbit.oak.plugins.memory.PropertyValues.newString;
 import static org.hamcrest.Matchers.containsInAnyOrder;
 import static org.hamcrest.Matchers.empty;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
 
 public class HybridPropertyIndexStorageTest {
@@ -153,6 +157,48 @@ public class HybridPropertyIndexStorageT
         assertThat(query("foo", newString("bar")), empty());
     }
 
+    //~---------------------------------------< buckets >
+
+    @Test
+    public void bucketSwitch() throws Exception{
+        String propName = "foo";
+        defnb.indexRule("nt:base").property(propName).sync();
+
+        newCallback().propertyUpdated("/a", propName, pd(propName),
+                null, createProperty(propName, "bar"));
+
+        assertThat(query(propName, newString("bar")), containsInAnyOrder("/a"));
+
+        switchBucket(propName);
+
+        newCallback().propertyUpdated("/b", propName, pd(propName),
+                null, createProperty(propName, "bar"));
+
+        assertThat(query(propName, newString("bar")), containsInAnyOrder("/a", "/b"));
+
+        switchBucket(propName);
+
+        newCallback().propertyUpdated("/c", propName, pd(propName),
+                null, createProperty(propName, "bar"));
+
+        //Now /a should not come as its in 3rd bucket and we only consider head and previous buckets
+        assertThat(query(propName, newString("bar")), containsInAnyOrder("/b", "/c"));
+    }
+
+    private void switchBucket(String propertyName) {
+        NodeBuilder propertyIndex = builder.child(PROPERTY_INDEX);
+        NodeBuilder idx = propertyIndex.child(HybridPropertyIndexUtil.getNodeName(propertyName));
+
+        String head = idx.getString(HybridPropertyIndexUtil.PROP_HEAD_BUCKET);
+        assertNotNull(head);
+
+        int id = Integer.parseInt(head);
+        idx.setProperty(PROP_PREVIOUS_BUCKET, head);
+        idx.setProperty(PROP_HEAD_BUCKET, String.valueOf(id + 1));
+
+        builder = builder.getNodeState().builder();
+    }
+
     private List<String> query(String propertyName, PropertyValue value) {
         HybridPropertyIndexLookup lookup = new HybridPropertyIndexLookup(indexPath, builder.getNodeState());
         FilterImpl filter = createFilter(root, "nt:base");