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 2014/11/05 07:04:17 UTC

svn commit: r1636799 - in /jackrabbit/oak/trunk/oak-lucene/src: main/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditor.java test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java

Author: chetanm
Date: Wed Nov  5 06:04:17 2014
New Revision: 1636799

URL: http://svn.apache.org/r1636799
Log:
OAK-2253 - Index node only if configured property changed

Modified:
    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/LuceneIndexEditorTest.java

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=1636799&r1=1636798&r2=1636799&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 Wed Nov  5 06:04:17 2014
@@ -176,19 +176,19 @@ public class LuceneIndexEditor implement
 
     @Override
     public void propertyAdded(PropertyState after) {
-        markPropertiesChanged();
+        markPropertyChanged(after.getName());
         checkForRelativePropertyChange(after.getName());
     }
 
     @Override
     public void propertyChanged(PropertyState before, PropertyState after) {
-        markPropertiesChanged();
+        markPropertyChanged(before.getName());
         checkForRelativePropertyChange(before.getName());
     }
 
     @Override
     public void propertyDeleted(PropertyState before) {
-        markPropertiesChanged();
+        markPropertyChanged(before.getName());
         checkForRelativePropertyChange(before.getName());
     }
 
@@ -505,7 +505,7 @@ public class LuceneIndexEditor implement
             }
 
             if (p != null) {
-                p.markPropertiesChanged();
+                p.relativePropertyChanged();
             }
         }
     }
@@ -517,7 +517,13 @@ public class LuceneIndexEditor implement
         return changedRelativeProps;
     }
 
-    private void markPropertiesChanged() {
+    private void markPropertyChanged(String name) {
+        if (!propertiesChanged && context.getDefinition().includeProperty(name)) {
+            propertiesChanged = true;
+        }
+    }
+
+    private void relativePropertyChanged() {
         propertiesChanged = true;
     }
 

Modified: jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java?rev=1636799&r1=1636798&r2=1636799&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexEditorTest.java Wed Nov  5 06:04:17 2014
@@ -153,6 +153,46 @@ public class LuceneIndexEditorTest {
         assertEquals(2, getSearcher().getIndexReader().numDocs());
     }
 
+    /**
+     * 1. Index property foo in /test
+     * 2. Then modify some other property in /test
+     *
+     * This should not cause the index to be updated
+     */
+    @Test
+    public void nonIncludedPropertyChange() throws Exception {
+        NodeBuilder index = builder.child(INDEX_DEFINITIONS_NAME);
+        NodeBuilder nb = newLuceneIndexDefinition(index, "lucene",
+                of(TYPENAME_STRING));
+        nb.setProperty(LuceneIndexConstants.FULL_TEXT_ENABLED, false);
+        nb.setProperty(createProperty(INCLUDE_PROPERTY_NAMES, of("foo"),
+                STRINGS));
+
+        NodeState before = builder.getNodeState();
+        builder.child("test").setProperty("foo", "fox is jumping");
+        builder.child("test2").setProperty("foo", "bird is chirping");
+        NodeState after = builder.getNodeState();
+
+        NodeState indexed = HOOK.processCommit(before, after, CommitInfo.EMPTY);
+        tracker.update(indexed);
+
+        assertEquals(2, getSearcher().getIndexReader().numDocs());
+
+        assertEquals("/test", getPath(new TermQuery(new Term("foo", "fox is jumping"))));
+
+        releaseIndexNode();
+        before = indexed;
+        builder = before.builder();
+        builder.child("test").setProperty("bar", "kite is flying");
+        after = builder.getNodeState();
+        indexed = HOOK.processCommit(before, after, CommitInfo.EMPTY);
+        tracker.update(indexed);
+
+        assertEquals(2, getSearcher().getIndexReader().numDocs());
+        assertEquals("change in non included property should not cause " +
+                "index update",0, getSearcher().getIndexReader().numDeletedDocs());
+    }
+
     @Test
     public void testLuceneWithRelativeProperty() throws Exception {
         NodeBuilder index = builder.child(INDEX_DEFINITIONS_NAME);