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/04/11 14:38:07 UTC

svn commit: r1466850 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/ oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/ oak-jcr/src/main/java/...

Author: alexparvulescu
Date: Thu Apr 11 12:38:06 2013
New Revision: 1466850

URL: http://svn.apache.org/r1466850
Log:
OAK-763 Asynchronous indexing
 - moved the scheduler to oak-core
 - refactored/cleaned the code indexing a bit

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/IndexConstants.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManagerDiff.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2Index.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHook.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexLookup.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/Jcr.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=1466850&r1=1466849&r2=1466850&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 Apr 11 12:38:06 2013
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.ScheduledExecutorService;
 
 import javax.annotation.Nonnull;
 import javax.jcr.NoSuchWorkspaceException;
@@ -57,6 +58,7 @@ import org.apache.jackrabbit.oak.spi.sta
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.Lists.newArrayList;
+import static java.util.concurrent.Executors.newScheduledThreadPool;
 
 /**
  * Builder class for constructing {@link ContentRepository} instances with
@@ -87,6 +89,8 @@ public class Oak {
 
     private SecurityProvider securityProvider;
 
+    private ScheduledExecutorService executor = newScheduledThreadPool(0);
+
     private String defaultWorkspaceName = DEFAULT_WORKSPACE_NAME;
 
     public Oak(NodeStore store) {
@@ -226,6 +230,17 @@ public class Oak {
         return this;
     }
 
+    @Nonnull
+    public Oak with(@Nonnull ScheduledExecutorService executorService) {
+        this.executor = executorService;
+        return this;
+    }
+
+    @Nonnull
+    public ScheduledExecutorService getExecutorService() {
+        return this.executor;
+    }
+
     public ContentRepository createContentRepository() {
         IndexHookProvider indexHooks = CompositeIndexHookProvider.compose(indexHookProviders);
         OakInitializer.initialize(store, new CompositeInitializer(initializers), indexHooks);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexConstants.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexConstants.java?rev=1466850&r1=1466849&r2=1466850&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexConstants.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexConstants.java Thu Apr 11 12:38:06 2013
@@ -31,6 +31,8 @@ public interface IndexConstants {
 
     String REINDEX_PROPERTY_NAME = "reindex";
 
+    String ASYNC_PROPERTY_NAME = "async";
+
     /**
      * Marks a unique property index.
      */

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManagerDiff.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManagerDiff.java?rev=1466850&r1=1466849&r2=1466850&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManagerDiff.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexHookManagerDiff.java Thu Apr 11 12:38:06 2013
@@ -16,12 +16,12 @@
  */
 package org.apache.jackrabbit.oak.plugins.index;
 
-import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.ASYNC_PROPERTY_NAME;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
-import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NODE_TYPE;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.REINDEX_PROPERTY_NAME;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.TYPE_PROPERTY_NAME;
-import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.TYPE_UNKNOWN;
+import static org.apache.jackrabbit.oak.plugins.index.IndexUtils.getBoolean;
+import static org.apache.jackrabbit.oak.plugins.index.IndexUtils.isIndexNodeType;
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 
 import java.util.HashSet;
@@ -65,51 +65,51 @@ class IndexHookManagerDiff implements Ed
     public void enter(NodeState before, NodeState after)
             throws CommitFailedException {
         NodeState ref = node.getNodeState();
-        if (ref.hasChildNode(INDEX_DEFINITIONS_NAME)) {
-            Set<String> existingTypes = new HashSet<String>();
-            Set<String> reindexTypes = new HashSet<String>();
-            NodeState index = ref.getChildNode(INDEX_DEFINITIONS_NAME);
-            for (String indexName : index.getChildNodeNames()) {
-                NodeState indexChild = index.getChildNode(indexName);
-                if (isIndexNodeType(indexChild.getProperty(JCR_PRIMARYTYPE))) {
-                    PropertyState reindexPS = indexChild
-                            .getProperty(REINDEX_PROPERTY_NAME);
-                    boolean reindex = reindexPS == null
-                            || (reindexPS != null && indexChild.getProperty(
-                                    REINDEX_PROPERTY_NAME).getValue(
-                                    Type.BOOLEAN));
-                    String type = TYPE_UNKNOWN;
-                    PropertyState typePS = indexChild
-                            .getProperty(TYPE_PROPERTY_NAME);
-                    if (typePS != null && !typePS.isArray()) {
-                        type = typePS.getValue(Type.STRING);
-                    }
-                    if (reindex) {
-                        reindexTypes.add(type);
-                    }
-                    existingTypes.add(type);
-                }
-            }
-            existingTypes.remove(TYPE_UNKNOWN);
-            reindexTypes.remove(TYPE_UNKNOWN);
+        if (!ref.hasChildNode(INDEX_DEFINITIONS_NAME)) {
+            return;
+        }
 
-            List<IndexHook> hooks = Lists.newArrayList();
-            List<IndexHook> reindex = Lists.newArrayList();
-            for (String type : existingTypes) {
-                List<? extends IndexHook> hooksTmp = provider.getIndexHooks(
-                        type, node);
-                if (reindexTypes.contains(type)) {
-                    reindex.addAll(hooksTmp);
-                } else {
-                    hooks.addAll(hooksTmp);
+        Set<String> allTypes = new HashSet<String>();
+        Set<String> reindexTypes = new HashSet<String>();
+        NodeState index = ref.getChildNode(INDEX_DEFINITIONS_NAME);
+        for (String indexName : index.getChildNodeNames()) {
+            NodeState indexChild = index.getChildNode(indexName);
+            if (isIndexNodeType(indexChild)) {
+                boolean reindex = getBoolean(indexChild, REINDEX_PROPERTY_NAME,
+                        true);
+                boolean async = getBoolean(indexChild, ASYNC_PROPERTY_NAME,
+                        false);
+                String type = null;
+                PropertyState typePS = indexChild
+                        .getProperty(TYPE_PROPERTY_NAME);
+                if (typePS != null && !typePS.isArray()) {
+                    type = typePS.getValue(Type.STRING);
+                }
+                if (type == null || async) {
+                    // skip null & async types
+                    continue;
+                }
+                if (reindex) {
+                    reindexTypes.add(type);
                 }
+                allTypes.add(type);
             }
-            reindex(reindex, ref);
-            if (!hooks.isEmpty()) {
-                this.inner = VisibleEditor.wrap(CompositeEditor.compose(hooks));
-                this.inner.enter(before, after);
+        }
+
+        List<IndexHook> hooks = Lists.newArrayList();
+        List<IndexHook> reindex = Lists.newArrayList();
+        for (String type : allTypes) {
+            if (reindexTypes.contains(type)) {
+                reindex.addAll(provider.getIndexHooks(type, node));
+            } else {
+                hooks.addAll(provider.getIndexHooks(type, node));
             }
         }
+        reindex(reindex, ref);
+        if (!hooks.isEmpty()) {
+            this.inner = VisibleEditor.wrap(CompositeEditor.compose(hooks));
+            this.inner.enter(before, after);
+        }
     }
 
     private void reindex(List<IndexHook> hooks, NodeState state)
@@ -147,11 +147,6 @@ class IndexHookManagerDiff implements Ed
         this.inner.leave(before, after);
     }
 
-    private static boolean isIndexNodeType(PropertyState ps) {
-        return ps != null && !ps.isArray()
-                && ps.getValue(Type.STRING).equals(INDEX_DEFINITIONS_NODE_TYPE);
-    }
-
     @Override
     public void propertyAdded(PropertyState after) throws CommitFailedException {
         inner.propertyAdded(after);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java?rev=1466850&r1=1466849&r2=1466850&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/IndexUtils.java Thu Apr 11 12:38:06 2013
@@ -17,13 +17,14 @@
 package org.apache.jackrabbit.oak.plugins.index;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexHookProvider;
 import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -32,22 +33,33 @@ import org.apache.jackrabbit.oak.util.No
 
 import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE;
 import static org.apache.jackrabbit.JcrConstants.NT_UNSTRUCTURED;
+import static org.apache.jackrabbit.oak.api.Type.BOOLEAN;
+import static org.apache.jackrabbit.oak.api.Type.NAME;
 import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static org.apache.jackrabbit.oak.api.Type.STRINGS;
 import static org.apache.jackrabbit.oak.commons.PathUtils.concat;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.DECLARING_NODE_TYPES;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NODE_TYPE;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.PROPERTY_NAMES;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.REINDEX_PROPERTY_NAME;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.TYPE_PROPERTY_NAME;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.TYPE_UNKNOWN;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.UNIQUE_PROPERTY_NAME;
 
 /**
  * TODO document
  */
-public class IndexUtils implements IndexConstants {
+public class IndexUtils {
 
     public static NodeBuilder getOrCreateOakIndex(NodeBuilder root) {
         NodeBuilder index;
-        if (!root.hasChildNode(IndexConstants.INDEX_DEFINITIONS_NAME)) {
-            index = root.child(IndexConstants.INDEX_DEFINITIONS_NAME);
+        if (!root.hasChildNode(INDEX_DEFINITIONS_NAME)) {
+            index = root.child(INDEX_DEFINITIONS_NAME);
             // TODO: use property node type name
-            index.setProperty(JCR_PRIMARYTYPE, NT_UNSTRUCTURED, Type.NAME);
+            index.setProperty(JCR_PRIMARYTYPE, NT_UNSTRUCTURED, NAME);
         } else {
-            index = root.child(IndexConstants.INDEX_DEFINITIONS_NAME);
+            index = root.child(INDEX_DEFINITIONS_NAME);
         }
         return index;
     }
@@ -62,23 +74,24 @@ public class IndexUtils implements Index
      *                      uniqueness.
      * @param propertyNames The property names that should be indexed.
      */
-    public static void createIndexDefinition(@Nonnull NodeBuilder index,
+    public static NodeBuilder createIndexDefinition(@Nonnull NodeBuilder index,
                                              @Nonnull String indexDefName,
                                              boolean reindex,
                                              boolean unique,
-                                             @Nonnull List<String> propertyNames,
-                                             @Nullable List<String> declaringNodeTypeNames) {
+                                             @Nonnull Collection<String> propertyNames,
+                                             @Nullable Collection<String> declaringNodeTypeNames) {
         NodeBuilder entry = index.child(indexDefName)
-                .setProperty(JCR_PRIMARYTYPE, IndexConstants.INDEX_DEFINITIONS_NODE_TYPE, Type.NAME)
-                .setProperty(IndexConstants.TYPE_PROPERTY_NAME, "p2")
-                .setProperty(IndexConstants.REINDEX_PROPERTY_NAME, reindex);
+                .setProperty(JCR_PRIMARYTYPE, INDEX_DEFINITIONS_NODE_TYPE, NAME)
+                .setProperty(TYPE_PROPERTY_NAME, Property2IndexHookProvider.TYPE)
+                .setProperty(REINDEX_PROPERTY_NAME, reindex);
         if (unique) {
-            entry.setProperty(IndexConstants.UNIQUE_PROPERTY_NAME, unique);
+            entry.setProperty(UNIQUE_PROPERTY_NAME, unique);
         }
-        entry.setProperty(PropertyStates.createProperty(IndexConstants.PROPERTY_NAMES, propertyNames, Type.STRINGS));
+        entry.setProperty(PropertyStates.createProperty(PROPERTY_NAMES, propertyNames, STRINGS));
         if (declaringNodeTypeNames != null && !declaringNodeTypeNames.isEmpty()) {
-            entry.setProperty(PropertyStates.createProperty(IndexConstants.DECLARING_NODE_TYPES, declaringNodeTypeNames, Type.STRINGS));
+            entry.setProperty(PropertyStates.createProperty(DECLARING_NODE_TYPES, declaringNodeTypeNames, STRINGS));
         }
+        return entry;
     }
 
     /**
@@ -95,16 +108,16 @@ public class IndexUtils implements Index
                                              boolean unique,
                                              @Nonnull String[] propertyNames,
                                              @Nullable String[] declaringNodeTypeNames) {
-        NodeUtil entry = indexNode.getOrAddChild(indexDefName, IndexConstants.INDEX_DEFINITIONS_NODE_TYPE);
-        entry.setString(IndexConstants.TYPE_PROPERTY_NAME, "p2");
-        entry.setBoolean(IndexConstants.REINDEX_PROPERTY_NAME, true);
+        NodeUtil entry = indexNode.getOrAddChild(indexDefName, INDEX_DEFINITIONS_NODE_TYPE);
+        entry.setString(TYPE_PROPERTY_NAME, Property2IndexHookProvider.TYPE);
+        entry.setBoolean(REINDEX_PROPERTY_NAME, true);
         if (unique) {
-            entry.setBoolean(IndexConstants.UNIQUE_PROPERTY_NAME, true);
+            entry.setBoolean(UNIQUE_PROPERTY_NAME, true);
         }
         if (declaringNodeTypeNames != null && declaringNodeTypeNames.length > 0) {
-            entry.setStrings(IndexConstants.DECLARING_NODE_TYPES, declaringNodeTypeNames);
+            entry.setStrings(DECLARING_NODE_TYPES, declaringNodeTypeNames);
         }
-        entry.setStrings(IndexConstants.PROPERTY_NAMES, propertyNames);
+        entry.setStrings(PROPERTY_NAMES, propertyNames);
     }
 
     /**
@@ -152,4 +165,19 @@ public class IndexUtils implements Index
         return new IndexDefinitionImpl(name, type, concat(path, name));
     }
 
+    public static boolean isIndexNodeType(NodeState state) {
+        PropertyState ps = state.getProperty(JCR_PRIMARYTYPE);
+        return ps != null && !ps.isArray()
+                && ps.getValue(STRING).equals(INDEX_DEFINITIONS_NODE_TYPE);
+    }
+
+    public static boolean getBoolean(NodeState state, String property,
+            boolean def) {
+        PropertyState ps = state.getProperty(property);
+        if (ps == null) {
+            return def;
+        }
+        return ps != null && ps.getValue(BOOLEAN);
+    }
+
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2Index.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2Index.java?rev=1466850&r1=1466849&r2=1466850&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2Index.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2Index.java Thu Apr 11 12:38:06 2013
@@ -80,8 +80,6 @@ import com.google.common.base.Charsets;
  */
 class Property2Index implements QueryIndex {
 
-    public static final String TYPE = "p2";
-
     // TODO the max string length should be removed, or made configurable
     private static final int MAX_STRING_LENGTH = 100; 
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHook.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHook.java?rev=1466850&r1=1466849&r2=1466850&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHook.java Thu Apr 11 12:38:06 2013
@@ -22,7 +22,7 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NODE_TYPE;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.TYPE_PROPERTY_NAME;
-import static org.apache.jackrabbit.oak.plugins.index.p2.Property2Index.TYPE;
+import static org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexHookProvider.TYPE;
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 
 import java.io.Closeable;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookProvider.java?rev=1466850&r1=1466849&r2=1466850&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexHookProvider.java Thu Apr 11 12:38:06 2013
@@ -16,8 +16,6 @@
  */
 package org.apache.jackrabbit.oak.plugins.index.p2;
 
-import static org.apache.jackrabbit.oak.plugins.index.p2.Property2Index.TYPE;
-
 import java.util.List;
 
 import org.apache.felix.scr.annotations.Component;
@@ -39,6 +37,8 @@ import com.google.common.collect.Immutab
 @Service(IndexHookProvider.class)
 public class Property2IndexHookProvider implements IndexHookProvider {
 
+    public static final String TYPE = "p2";
+
     @Override
     public List<? extends IndexHook> getIndexHooks(String type,
             NodeBuilder builder) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexLookup.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexLookup.java?rev=1466850&r1=1466849&r2=1466850&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexLookup.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/p2/Property2IndexLookup.java Thu Apr 11 12:38:06 2013
@@ -20,6 +20,7 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.PROPERTY_NAMES;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.TYPE_PROPERTY_NAME;
+import static org.apache.jackrabbit.oak.plugins.index.p2.Property2IndexHookProvider.TYPE;
 
 import java.util.Iterator;
 import java.util.List;
@@ -53,7 +54,7 @@ import org.apache.jackrabbit.oak.spi.sta
  * </pre>
  */
 public class Property2IndexLookup {
-    
+
     private static final int MAX_COST = 100;
 
     private final IndexStoreStrategy store = new ContentMirrorStoreStrategy();
@@ -131,7 +132,7 @@ public class Property2IndexLookup {
         for (ChildNodeEntry entry : state.getChildNodeEntries()) {
             NodeState ns = entry.getNodeState();
             PropertyState type = ns.getProperty(TYPE_PROPERTY_NAME);
-            if (type == null || type.isArray() || !Property2Index.TYPE.equals(type.getValue(Type.STRING))) {
+            if (type == null || type.isArray() || !TYPE.equals(type.getValue(Type.STRING))) {
                 continue;
             }
             if (containsValue(ns.getProperty(PROPERTY_NAMES), propertyName)) {

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=1466850&r1=1466849&r2=1466850&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 Apr 11 12:38:06 2013
@@ -16,7 +16,6 @@
  */
 package org.apache.jackrabbit.oak.jcr;
 
-import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 
 import javax.annotation.Nonnull;
@@ -52,8 +51,6 @@ public class Jcr {
 
     private final Oak oak;
 
-    private ScheduledExecutorService executor = Executors.newScheduledThreadPool(0);
-
     private SecurityProvider securityProvider;
 
     public Jcr(Oak oak) {
@@ -138,13 +135,15 @@ public class Jcr {
 
     @Nonnull
     public final Jcr with(@Nonnull ScheduledExecutorService executor) {
-        this.executor = checkNotNull(executor);
+        oak.with(checkNotNull(executor));
         return this;
     }
 
     public Repository createRepository() {
         return new RepositoryImpl(
-                oak.createContentRepository(), executor, securityProvider);
+                oak.createContentRepository(), 
+                oak.getExecutorService(), 
+                securityProvider);
     }
 
 }