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");