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 2016/12/01 04:47:29 UTC

svn commit: r1772145 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/index/ test/java/org/apache/jackrabbit/oak/plugins/index/

Author: chetanm
Date: Thu Dec  1 04:47:29 2016
New Revision: 1772145

URL: http://svn.apache.org/viewvc?rev=1772145&view=rev
Log:
OAK-5176 - Allow configuring ignoreReindexFlags on per IndexUpdate basis

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java?rev=1772145&r1=1772144&r2=1772145&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdate.java Thu Dec  1 04:47:29 2016
@@ -90,7 +90,7 @@ public class IndexUpdate implements Edit
      * used with extreme caution!
      * </p>
      */
-    private static final boolean IGNORE_REINDEX_FLAGS = Boolean
+    static final boolean IGNORE_REINDEX_FLAGS = Boolean
             .getBoolean("oak.indexUpdate.ignoreReindexFlags");
 
     static {
@@ -194,11 +194,15 @@ public class IndexUpdate implements Edit
         return rootState.getIndexingStats();
     }
 
+    public void setIgnoreReindexFlags(boolean ignoreReindexFlag){
+        rootState.setIgnoreReindexFlags(ignoreReindexFlag);
+    }
+
     private boolean shouldReindex(NodeBuilder definition, NodeState before,
             String name) {
         PropertyState ps = definition.getProperty(REINDEX_PROPERTY_NAME);
         if (ps != null && ps.getValue(BOOLEAN)) {
-            return !IGNORE_REINDEX_FLAGS;
+            return !rootState.ignoreReindexFlags;
         }
         // reindex in the case this is a new node, even though the reindex flag
         // might be set to 'false' (possible via content import)
@@ -472,6 +476,7 @@ public class IndexUpdate implements Edit
         final String async;
         final NodeState root;
         final CommitInfo commitInfo;
+        private boolean ignoreReindexFlags = IGNORE_REINDEX_FLAGS;
         /**
          * Callback for the update events of the indexing job
          */
@@ -562,6 +567,10 @@ public class IndexUpdate implements Edit
             this.missingProvider = missingProvider;
         }
 
+        void setIgnoreReindexFlags(boolean ignoreReindexFlags) {
+            this.ignoreReindexFlags = ignoreReindexFlags;
+        }
+
         private class CountingCallback implements ContextAwareCallback, IndexingContext {
             final String indexPath;
             final boolean reindex;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java?rev=1772145&r1=1772144&r2=1772145&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateProvider.java Thu Dec  1 04:47:29 2016
@@ -45,6 +45,8 @@ public class IndexUpdateProvider impleme
 
     private CorruptIndexHandler corruptIndexHandler = CorruptIndexHandler.NOOP;
 
+    private boolean ignoreReindexFlags = IndexUpdate.IGNORE_REINDEX_FLAGS;
+
     public IndexUpdateProvider(IndexEditorProvider provider, boolean failOnMissingIndexProvider) {
         this(provider, null, failOnMissingIndexProvider);
     }
@@ -68,10 +70,15 @@ public class IndexUpdateProvider impleme
 
         IndexUpdate editor = new IndexUpdate(provider, async, after, builder, NOOP_CALLBACK, info, corruptIndexHandler)
                 .withMissingProviderStrategy(missingStrategy);
+        editor.setIgnoreReindexFlags(ignoreReindexFlags);
         return VisibleEditor.wrap(editor);
     }
 
     public void setCorruptIndexHandler(CorruptIndexHandler corruptIndexHandler) {
         this.corruptIndexHandler = corruptIndexHandler;
     }
+
+    public void setIgnoreReindexFlags(boolean ignoreReindexFlags) {
+        this.ignoreReindexFlags = ignoreReindexFlags;
+    }
 }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java?rev=1772145&r1=1772144&r2=1772145&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java Thu Dec  1 04:47:29 2016
@@ -663,7 +663,44 @@ public class IndexUpdateTest {
         assertNotNull(provider.getContext(indexPath));
     }
 
+    @Test
+    public void ignoreReindexingFlag() throws Exception{
+        String indexPath = "/oak:index/rootIndex";
+        CallbackCapturingProvider provider = new CallbackCapturingProvider();
 
+        IndexUpdateProvider indexUpdate = new IndexUpdateProvider(provider);
+        EditorHook hook = new EditorHook(indexUpdate);
+
+        NodeState before = builder.getNodeState();
+        createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME),
+                "rootIndex", true, false, ImmutableSet.of("foo"), null);
+
+        builder.child("a").setProperty("foo", "abc");
+        NodeState after = builder.getNodeState();
+
+        NodeState indexed = hook.processCommit(before, after, CommitInfo.EMPTY);
+        assertTrue(provider.getContext(indexPath).isReindexing());
+
+        before = indexed;
+        builder = before.builder();
+        builder.child("b").setProperty("foo", "xyz");
+        child(builder, indexPath).setProperty(IndexConstants.REINDEX_PROPERTY_NAME, true);
+        after = builder.getNodeState();
+
+        provider.reset();
+        indexed = hook.processCommit(before, after, CommitInfo.EMPTY);
+        assertTrue(provider.getContext(indexPath).isReindexing());
+
+        //Now set IndexUpdate to ignore the reindex flag
+        indexUpdate.setIgnoreReindexFlags(true);
+        indexed = hook.processCommit(before, after, CommitInfo.EMPTY);
+        assertFalse(provider.getContext(indexPath).isReindexing());
+
+        //Despite reindex flag set to true and reindexing not done new
+        //content should still get picked up
+        PropertyIndexLookup lookup = new PropertyIndexLookup(indexed);
+        assertFalse(find(lookup, "foo", "xyz").isEmpty());
+    }
 
     private static void markCorrupt(NodeBuilder builder, String indexName) {
         builder.getChildNode(INDEX_DEFINITIONS_NAME).getChildNode(indexName)