Author: chetanm
Date: Wed Jul 26 05:27:01 2017
New Revision: 1803018

URL: http://svn.apache.org/viewvc?rev=1803018&view=rev
Log:
OAK-6471 - Support adding or updating index definitions via oak-run

Ensure that nodetype index gets updated when new index definition is
imported by ensuring indexEditorProviders are configured as part of
commit hook

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexImporter.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/NodeStoreUtils.java
    
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexImporter.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexImporter.java?rev=1803018&r1=1803017&r2=1803018&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexImporter.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/IndexImporter.java
 Wed Jul 26 05:27:01 2017
@@ -142,7 +142,7 @@ public class IndexImporter {
             incrementReIndexCount(idxBuilder);
             getImporter(indexInfo.type).importIndex(root, idxBuilder, 
indexInfo.indexDir);
         }
-        mergeWithConcurrentCheck(nodeStore, rootBuilder);
+        mergeWithConcurrentCheck(nodeStore, rootBuilder, indexEditorProvider);
     }
 
     private void bringIndexUpToDate() throws CommitFailedException {

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/NodeStoreUtils.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/NodeStoreUtils.java?rev=1803018&r1=1803017&r2=1803018&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/NodeStoreUtils.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/importer/NodeStoreUtils.java
 Wed Jul 26 05:27:01 2017
@@ -19,13 +19,20 @@
 
 package org.apache.jackrabbit.oak.plugins.index.importer;
 
-import java.util.Collections;
 
+import java.util.Map;
+
+import com.google.common.collect.ImmutableMap;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.core.ResetCommitAttributeHook;
+import org.apache.jackrabbit.oak.core.SimpleCommitContext;
 import org.apache.jackrabbit.oak.plugins.commit.AnnotatingConflictHandler;
 import org.apache.jackrabbit.oak.plugins.commit.ConflictHook;
 import org.apache.jackrabbit.oak.plugins.commit.ConflictValidatorProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
+import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
+import org.apache.jackrabbit.oak.spi.commit.CommitContext;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.CompositeEditorProvider;
 import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
@@ -40,10 +47,22 @@ final class NodeStoreUtils {
 
     static void mergeWithConcurrentCheck(NodeStore nodeStore, NodeBuilder 
builder) throws CommitFailedException {
         CompositeHook hooks = new CompositeHook(
+                ResetCommitAttributeHook.INSTANCE,
                 new ConflictHook(new AnnotatingConflictHandler()),
                 new 
EditorHook(CompositeEditorProvider.compose(singletonList(new 
ConflictValidatorProvider())))
         );
-        nodeStore.merge(builder, hooks, CommitInfo.EMPTY);
+        nodeStore.merge(builder, hooks, createCommitInfo());
+    }
+
+    static void mergeWithConcurrentCheck(NodeStore nodeStore, NodeBuilder 
builder,
+                                         IndexEditorProvider 
indexEditorProvider) throws CommitFailedException {
+        CompositeHook hooks = new CompositeHook(
+                ResetCommitAttributeHook.INSTANCE,
+                new EditorHook(new IndexUpdateProvider(indexEditorProvider)),
+                new ConflictHook(new AnnotatingConflictHandler()),
+                new 
EditorHook(CompositeEditorProvider.compose(singletonList(new 
ConflictValidatorProvider())))
+        );
+        nodeStore.merge(builder, hooks, createCommitInfo());
     }
 
     static NodeBuilder childBuilder(NodeBuilder nb, String path) {
@@ -52,4 +71,9 @@ final class NodeStoreUtils {
         }
         return nb;
     }
+
+    private static CommitInfo createCommitInfo() {
+        Map<String, Object> info = ImmutableMap.<String, 
Object>of(CommitContext.NAME, new SimpleCommitContext());
+        return new CommitInfo(CommitInfo.OAK_UNKNOWN, CommitInfo.OAK_UNKNOWN, 
info);
+    }
 }

Modified: 
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java?rev=1803018&r1=1803017&r2=1803018&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-run/src/test/java/org/apache/jackrabbit/oak/index/ReindexIT.java
 Wed Jul 26 05:27:01 2017
@@ -21,6 +21,7 @@ package org.apache.jackrabbit.oak.index;
 
 import java.io.File;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 
@@ -33,10 +34,13 @@ import javax.jcr.query.QueryResult;
 import javax.jcr.query.Row;
 
 import com.google.common.collect.Iterators;
+import com.google.common.collect.Lists;
 import com.google.common.io.Files;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
+import org.apache.jackrabbit.oak.plugins.index.IndexPathService;
+import org.apache.jackrabbit.oak.plugins.index.IndexPathServiceImpl;
 import org.apache.jackrabbit.oak.plugins.index.importer.ClusterNodeStoreLock;
 import 
org.apache.jackrabbit.oak.plugins.index.lucene.directory.IndexRootDirectory;
 import org.apache.jackrabbit.oak.plugins.index.lucene.directory.LocalIndexDir;
@@ -50,6 +54,7 @@ import org.junit.Test;
 import static com.google.common.base.Charsets.UTF_8;
 import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.getNode;
 import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.CoreMatchers.not;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -290,6 +295,12 @@ public class ReindexIT extends AbstractI
 
         explain = getQueryPlan(fixture2, "select * from [nt:base] where [bar] 
is not null");
         assertThat(explain, containsString("/oak:index/barIndex"));
+
+        IndexPathService idxPathService = new 
IndexPathServiceImpl(fixture2.getNodeStore());
+        List<String> indexPaths = 
Lists.newArrayList(idxPathService.getIndexPaths());
+
+        assertThat(indexPaths, hasItem("/oak:index/nodetype"));
+        assertThat(indexPaths, hasItem("/oak:index/barIndex"));
     }
 
     private void indexBarPropertyAlso(RepositoryFixture fixture2) throws 
IOException, RepositoryException {


Reply via email to