Author: chetanm
Date: Thu Mar 31 10:58:13 2016
New Revision: 1737220
URL: http://svn.apache.org/viewvc?rev=1737220&view=rev
Log:
OAK-4159 - Expose an option in Oak class to enable failing of commit upon
missing index editor provider
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.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/OakTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java?rev=1737220&r1=1737219&r2=1737220&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
Thu Mar 31 10:58:13 2016
@@ -334,6 +334,8 @@ public class Oak {
*/
private Map<String, Long> asyncTasks;
+ private boolean failOnMissingIndexProvider;
+
public Oak(NodeStore store) {
this.store = checkNotNull(store);
}
@@ -551,6 +553,11 @@ public class Oak {
return withAsyncIndexing("async", 5);
}
+ public Oak withFailOnMissingIndexProvider(){
+ failOnMissingIndexProvider = true;
+ return this;
+ }
+
public Oak withAtomicCounter() {
return with(new AtomicCounterEditorProvider(
new Supplier<Clusterable>() {
@@ -673,7 +680,7 @@ public class Oak {
workspaceInitializers, store, defaultWorkspaceName,
indexEditors);
// add index hooks later to prevent the OakInitializer to do excessive
indexing
- with(new IndexUpdateProvider(indexEditors));
+ with(new IndexUpdateProvider(indexEditors,
failOnMissingIndexProvider));
withEditorHook();
// Register observer last to prevent sending events while initialising
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=1737220&r1=1737219&r2=1737220&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 Mar 31 10:58:13 2016
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.plugin
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
+import
org.apache.jackrabbit.oak.plugins.index.IndexUpdate.MissingIndexProviderStrategy;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.Editor;
import org.apache.jackrabbit.oak.spi.commit.EditorProvider;
@@ -40,21 +41,32 @@ public class IndexUpdateProvider impleme
private final String async;
+ private final MissingIndexProviderStrategy missingStrategy;
+
+ public IndexUpdateProvider(IndexEditorProvider provider, boolean
failOnMissingIndexProvider) {
+ this(provider, null, failOnMissingIndexProvider);
+ }
+
public IndexUpdateProvider(IndexEditorProvider provider) {
- this(provider, null);
+ this(provider, null, false);
}
public IndexUpdateProvider(
- @Nonnull IndexEditorProvider provider, @CheckForNull String async)
{
+ @Nonnull IndexEditorProvider provider, @CheckForNull String async,
boolean failOnMissingIndexProvider) {
this.provider = provider;
this.async = async;
+ this.missingStrategy = new MissingIndexProviderStrategy();
+
this.missingStrategy.setFailOnMissingIndexProvider(failOnMissingIndexProvider);
}
@Override @CheckForNull
public Editor getRootEditor(
NodeState before, NodeState after,
NodeBuilder builder, CommitInfo info) {
- return VisibleEditor.wrap(new IndexUpdate(provider, async, after,
builder, NOOP_CALLBACK));
+
+ IndexUpdate editor = new IndexUpdate(provider, async, after, builder,
NOOP_CALLBACK)
+ .withMissingProviderStrategy(missingStrategy);
+ return VisibleEditor.wrap(editor);
}
}
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java?rev=1737220&r1=1737219&r2=1737220&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/OakTest.java
Thu Mar 31 10:58:13 2016
@@ -25,13 +25,22 @@ import java.util.concurrent.atomic.Atomi
import javax.jcr.NoSuchWorkspaceException;
+import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.ContentRepository;
import org.apache.jackrabbit.oak.api.ContentSession;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate;
+import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
+import
org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexEditorProvider;
+import
org.apache.jackrabbit.oak.plugins.index.reference.ReferenceEditorProvider;
+import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent;
import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
import org.apache.jackrabbit.oak.spi.whiteboard.DefaultWhiteboard;
import org.apache.jackrabbit.oak.spi.whiteboard.Registration;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
+import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardIndexEditorProvider;
import org.apache.jackrabbit.oak.spi.whiteboard.WhiteboardUtils;
import org.junit.Test;
@@ -151,4 +160,35 @@ public class OakTest {
assertNull(WhiteboardUtils.getService(wb, AsyncIndexUpdate.class));
}
+ @Test(expected = CommitFailedException.class)
+ public void checkMissingStrategySetting() throws Exception{
+ Whiteboard wb = new DefaultWhiteboard();
+ WhiteboardIndexEditorProvider wbProvider = new
WhiteboardIndexEditorProvider();
+ wbProvider.start(wb);
+
+ Registration r1 = wb.register(IndexEditorProvider.class, new
PropertyIndexEditorProvider(), null);
+ Registration r2 = wb.register(IndexEditorProvider.class, new
ReferenceEditorProvider(), null);
+
+ Oak oak = new Oak()
+ .with(new OpenSecurityProvider())
+ .with(new InitialContent())
+ .with(wb)
+ .with(wbProvider)
+ .withFailOnMissingIndexProvider();
+
+ ContentRepository repo = oak.createContentRepository();
+
+ ContentSession cs = repo.login(null, null);
+
+ Root root = cs.getLatestRoot();
+ Tree t = root.getTree("/");
+ t.setProperty("foo", "u1", Type.REFERENCE);
+
+ r1.unregister();
+
+ root.commit();
+ cs.close();
+ ((Closeable)repo).close();
+ }
+
}
\ No newline at end of file