Author: chetanm
Date: Tue Oct 3 05:05:24 2017
New Revision: 1810627
URL: http://svn.apache.org/viewvc?rev=1810627&view=rev
Log:
OAK-6535 - Synchronous Lucene Property Indexes
Enable support for PropertyUpdateCallback for relative properties
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/Aggregate.java
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor2Test.java
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/Aggregate.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/Aggregate.java?rev=1810627&r1=1810626&r2=1810627&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/Aggregate.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/Aggregate.java
Tue Oct 3 05:05:24 2017
@@ -411,6 +411,10 @@ class Aggregate {
public String toString() {
return propertyDefinition.toString();
}
+
+ public PropertyDefinition getPropertyDefinition() {
+ return propertyDefinition;
+ }
}
public static interface ResultCollector {
@@ -464,6 +468,8 @@ class Aggregate {
public interface AggregateRoot {
void markDirty();
+
+ String getPath();
}
public static class Matcher {
@@ -609,6 +615,19 @@ class Aggregate {
rootState.root.markDirty();
}
+ public String getRootPath() {
+ return rootState.root.getPath();
+ }
+
+ public String getMatchedPath(){
+ checkArgument(status == Status.MATCH_FOUND);
+ return currentPath;
+ }
+
+ public Include getCurrentInclude(){
+ return currentInclude;
+ }
+
public Status getStatus() {
return status;
}
Modified:
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java?rev=1810627&r1=1810626&r2=1810627&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java
Tue Oct 3 05:05:24 2017
@@ -366,7 +366,17 @@ public class LuceneIndexEditor implement
}
}
- //TODO Support for relative props
+ for (Matcher m : matcherState.matched) {
+ if (m.aggregatesProperty(propertyName)) {
+ Aggregate.Include i = m.getCurrentInclude();
+ if (i instanceof Aggregate.PropertyInclude) {
+ PropertyDefinition pd = ((Aggregate.PropertyInclude)
i).getPropertyDefinition();
+ String propertyRelativePath =
PathUtils.concat(m.getMatchedPath(), propertyName);
+
+ callback.propertyUpdated(m.getRootPath(),
propertyRelativePath, pd, before, after);
+ }
+ }
+ }
}
private IndexDefinition getDefinition() {
Modified:
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor2Test.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor2Test.java?rev=1810627&r1=1810626&r2=1810627&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor2Test.java
(original)
+++
jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor2Test.java
Tue Oct 3 05:05:24 2017
@@ -133,6 +133,53 @@ public class LuceneIndexEditor2Test {
propCallback.reset();
}
+ @Test
+ public void relativeProperties() throws Exception{
+ IndexDefinitionBuilder defnb = new IndexDefinitionBuilder();
+
defnb.indexRule("nt:base").property("jcr:content/metadata/foo").propertyIndex();
+ defnb.aggregateRule("nt:base").include("*");
+
+ NodeState defnState = defnb.build();
+ IndexDefinition defn = new IndexDefinition(root, defnState, indexPath);
+ LuceneIndexEditorContext ctx = newContext(defnState.builder(), defn,
true);
+ ctx.setPropertyUpdateCallback(propCallback);
+
+ EditorHook hook = createHook(ctx);
+
+ updateBefore(defnb);
+
+ //Property added
+ NodeBuilder builder = before.builder();
+
builder.child("a").child("jcr:content").child("metadata").setProperty("foo",
"bar");
+ builder.child("a").setProperty("foo2", "bar");
+
+ before = hook.processCommit(root, builder.getNodeState(),
CommitInfo.EMPTY);
+ propCallback.state.assertState("/a", "jcr:content/metadata/foo",
UpdateState.ADDED);
+ assertEquals(1, propCallback.invocationCount);
+ propCallback.reset();
+
+ //Property updated
+ builder = before.builder();
+
builder.child("a").child("jcr:content").child("metadata").setProperty("foo",
"bar2");
+ builder.child("a").setProperty("foo2", "bar2");
+ before = hook.processCommit(before, builder.getNodeState(),
CommitInfo.EMPTY);
+
+ propCallback.state.assertState("/a", "jcr:content/metadata/foo",
UpdateState.UPDATED);
+
+ assertEquals(1, propCallback.invocationCount);
+ propCallback.reset();
+
+ //Property deleted
+ builder = before.builder();
+
builder.child("a").child("jcr:content").child("metadata").removeProperty("foo");
+ builder.child("a").removeProperty("foo2");
+ before = hook.processCommit(before, builder.getNodeState(),
CommitInfo.EMPTY);
+
+ propCallback.state.assertState("/a", "jcr:content/metadata/foo",
UpdateState.DELETED);
+ assertEquals(1, propCallback.invocationCount);
+ propCallback.reset();
+ }
+
private void updateBefore(IndexDefinitionBuilder defnb) {
NodeBuilder builder = before.builder();
NodeBuilder cb = TestUtil.child(builder,
PathUtils.getParentPath(indexPath));