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 {