You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by al...@apache.org on 2013/05/23 13:33:28 UTC

svn commit: r1485651 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/ oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/

Author: alexparvulescu
Date: Thu May 23 11:33:28 2013
New Revision: 1485651

URL: http://svn.apache.org/r1485651
Log:
OAK-763 Asynchronous indexing

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/Oak.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/LuceneIndexHelper.java
    jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/LuceneInitializerHelper.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=1485651&r1=1485650&r2=1485651&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 May 23 11:33:28 2013
@@ -33,6 +33,7 @@ import org.apache.jackrabbit.oak.api.Roo
 import org.apache.jackrabbit.oak.core.ContentRepositoryImpl;
 import org.apache.jackrabbit.oak.kernel.KernelNodeStore;
 import org.apache.jackrabbit.oak.plugins.commit.ConflictHook;
+import org.apache.jackrabbit.oak.plugins.index.AsyncIndexUpdate;
 import org.apache.jackrabbit.oak.plugins.index.CompositeIndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
@@ -94,6 +95,13 @@ public class Oak {
 
     private String defaultWorkspaceName = DEFAULT_WORKSPACE_NAME;
 
+    /**
+     * Flag controlling the asynchronous indexing behavior. If false (default)
+     * there will be no background indexing happening.
+     * 
+     */
+    private boolean asyncIndexing = false;
+
     public Oak(NodeStore store) {
         this.store = checkNotNull(store);
     }
@@ -237,6 +245,19 @@ public class Oak {
         return this;
     }
 
+    /**
+     * Enable the asynchronous (background) indexing behavior.
+     * 
+     * Please not that when enabling the background indexer, you need to take
+     * care of calling
+     * <code>#shutdown<code> on the <code>executor<code> provided for this Oak instance.
+     * 
+     */
+    public Oak withAsyncIndexing() {
+        this.asyncIndexing = true;
+        return this;
+    }
+
     @Nonnull
     public ScheduledExecutorService getExecutorService() {
         return this.executor;
@@ -252,6 +273,10 @@ public class Oak {
         initHooks.add(new EditorHook(CompositeEditorProvider
                 .compose(editorProviders)));
 
+        if (asyncIndexing) {
+            new AsyncIndexUpdate(store, executor, indexEditors);
+        }
+
         // FIXME: OAK-810 move to proper workspace initialization
         // initialize default workspace
         Iterable<WorkspaceInitializer> workspaceInitializers =

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java?rev=1485651&r1=1485650&r2=1485651&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.java Thu May 23 11:33:28 2013
@@ -138,6 +138,11 @@ public class Jcr {
         return this;
     }
 
+    public Jcr withAsyncIndexing() {
+        oak.withAsyncIndexing();
+        return this;
+    }
+
     public Repository createRepository() {
         return new RepositoryImpl(
                 oak.createContentRepository(), 

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/LuceneIndexHelper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/LuceneIndexHelper.java?rev=1485651&r1=1485650&r2=1485651&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/LuceneIndexHelper.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/LuceneIndexHelper.java Thu May 23 11:33:28 2013
@@ -50,31 +50,22 @@ public class LuceneIndexHelper {
     public static NodeBuilder newLuceneIndexDefinition(
             @Nonnull NodeBuilder index, @Nonnull String name,
             @Nullable Set<String> propertyTypes) {
-        if (index.hasChildNode(name)) {
-            return index.child(name);
-        }
-        index = index.child(name);
-        index.setProperty(JCR_PRIMARYTYPE, INDEX_DEFINITIONS_NODE_TYPE, NAME)
-                .setProperty(TYPE_PROPERTY_NAME, TYPE_LUCENE)
-                .setProperty(REINDEX_PROPERTY_NAME, true);
-        if (propertyTypes != null && !propertyTypes.isEmpty()) {
-            index.setProperty(PropertyStates.createProperty(
-                    INCLUDE_PROPERTY_TYPES, propertyTypes, Type.STRINGS));
-        }
-        return index;
+        return newLuceneIndexDefinition(index, name, propertyTypes, false);
     }
 
-    public static NodeBuilder newLuceneAsyncIndexDefinition(
+    public static NodeBuilder newLuceneIndexDefinition(
             @Nonnull NodeBuilder index, @Nonnull String name,
-            @Nullable Set<String> propertyTypes) {
+            @Nullable Set<String> propertyTypes, boolean async) {
         if (index.hasChildNode(name)) {
             return index.child(name);
         }
         index = index.child(name);
         index.setProperty(JCR_PRIMARYTYPE, INDEX_DEFINITIONS_NODE_TYPE, NAME)
                 .setProperty(TYPE_PROPERTY_NAME, TYPE_LUCENE)
-                .setProperty(ASYNC_PROPERTY_NAME, true)
                 .setProperty(REINDEX_PROPERTY_NAME, true);
+        if (async) {
+            index.setProperty(ASYNC_PROPERTY_NAME, true);
+        }
         if (propertyTypes != null && !propertyTypes.isEmpty()) {
             index.setProperty(PropertyStates.createProperty(
                     INCLUDE_PROPERTY_TYPES, propertyTypes, Type.STRINGS));
@@ -85,6 +76,14 @@ public class LuceneIndexHelper {
     public static NodeBuilder newLuceneFileIndexDefinition(
             @Nonnull NodeBuilder index, @Nonnull String name,
             @Nullable Set<String> propertyTypes, @Nonnull String path) {
+        return newLuceneFileIndexDefinition(index, name, propertyTypes, path,
+                false);
+    }
+
+    public static NodeBuilder newLuceneFileIndexDefinition(
+            @Nonnull NodeBuilder index, @Nonnull String name,
+            @Nullable Set<String> propertyTypes, @Nonnull String path,
+            boolean async) {
         if (index.hasChildNode(name)) {
             return index.child(name);
         }
@@ -94,6 +93,9 @@ public class LuceneIndexHelper {
                 .setProperty(PERSISTENCE_NAME, PERSISTENCE_FILE)
                 .setProperty(PERSISTENCE_PATH, path)
                 .setProperty(REINDEX_PROPERTY_NAME, true);
+        if (async) {
+            index.setProperty(ASYNC_PROPERTY_NAME, true);
+        }
         if (propertyTypes != null && !propertyTypes.isEmpty()) {
             index.setProperty(PropertyStates.createProperty(
                     INCLUDE_PROPERTY_TYPES, propertyTypes, Type.STRINGS));

Modified: jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/LuceneInitializerHelper.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/LuceneInitializerHelper.java?rev=1485651&r1=1485650&r2=1485651&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/LuceneInitializerHelper.java (original)
+++ jackrabbit/oak/trunk/oak-lucene/src/main/java/org/apache/jackrabbit/oak/plugins/index/lucene/util/LuceneInitializerHelper.java Thu May 23 11:33:28 2013
@@ -34,6 +34,8 @@ public class LuceneInitializerHelper imp
 
     private final String filePath;
 
+    private boolean async = false;
+
     public LuceneInitializerHelper(String name) {
         this(name, LuceneIndexHelper.JR_PROPERTY_INCLUDES);
     }
@@ -49,6 +51,11 @@ public class LuceneInitializerHelper imp
         this.filePath = filePath;
     }
 
+    public LuceneInitializerHelper async() {
+        async = true;
+        return this;
+    }
+
     @Override
     public NodeState initialize(NodeState state) {
         if (state.hasChildNode(INDEX_DEFINITIONS_NAME)
@@ -60,10 +67,10 @@ public class LuceneInitializerHelper imp
 
         if (filePath == null) {
             newLuceneIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME),
-                    name, propertyTypes);
+                    name, propertyTypes, async);
         } else {
             newLuceneFileIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME),
-                    name, propertyTypes, filePath);
+                    name, propertyTypes, filePath, async);
         }
         return builder.getNodeState();
     }