Author: chetanm
Date: Tue Jul 18 09:34:01 2017
New Revision: 1802261
URL: http://svn.apache.org/viewvc?rev=1802261&view=rev
Log:
OAK-6463 - Property index update fails in composite NodeStore setup
Added another ignored test case at PropertyIndex level
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java?rev=1802261&r1=1802260&r2=1802261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java
Tue Jul 18 09:34:01 2017
@@ -40,10 +40,13 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Set;
+import javax.annotation.CheckForNull;
+
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.PropertyValue;
import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
import
org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy;
@@ -58,7 +61,11 @@ import org.apache.jackrabbit.oak.query.a
import org.apache.jackrabbit.oak.query.index.FilterImpl;
import org.apache.jackrabbit.oak.query.index.TraversingIndex;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.commit.CompositeHook;
+import org.apache.jackrabbit.oak.spi.commit.DefaultValidator;
import org.apache.jackrabbit.oak.spi.commit.EditorHook;
+import org.apache.jackrabbit.oak.spi.commit.Validator;
+import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
import org.apache.jackrabbit.oak.spi.mount.Mount;
import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
import org.apache.jackrabbit.oak.spi.mount.Mounts;
@@ -66,6 +73,7 @@ import org.apache.jackrabbit.oak.spi.que
import org.apache.jackrabbit.oak.spi.query.QueryEngineSettings;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.LoggerFactory;
@@ -954,6 +962,41 @@ public class PropertyIndexTest {
}
+ @Ignore("OAK-6463")
+ @Test
+ public void mountWithCommitInWritableMount() throws Exception{
+ NodeState root = INITIAL_CONTENT;
+
+ // Add index definition
+ NodeBuilder builder = root.builder();
+ NodeBuilder index =
createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "foo",
+ true, false, ImmutableSet.of("foo"), null);
+ index.setProperty("entryCount", -1);
+ NodeState before = builder.getNodeState();
+
+ // Add some content and process it through the property index hook
+ builder.child("content").setProperty("foo", "abc");
+ NodeState after = builder.getNodeState();
+
+ MountInfoProvider mip = Mounts.newBuilder()
+ .readOnlyMount("foo", "/readOnly")
+ .build();
+
+ CompositeHook hook = new CompositeHook(
+ new EditorHook(new IndexUpdateProvider(new
PropertyIndexEditorProvider().with(mip))),
+ new EditorHook(new ValidatorProvider(){
+ protected Validator getRootValidator(NodeState before,
NodeState after, CommitInfo info) {
+ return new PrivateStoreValidator("/", mip);
+ }
+ })
+ );
+
+ NodeState indexed = hook.processCommit(before, after,
CommitInfo.EMPTY);
+
+ Mount defMount = mip.getDefaultMount();
+ assertTrue(getNode(indexed, pathInIndex(defMount, "/oak:index/foo",
"/content", "abc")).exists());
+ }
+
@Test(expected = CommitFailedException.class)
public void mountAndUniqueIndexes() throws Exception {
NodeState root = INITIAL_CONTENT;
@@ -1059,4 +1102,40 @@ public class PropertyIndexTest {
}
}
}
+
+ private class PrivateStoreValidator extends DefaultValidator {
+ private final String path;
+ private final MountInfoProvider mountInfoProvider;
+
+ public PrivateStoreValidator(String path, MountInfoProvider
mountInfoProvider) {
+ this.path = path;
+ this.mountInfoProvider = mountInfoProvider;
+ }
+
+ public Validator childNodeAdded(String name, NodeState after) throws
CommitFailedException {
+ return checkPrivateStoreCommit(getCommitPath(name));
+ }
+
+ public Validator childNodeChanged(String name, NodeState before,
NodeState after) throws CommitFailedException {
+ return checkPrivateStoreCommit(getCommitPath(name));
+ }
+
+ public Validator childNodeDeleted(String name, NodeState before)
throws CommitFailedException {
+ return checkPrivateStoreCommit(getCommitPath(name));
+ }
+
+ private Validator checkPrivateStoreCommit(String commitPath) throws
CommitFailedException {
+ Mount mountInfo = mountInfoProvider.getMountByPath(commitPath);
+ if (mountInfo.isReadOnly()) {
+ throw new
CommitFailedException(CommitFailedException.UNSUPPORTED, 0,
+ "Unsupported commit to a read-only store "+
commitPath);
+ }
+
+ return new PrivateStoreValidator(commitPath, mountInfoProvider);
+ }
+
+ private String getCommitPath(String changeNodeName) {
+ return PathUtils.concat(path, changeNodeName);
+ }
+ }
}