Author: alexparvulescu
Date: Wed Aug  3 07:44:57 2016
New Revision: 1755037

URL: http://svn.apache.org/viewvc?rev=1755037&view=rev
Log:
OAK-4633 Multiplexing store support for Node type indexes


Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexLookup.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexProvider.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java?rev=1755037&r1=1755036&r2=1755037&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndex.java
 Wed Aug  3 07:44:57 2016
@@ -19,6 +19,7 @@
 package org.apache.jackrabbit.oak.plugins.index.nodetype;
 
 import org.apache.jackrabbit.JcrConstants;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
 import org.apache.jackrabbit.oak.spi.query.Cursor;
 import org.apache.jackrabbit.oak.spi.query.Cursors;
 import org.apache.jackrabbit.oak.spi.query.Filter;
@@ -35,6 +36,12 @@ import org.apache.jackrabbit.oak.spi.sta
  */
 class NodeTypeIndex implements QueryIndex, JcrConstants {
 
+    private final MountInfoProvider mountInfoProvider;
+
+    public NodeTypeIndex(MountInfoProvider mountInfoProvider) {
+        this.mountInfoProvider = mountInfoProvider;
+    }
+
     @Override
     public double getMinimumCost() {
         return NodeTypeIndexLookup.MINIMUM_COST;
@@ -56,7 +63,7 @@ class NodeTypeIndex implements QueryInde
             // doesn't have a node type restriction
             return Double.POSITIVE_INFINITY;
         }
-        NodeTypeIndexLookup lookup = new NodeTypeIndexLookup(root);
+        NodeTypeIndexLookup lookup = new NodeTypeIndexLookup(root, 
mountInfoProvider);
         if (lookup.isIndexed(filter.getPath(), filter)) {
             return lookup.getCost(filter);
         } else {
@@ -66,7 +73,7 @@ class NodeTypeIndex implements QueryInde
 
     @Override
     public Cursor query(Filter filter, NodeState root) {
-        NodeTypeIndexLookup lookup = new NodeTypeIndexLookup(root);
+        NodeTypeIndexLookup lookup = new NodeTypeIndexLookup(root, 
mountInfoProvider);
         if (!hasNodeTypeRestriction(filter) || 
!lookup.isIndexed(filter.getPath(), filter)) {
             throw new IllegalStateException(
                     "NodeType index is used even when no index is available 
for filter " + filter);

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexLookup.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexLookup.java?rev=1755037&r1=1755036&r2=1755037&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexLookup.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexLookup.java
 Wed Aug  3 07:44:57 2016
@@ -20,6 +20,7 @@ import static org.apache.jackrabbit.oak.
 
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexLookup;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
 import org.apache.jackrabbit.oak.spi.query.Filter;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
@@ -38,8 +39,12 @@ class NodeTypeIndexLookup implements Jcr
 
     private final NodeState root;
 
-    public NodeTypeIndexLookup(NodeState root) {
+    private final MountInfoProvider mountInfoProvider;
+
+    public NodeTypeIndexLookup(NodeState root,
+            MountInfoProvider mountInfoProvider) {
         this.root = root;
+        this.mountInfoProvider = mountInfoProvider;
     }
 
     /**
@@ -51,7 +56,7 @@ class NodeTypeIndexLookup implements Jcr
      *         otherwise.
      */
     public boolean isIndexed(String path, Filter f) {
-        PropertyIndexLookup lookup = new PropertyIndexLookup(root);
+        PropertyIndexLookup lookup = new PropertyIndexLookup(root, 
mountInfoProvider);
         if (lookup.isIndexed(JCR_PRIMARYTYPE, path, f)
                 && lookup.isIndexed(JCR_MIXINTYPES, path, f)) {
             return true;
@@ -66,12 +71,12 @@ class NodeTypeIndexLookup implements Jcr
         }
 
         NodeState child = root.getChildNode(path.substring(0, slash));
-        return new NodeTypeIndexLookup(child).isIndexed(
+        return new NodeTypeIndexLookup(child, mountInfoProvider).isIndexed(
                 path.substring(slash), f);
     }
 
     public double getCost(Filter filter) {
-        PropertyIndexLookup lookup = new PropertyIndexLookup(root);
+        PropertyIndexLookup lookup = new PropertyIndexLookup(root, 
mountInfoProvider);
         return lookup.getCost(filter, JCR_PRIMARYTYPE, 
newName(filter.getPrimaryTypes()))
                 + lookup.getCost(filter, JCR_MIXINTYPES, 
newName(filter.getMixinTypes()));
     }
@@ -83,7 +88,7 @@ class NodeTypeIndexLookup implements Jcr
      * @return the matched paths (the result might contain duplicate entries)
      */
     public Iterable<String> query(Filter filter) {
-        PropertyIndexLookup lookup = new PropertyIndexLookup(root);
+        PropertyIndexLookup lookup = new PropertyIndexLookup(root, 
mountInfoProvider);
         return Iterables.concat(
                 lookup.query(filter, JCR_PRIMARYTYPE, 
newName(filter.getPrimaryTypes())),
                 lookup.query(filter, JCR_MIXINTYPES, 
newName(filter.getMixinTypes())));

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexProvider.java?rev=1755037&r1=1755036&r2=1755037&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexProvider.java
 Wed Aug  3 07:44:57 2016
@@ -23,7 +23,10 @@ import java.util.List;
 import javax.annotation.Nonnull;
 
 import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
+import org.apache.jackrabbit.oak.spi.mount.Mounts;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex;
 import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -38,9 +41,18 @@ import com.google.common.collect.Immutab
 @Service(QueryIndexProvider.class)
 public class NodeTypeIndexProvider implements QueryIndexProvider {
 
+    @Reference
+    private MountInfoProvider mountInfoProvider = Mounts
+            .defaultMountInfoProvider();
+
     @Nonnull
     @Override
     public List<? extends QueryIndex> getQueryIndexes(NodeState nodeState) {
-        return ImmutableList.of(new NodeTypeIndex());
+        return ImmutableList.of(new NodeTypeIndex(mountInfoProvider));
+    }
+
+    public NodeTypeIndexProvider with(MountInfoProvider mountInfoProvider) {
+        this.mountInfoProvider = mountInfoProvider;
+        return this;
     }
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java?rev=1755037&r1=1755036&r2=1755037&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java
 Wed Aug  3 07:44:57 2016
@@ -42,6 +42,7 @@ import org.apache.jackrabbit.oak.query.i
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EditorHook;
 import org.apache.jackrabbit.oak.spi.lifecycle.OakInitializer;
+import org.apache.jackrabbit.oak.spi.mount.Mounts;
 import org.apache.jackrabbit.oak.spi.query.Cursor;
 import org.apache.jackrabbit.oak.spi.query.Cursors;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -86,7 +87,8 @@ public class NodeTypeIndexTest {
                 new PropertyIndexEditorProvider())), CommitInfo.EMPTY);
 
         NodeState rootState = store.getRoot();
-        NodeTypeIndex index = new NodeTypeIndex();
+        NodeTypeIndex index = new NodeTypeIndex(
+                Mounts.defaultMountInfoProvider());
         FilterImpl filter;
 
         filter = createFilter(rootState, JcrConstants.NT_FOLDER);


Reply via email to