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);