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


Reply via email to