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 2016/07/25 12:19:04 UTC

svn commit: r1753982 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/index/property/ main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/ main/java/org/apache/jackrabbit/oak/plugins/index/reference/ ...

Author: alexparvulescu
Date: Mon Jul 25 12:19:03 2016
New Revision: 1753982

URL: http://svn.apache.org/viewvc?rev=1753982&view=rev
Log:
OAK-3403 Multiplexing store support in Property indexes
 - reverted change, failing jcr tests


Removed:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/Multiplexers.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/FilteringIndexStoreStrategy.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/MultiplexersTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/reference/
Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditor.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexLookup.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexPlan.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/ContentMirrorStoreStrategy.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/IndexStoreStrategy.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/UniqueEntryStoreStrategy.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditorProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceIndex.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceIndexProvider.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/ContentMirrorStoreStrategyTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndex.java Mon Jul 25 12:19:03 2016
@@ -28,7 +28,6 @@ import java.util.Set;
 
 import org.apache.jackrabbit.oak.api.PropertyValue;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
 import org.apache.jackrabbit.oak.spi.query.Cursor;
 import org.apache.jackrabbit.oak.spi.query.Filter;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex;
@@ -99,17 +98,11 @@ class PropertyIndex implements QueryInde
 
     private static final Logger LOG = LoggerFactory.getLogger(PropertyIndex.class);
 
-    private final MountInfoProvider mountInfoProvider;
-
     /**
      * Cached property index plan
      */
     private PropertyIndexPlan plan;
 
-    PropertyIndex(MountInfoProvider mountInfoProvider) {
-        this.mountInfoProvider = mountInfoProvider;
-    }
-
     static Set<String> encode(PropertyValue value) {
         if (value == null) {
             return null;
@@ -142,14 +135,13 @@ class PropertyIndex implements QueryInde
         if (plan != null && plan.getFilter().toString().equals(filter.toString())) {
             return plan;
         } else {
-            plan = createPlan(root, filter, mountInfoProvider);
+            plan = createPlan(root, filter);
             this.plan = plan;
             return plan;
         }
     }
 
-    private static PropertyIndexPlan createPlan(NodeState root, Filter filter,
-                                                MountInfoProvider mountInfoProvider) {
+    private static PropertyIndexPlan createPlan(NodeState root, Filter filter) {
         PropertyIndexPlan bestPlan = null;
 
         // TODO support indexes on a path
@@ -160,7 +152,7 @@ class PropertyIndex implements QueryInde
             if (PROPERTY.equals(definition.getString(TYPE_PROPERTY_NAME))
                     && definition.hasChildNode(INDEX_CONTENT_NODE_NAME)) {
                 PropertyIndexPlan plan = new PropertyIndexPlan(
-                        entry.getName(), root, definition, filter, mountInfoProvider);
+                        entry.getName(), root, definition, filter);
                 if (plan.getCost() != Double.POSITIVE_INFINITY) {
                     LOG.debug("property cost for {} is {}",
                             plan.getName(), plan.getCost());

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditor.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditor.java Mon Jul 25 12:19:03 2016
@@ -41,10 +41,11 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.index.IndexEditor;
 import org.apache.jackrabbit.oak.plugins.index.IndexUpdateCallback;
 import org.apache.jackrabbit.oak.plugins.index.PathFilter;
+import org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy;
 import org.apache.jackrabbit.oak.plugins.index.property.strategy.IndexStoreStrategy;
+import org.apache.jackrabbit.oak.plugins.index.property.strategy.UniqueEntryStoreStrategy;
 import org.apache.jackrabbit.oak.plugins.nodetype.TypePredicate;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
-import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
 import org.apache.jackrabbit.oak.spi.query.PropertyValues;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -59,6 +60,14 @@ import com.google.common.base.Predicate;
  */
 class PropertyIndexEditor implements IndexEditor {
 
+    /** Index storage strategy */
+    private static final IndexStoreStrategy MIRROR =
+            new ContentMirrorStoreStrategy();
+
+    /** Index storage strategy */
+    private static final IndexStoreStrategy UNIQUE =
+            new UniqueEntryStoreStrategy();
+
     /** Parent editor, or {@code null} if this is the root editor. */
     private final PropertyIndexEditor parent;
 
@@ -106,10 +115,8 @@ class PropertyIndexEditor implements Ind
 
     private final PathFilter.Result pathFilterResult;
 
-    private final MountInfoProvider mountInfoProvider;
-
     public PropertyIndexEditor(NodeBuilder definition, NodeState root,
-                               IndexUpdateCallback updateCallback, MountInfoProvider mountInfoProvider) {
+            IndexUpdateCallback updateCallback) {
         this.parent = null;
         this.name = null;
         this.path = "/";
@@ -145,7 +152,6 @@ class PropertyIndexEditor implements Ind
             this.keysToCheckForUniqueness = null;
         }
         this.updateCallback = updateCallback;
-        this.mountInfoProvider = mountInfoProvider;
     }
     
     PropertyIndexEditor(PropertyIndexEditor parent, String name, PathFilter.Result pathFilterResult) {
@@ -160,7 +166,6 @@ class PropertyIndexEditor implements Ind
         this.updateCallback = parent.updateCallback;
         this.pathFilter = parent.pathFilter;
         this.pathFilterResult = pathFilterResult;
-        this.mountInfoProvider = parent.mountInfoProvider;
     }
     
     /**
@@ -216,9 +221,8 @@ class PropertyIndexEditor implements Ind
         return keys;
     }
 
-    Set<IndexStoreStrategy> getStrategies(boolean unique) {
-        return Multiplexers.getStrategies(unique, mountInfoProvider,
-                definition, INDEX_CONTENT_NODE_NAME);
+    IndexStoreStrategy getStrategy(boolean unique) {
+        return unique ? UNIQUE : MIRROR;
     }
 
     @Override
@@ -281,18 +285,15 @@ class PropertyIndexEditor implements Ind
 
             if (!beforeKeys.isEmpty() || !afterKeys.isEmpty()) {
                 updateCallback.indexUpdate();
+                NodeBuilder index = definition.child(INDEX_CONTENT_NODE_NAME);
                 String properties = definition.getString(PROPERTY_NAMES);
                 boolean uniqueIndex = keysToCheckForUniqueness != null;
-                for (IndexStoreStrategy strategy : getStrategies(uniqueIndex)) {
-                    NodeBuilder index = definition.child(strategy
-                            .getIndexNodeName());
-                    if (uniqueIndex) {
-                        keysToCheckForUniqueness.addAll(getExistingKeys(
-                                afterKeys, index, strategy));
-                    }
-                    strategy.update(index, getPath(), properties, definition,
-                            beforeKeys, afterKeys);
+                if (uniqueIndex) {
+                    keysToCheckForUniqueness.addAll(
+                            getExistingKeys(afterKeys, index));
                 }
+                getStrategy(uniqueIndex).update(
+                        index, getPath(), properties, definition, beforeKeys, afterKeys);
             }
         }
 
@@ -327,11 +328,11 @@ class PropertyIndexEditor implements Ind
      * 
      * @param keys the keys
      * @param index the index
-     * @param s the index store strategy
      * @return the set of keys that already exist in this unique index
      */
-    private Set<String> getExistingKeys(Set<String> keys, NodeBuilder index, IndexStoreStrategy s) {
+    private Set<String> getExistingKeys(Set<String> keys, NodeBuilder index) {
         Set<String> existing = null;
+        IndexStoreStrategy s = getStrategy(true);
         for (String key : keys) {
             if (s.exists(index, key)) {
                 if (existing == null) {
@@ -345,7 +346,7 @@ class PropertyIndexEditor implements Ind
         }
         return existing;
     }
-
+        
     /**
      * From a set of keys, get the first that has multiple entries, if any.
      * 
@@ -354,13 +355,10 @@ class PropertyIndexEditor implements Ind
      * @return the first duplicate, or null if none was found
      */
     private String getFirstDuplicate(Set<String> keys, NodeState indexMeta) {
+        IndexStoreStrategy s = getStrategy(true);
         for (String key : keys) {
-            long count = 0;
-            for (IndexStoreStrategy s : getStrategies(true)) {
-                count += s.count(root, indexMeta, singleton(key), 2);
-                if (count > 1) {
-                    return key;
-                }
+            if (s.count(root, indexMeta, singleton(key), 2) > 1) {
+                return key;
             }
         }
         return null;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditorProvider.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexEditorProvider.java Mon Jul 25 12:19:03 2016
@@ -20,14 +20,11 @@ import javax.annotation.Nonnull;
 
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
 import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
 import org.apache.jackrabbit.oak.plugins.index.IndexUpdateCallback;
-import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
-import org.apache.jackrabbit.oak.spi.mount.Mounts;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
@@ -45,20 +42,13 @@ public class PropertyIndexEditorProvider
 
     public static final String TYPE = "property";
 
-    @Reference
-    private MountInfoProvider mountInfoProvider = Mounts.defaultMountInfoProvider();
-
     @Override
     public Editor getIndexEditor(
             @Nonnull String type, @Nonnull NodeBuilder definition, @Nonnull NodeState root, @Nonnull IndexUpdateCallback callback) {
         if (TYPE.equals(type)) {
-            return new PropertyIndexEditor(definition, root, callback, mountInfoProvider);
+            return new PropertyIndexEditor(definition, root, callback);
         }
         return null;
     }
 
-    public PropertyIndexEditorProvider with(MountInfoProvider mountInfoProvider) {
-        this.mountInfoProvider = mountInfoProvider;
-        return this;
-    }
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexLookup.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexLookup.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexLookup.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexLookup.java Mon Jul 25 12:19:03 2016
@@ -25,7 +25,6 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexEditorProvider.TYPE;
 import static org.apache.jackrabbit.oak.plugins.index.property.PropertyIndex.encode;
 
-import java.util.List;
 import java.util.Set;
 
 import javax.annotation.CheckForNull;
@@ -36,16 +35,13 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Type;
 import org.apache.jackrabbit.oak.commons.PathUtils;
 import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
+import org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy;
 import org.apache.jackrabbit.oak.plugins.index.property.strategy.IndexStoreStrategy;
-import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
-import org.apache.jackrabbit.oak.spi.mount.Mounts;
+import org.apache.jackrabbit.oak.plugins.index.property.strategy.UniqueEntryStoreStrategy;
 import org.apache.jackrabbit.oak.spi.query.Filter;
 import org.apache.jackrabbit.oak.spi.state.ChildNodeEntry;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
 /**
  * Is responsible for querying the property index content.
  * <br>
@@ -72,17 +68,18 @@ public class PropertyIndexLookup {
      */
     static final int MAX_COST = 100;
 
-    private final NodeState root;
+    /** Index storage strategy */
+    private static final IndexStoreStrategy MIRROR =
+            new ContentMirrorStoreStrategy();
+
+    /** Index storage strategy */
+    private static final IndexStoreStrategy UNIQUE =
+            new UniqueEntryStoreStrategy();
 
-    private final MountInfoProvider mountInfoProvider;
+    private final NodeState root;
 
     public PropertyIndexLookup(NodeState root) {
-        this(root, Mounts.defaultMountInfoProvider());
-    }
-
-    public PropertyIndexLookup(NodeState root, MountInfoProvider mountInfoProvider) {
         this.root = root;
-        this.mountInfoProvider = mountInfoProvider;
     }
 
     /**
@@ -110,25 +107,19 @@ public class PropertyIndexLookup {
         return false;
     }
 
-    public Iterable<String> query(Filter filter, String propertyName,
-            PropertyValue value) {
+    public Iterable<String> query(Filter filter, String propertyName, PropertyValue value) {
         NodeState indexMeta = getIndexNode(root, propertyName, filter);
         if (indexMeta == null) {
             throw new IllegalArgumentException("No index for " + propertyName);
         }
-        List<Iterable<String>> iterables = Lists.newArrayList();
-        for (IndexStoreStrategy s : getStrategies(indexMeta)) {
-            iterables.add(s.query(filter, propertyName, indexMeta,
-                    encode(value)));
-        }
-        return Iterables.concat(iterables);
+        return getStrategy(indexMeta).query(filter, propertyName, indexMeta, encode(value));
     }
 
-    Set<IndexStoreStrategy> getStrategies(NodeState definition) {
-        boolean unique = definition
-                .getBoolean(IndexConstants.UNIQUE_PROPERTY_NAME);
-        return Multiplexers.getStrategies(unique, mountInfoProvider,
-                definition, INDEX_CONTENT_NODE_NAME);
+    IndexStoreStrategy getStrategy(NodeState indexMeta) {
+        if (indexMeta.getBoolean(IndexConstants.UNIQUE_PROPERTY_NAME)) {
+            return UNIQUE;
+        }
+        return MIRROR;
     }
 
     public double getCost(Filter filter, String propertyName, PropertyValue value) {
@@ -136,12 +127,8 @@ public class PropertyIndexLookup {
         if (indexMeta == null) {
             return Double.POSITIVE_INFINITY;
         }
-        Set<IndexStoreStrategy> strategies = getStrategies(indexMeta);
-        double cost = strategies.isEmpty() ? MAX_COST : COST_OVERHEAD;
-        for (IndexStoreStrategy s : strategies) {
-            cost += s.count(filter, root, indexMeta, encode(value), MAX_COST);
-        }
-        return cost;
+        return COST_OVERHEAD +
+                getStrategy(indexMeta).count(filter, root, indexMeta, encode(value), MAX_COST);
     }
 
     /**

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexPlan.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexPlan.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexPlan.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexPlan.java Mon Jul 25 12:19:03 2016
@@ -22,30 +22,25 @@ import static com.google.common.collect.
 import static com.google.common.collect.Sets.newLinkedHashSet;
 import static java.util.Collections.emptySet;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.DECLARING_NODE_TYPES;
-import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_CONTENT_NODE_NAME;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.PROPERTY_NAMES;
+import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.UNIQUE_PROPERTY_NAME;
 import static org.apache.jackrabbit.oak.plugins.index.property.PropertyIndex.encode;
 
-import java.util.List;
 import java.util.Set;
 
 import org.apache.jackrabbit.oak.api.PropertyValue;
 import org.apache.jackrabbit.oak.commons.PathUtils;
-import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
 import org.apache.jackrabbit.oak.plugins.index.PathFilter;
+import org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy;
 import org.apache.jackrabbit.oak.plugins.index.property.strategy.IndexStoreStrategy;
+import org.apache.jackrabbit.oak.plugins.index.property.strategy.UniqueEntryStoreStrategy;
 import org.apache.jackrabbit.oak.query.QueryEngineSettings;
-import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
-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.query.Filter;
 import org.apache.jackrabbit.oak.spi.query.Filter.PropertyRestriction;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
 /**
  * Plan for querying a given property index using a given filter.
  */
@@ -61,13 +56,21 @@ public class PropertyIndexPlan {
      */
     static final int MAX_COST = 100;
 
+    /** Index storage strategy */
+    private static final IndexStoreStrategy MIRROR =
+            new ContentMirrorStoreStrategy();
+
+    /** Index storage strategy */
+    private static final IndexStoreStrategy UNIQUE =
+            new UniqueEntryStoreStrategy();
+
     private final NodeState definition;
 
     private final String name;
 
     private final Set<String> properties;
 
-    private final Set<IndexStoreStrategy> strategies;
+    private final IndexStoreStrategy strategy;
 
     private final Filter filter;
 
@@ -83,18 +86,18 @@ public class PropertyIndexPlan {
 
     private final PathFilter pathFilter;
 
-    PropertyIndexPlan(String name, NodeState root, NodeState definition,
-                      Filter filter){
-        this(name, root, definition, filter, Mounts.defaultMountInfoProvider());
-    }
-
-    PropertyIndexPlan(String name, NodeState root, NodeState definition,
-                      Filter filter, MountInfoProvider mountInfoProvider) {
+    PropertyIndexPlan(String name, NodeState root, NodeState definition, Filter filter) {
         this.name = name;
         this.definition = definition;
         this.properties = newHashSet(definition.getNames(PROPERTY_NAMES));
         pathFilter = PathFilter.from(definition.builder());
-        this.strategies = getStrategies(definition, mountInfoProvider);
+
+        if (definition.getBoolean(UNIQUE_PROPERTY_NAME)) {
+            this.strategy = UNIQUE;
+        } else {
+            this.strategy = MIRROR;
+        }
+
         this.filter = filter;
 
         Iterable<String> types = definition.getNames(DECLARING_NODE_TYPES);
@@ -140,11 +143,7 @@ public class PropertyIndexPlan {
                         continue;
                     }
                     Set<String> values = getValues(restriction);
-                    double cost = strategies.isEmpty() ? MAX_COST : 0;
-                    for (IndexStoreStrategy strategy : strategies) {
-                        cost += strategy.count(filter, root, definition,
-                                values, MAX_COST);
-                    }
+                    double cost = strategy.count(filter, root, definition, values, MAX_COST);
                     if (cost < bestCost) {
                         bestDepth = depth;
                         bestValues = values;
@@ -189,11 +188,8 @@ public class PropertyIndexPlan {
 
     Cursor execute() {
         QueryEngineSettings settings = filter.getQueryEngineSettings();
-        List<Iterable<String>> iterables = Lists.newArrayList();
-        for (IndexStoreStrategy s : strategies) {
-            iterables.add(s.query(filter, name, definition, values));
-        }
-        Cursor cursor = Cursors.newPathCursor(Iterables.concat(iterables),
+        Cursor cursor = Cursors.newPathCursor(
+                strategy.query(filter, name, definition, values),
                 settings);
         if (depth > 1) {
             cursor = Cursors.newAncestorCursor(cursor, depth - 1, settings);
@@ -205,14 +201,6 @@ public class PropertyIndexPlan {
         return filter;
     }
 
-    Set<IndexStoreStrategy> getStrategies(NodeState definition,
-            MountInfoProvider mountInfoProvider) {
-        boolean unique = definition
-                .getBoolean(IndexConstants.UNIQUE_PROPERTY_NAME);
-        return Multiplexers.getStrategies(unique, mountInfoProvider,
-                definition, INDEX_CONTENT_NODE_NAME);
-    }
-
     //------------------------------------------------------------< Object >--
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexProvider.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexProvider.java Mon Jul 25 12:19:03 2016
@@ -21,10 +21,7 @@ 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;
@@ -43,16 +40,8 @@ import com.google.common.collect.Immutab
 @Service(QueryIndexProvider.class)
 public class PropertyIndexProvider implements QueryIndexProvider {
 
-    @Reference
-    private MountInfoProvider mountInfoProvider = Mounts.defaultMountInfoProvider();
-
     @Override @Nonnull
     public List<QueryIndex> getQueryIndexes(NodeState state) {
-        return ImmutableList.<QueryIndex>of(new PropertyIndex(mountInfoProvider));
-    }
-
-    public PropertyIndexProvider with(MountInfoProvider mountInfoProvider) {
-        this.mountInfoProvider = mountInfoProvider;
-        return this;
+        return ImmutableList.<QueryIndex>of(new PropertyIndex());
     }
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/ContentMirrorStoreStrategy.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/ContentMirrorStoreStrategy.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/ContentMirrorStoreStrategy.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/ContentMirrorStoreStrategy.java Mon Jul 25 12:19:03 2016
@@ -80,16 +80,6 @@ public class ContentMirrorStoreStrategy
      */
     public static final int TRAVERSING_WARN = Integer.getInteger("oak.traversing.warn", 10000);
 
-    private final String indexName;
-
-    public ContentMirrorStoreStrategy() {
-        this(INDEX_CONTENT_NODE_NAME);
-    }
-
-    public ContentMirrorStoreStrategy(String indexName) {
-        this.indexName = indexName;
-    }
-
     @Override
     public void update(
             NodeBuilder index, String path,
@@ -173,22 +163,27 @@ public class ContentMirrorStoreStrategy
     }
 
     @Override
-    public Iterable<String> query(final Filter filter, final String name,
+    public Iterable<String> query(final Filter filter, final String indexName,
             final NodeState indexMeta, final Iterable<String> values) {
-        return query(filter, name, indexMeta, this.indexName, values);
+        return query(filter, indexName, indexMeta, INDEX_CONTENT_NODE_NAME, values);
     }
 
     @Override
     public long count(NodeState root, NodeState indexMeta, Set<String> values, int max) {
-        return count(null, root, indexMeta, this.indexName, values, max);
+        return count(root, indexMeta, INDEX_CONTENT_NODE_NAME, values, max);
     }
 
     @Override
     public long count(final Filter filter, NodeState root, NodeState indexMeta, Set<String> values, int max) {
-        return count(filter, root, indexMeta, this.indexName, values, max);
+        return count(filter, root, indexMeta, INDEX_CONTENT_NODE_NAME, values, max);
     }
 
-    long count(Filter filter, NodeState root, NodeState indexMeta, final String indexStorageNodeName,
+    public long count(NodeState root, NodeState indexMeta, final String indexStorageNodeName,
+            Set<String> values, int max) {
+        return count(null, root, indexMeta, indexStorageNodeName, values, max);
+    }
+
+    public long count(Filter filter, NodeState root, NodeState indexMeta, final String indexStorageNodeName,
             Set<String> values, int max) {
         NodeState index = indexMeta.getChildNode(indexStorageNodeName);
         long count = -1;
@@ -591,8 +586,4 @@ public class ContentMirrorStoreStrategy
         throw new UnsupportedOperationException();
    }
 
-    @Override
-    public String getIndexNodeName() {
-        return indexName;
-    }
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/IndexStoreStrategy.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/IndexStoreStrategy.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/IndexStoreStrategy.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/IndexStoreStrategy.java Mon Jul 25 12:19:03 2016
@@ -18,7 +18,6 @@ package org.apache.jackrabbit.oak.plugin
 
 import java.util.Set;
 
-import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.spi.query.Filter;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -42,7 +41,7 @@ public interface IndexStoreStrategy {
     void update(
         NodeBuilder index, String path,
         String indexName, NodeBuilder indexMeta,
-        Set<String> beforeKeys, Set<String> afterKeys) throws CommitFailedException;
+        Set<String> beforeKeys, Set<String> afterKeys);
 
     /**
      * Check whether an entry for the given key exists.
@@ -89,6 +88,4 @@ public interface IndexStoreStrategy {
      */
     long count(Filter filter, NodeState root, NodeState indexMeta, Set<String> values, int max);
 
-    String getIndexNodeName();
-
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/UniqueEntryStoreStrategy.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/UniqueEntryStoreStrategy.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/UniqueEntryStoreStrategy.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/UniqueEntryStoreStrategy.java Mon Jul 25 12:19:03 2016
@@ -47,16 +47,6 @@ public class UniqueEntryStoreStrategy im
 
     static final Logger LOG = LoggerFactory.getLogger(UniqueEntryStoreStrategy.class);
 
-    private final String indexName;
-
-    public UniqueEntryStoreStrategy() {
-        this(INDEX_CONTENT_NODE_NAME);
-    }
-
-    public UniqueEntryStoreStrategy(String indexName) {
-        this.indexName = indexName;
-    }
-
     @Override
     public void update(
             NodeBuilder index, String path,
@@ -118,7 +108,7 @@ public class UniqueEntryStoreStrategy im
     @Override
     public Iterable<String> query(final Filter filter, final String indexName, 
             final NodeState indexMeta, final Iterable<String> values) {
-        final NodeState index = indexMeta.getChildNode(getIndexNodeName());
+        final NodeState index = indexMeta.getChildNode(INDEX_CONTENT_NODE_NAME);
         return new Iterable<String>() {
             @Override
             public Iterator<String> iterator() {
@@ -167,7 +157,7 @@ public class UniqueEntryStoreStrategy im
 
     @Override
     public long count(NodeState root, NodeState indexMeta, Set<String> values, int max) {
-        NodeState index = indexMeta.getChildNode(getIndexNodeName());
+        NodeState index = indexMeta.getChildNode(INDEX_CONTENT_NODE_NAME);
         long count = 0;
         if (values == null) {
             PropertyState ec = indexMeta.getProperty(ENTRY_COUNT_PROPERTY_NAME);
@@ -203,9 +193,5 @@ public class UniqueEntryStoreStrategy im
     public long count(final Filter filter, NodeState root, NodeState indexMeta, Set<String> values, int max) {
         return count(root, indexMeta, values, max);
     }
-
-    @Override
-    public String getIndexNodeName() {
-        return indexName;
-    }
+    
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditor.java Mon Jul 25 12:19:03 2016
@@ -42,11 +42,9 @@ import com.google.common.collect.Sets;
 import org.apache.jackrabbit.oak.api.CommitFailedException;
 import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.plugins.index.IndexEditor;
-import org.apache.jackrabbit.oak.plugins.index.property.Multiplexers;
-import org.apache.jackrabbit.oak.plugins.index.property.strategy.IndexStoreStrategy;
+import org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy;
 import org.apache.jackrabbit.oak.spi.commit.DefaultEditor;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
-import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
@@ -56,6 +54,8 @@ import org.apache.jackrabbit.oak.spi.sta
  */
 class ReferenceEditor extends DefaultEditor implements IndexEditor {
 
+    private static final ContentMirrorStoreStrategy STORE = new ContentMirrorStoreStrategy();
+
     /** Parent editor, or {@code null} if this is the root editor. */
     private final ReferenceEditor parent;
 
@@ -101,15 +101,13 @@ class ReferenceEditor extends DefaultEdi
      */
     private final Set<String> newIds;
 
-    private final MountInfoProvider mountInfoProvider;
-
     /**
      * flag marking a reindex, case in which we don't need to keep track of the
      * newIds set
      */
     private boolean isReindex;
 
-    public ReferenceEditor(NodeBuilder definition, NodeState root,MountInfoProvider mountInfoProvider) {
+    public ReferenceEditor(NodeBuilder definition, NodeState root) {
         this.parent = null;
         this.name = null;
         this.path = "/";
@@ -121,7 +119,6 @@ class ReferenceEditor extends DefaultEdi
         this.rmWeakRefs = newHashMap();
         this.rmIds = newHashSet();
         this.newIds = newHashSet();
-        this.mountInfoProvider = mountInfoProvider;
     }
 
     private ReferenceEditor(ReferenceEditor parent, String name) {
@@ -137,7 +134,6 @@ class ReferenceEditor extends DefaultEdi
         this.rmIds = parent.rmIds;
         this.newIds = parent.newIds;
         this.isReindex = parent.isReindex;
-        this.mountInfoProvider = parent.mountInfoProvider;
     }
 
     /**
@@ -162,8 +158,6 @@ class ReferenceEditor extends DefaultEdi
     public void leave(NodeState before, NodeState after)
             throws CommitFailedException {
         if (parent == null) {
-            Set<IndexStoreStrategy> refStores = getStrategies(false, REF_NAME);
-            Set<IndexStoreStrategy> weakRefStores = getStrategies(false, WEAK_REF_NAME);
             // update references
             for (Entry<String, Set<String>> ref : rmRefs.entrySet()) {
                 String uuid = ref.getKey();
@@ -172,7 +166,7 @@ class ReferenceEditor extends DefaultEdi
                 if (newRefs.containsKey(uuid)) {
                     add = newRefs.remove(uuid);
                 }
-                update(refStores, definition, REF_NAME, uuid, add, rm);
+                update(definition, REF_NAME, uuid, add, rm);
             }
             for (Entry<String, Set<String>> ref : newRefs.entrySet()) {
                 String uuid = ref.getKey();
@@ -181,10 +175,10 @@ class ReferenceEditor extends DefaultEdi
                 }
                 Set<String> add = ref.getValue();
                 Set<String> rm = emptySet();
-                update(refStores, definition, REF_NAME, uuid, add, rm);
+                update(definition, REF_NAME, uuid, add, rm);
             }
 
-            checkReferentialIntegrity(refStores, root, definition.getNodeState(),
+            checkReferentialIntegrity(root, definition.getNodeState(),
                     Sets.difference(rmIds, newIds));
 
             // update weak references
@@ -195,22 +189,17 @@ class ReferenceEditor extends DefaultEdi
                 if (newWeakRefs.containsKey(uuid)) {
                     add = newWeakRefs.remove(uuid);
                 }
-                update(weakRefStores, definition, WEAK_REF_NAME, uuid, add, rm);
+                update(definition, WEAK_REF_NAME, uuid, add, rm);
             }
             for (Entry<String, Set<String>> ref : newWeakRefs.entrySet()) {
                 String uuid = ref.getKey();
                 Set<String> add = ref.getValue();
                 Set<String> rm = emptySet();
-                update(weakRefStores, definition, WEAK_REF_NAME, uuid, add, rm);
+                update(definition, WEAK_REF_NAME, uuid, add, rm);
             }
         }
     }
 
-    Set<IndexStoreStrategy> getStrategies(boolean unique, String index) {
-        return Multiplexers.getStrategies(unique, mountInfoProvider,
-                definition, index);
-    }
-
     @Override
     public void propertyAdded(PropertyState after) {
         propertyChanged(null, after);
@@ -303,43 +292,35 @@ class ReferenceEditor extends DefaultEdi
         }
     }
 
-    private void update(Set<IndexStoreStrategy> refStores,
-            NodeBuilder definition, String name, String key, Set<String> add,
-            Set<String> rm) throws CommitFailedException {
-        for (IndexStoreStrategy store : refStores) {
-            Set<String> empty = of();
-            for (String p : rm) {
-                NodeBuilder index = definition.child(store.getIndexNodeName());
-                store.update(index, p, name, definition, of(key), empty);
-            }
-            for (String p : add) {
-                // TODO do we still need to encode the values?
-                NodeBuilder index = definition.child(store.getIndexNodeName());
-                store.update(index, p, name, definition, empty, of(key));
-            }
+    private static void update(NodeBuilder child, String name, String key,
+            Set<String> add, Set<String> rm) {
+        NodeBuilder index = child.child(name);
+        Set<String> empty = of();
+        for (String p : rm) {
+            STORE.update(index, p, name, child, of(key), empty);
+        }
+        for (String p : add) {
+            // TODO do we still need to encode the values?
+            STORE.update(index, p, name, child, empty, of(key));
         }
     }
 
-    private static boolean hasReferences(IndexStoreStrategy refStore,
-                                  NodeState root,
-                                  NodeState definition,
-                                  String name,
-                                  String key) {
+    private static boolean hasReferences(NodeState root,
+                                         NodeState definition,
+                                         String name,
+                                         String key) {
         return definition.hasChildNode(name)
-                && refStore.count(root, definition, of(key), 1) > 0;
+                && STORE.count(root, definition, name, of(key), 1) > 0;
     }
 
-    private static void checkReferentialIntegrity(Set<IndexStoreStrategy> refStores,
-                                           NodeState root,
-                                           NodeState definition,
-                                           Set<String> idsOfRemovedNodes)
+    private static void checkReferentialIntegrity(NodeState root,
+                                                  NodeState definition,
+                                                  Set<String> idsOfRemovedNodes)
             throws CommitFailedException {
-        for (IndexStoreStrategy store : refStores) {
-            for (String id : idsOfRemovedNodes) {
-                if (hasReferences(store, root, definition, REF_NAME, id)) {
-                    throw new CommitFailedException(INTEGRITY, 1,
-                            "Unable to delete referenced node");
-                }
+        for (String id : idsOfRemovedNodes) {
+            if (hasReferences(root, definition, REF_NAME, id)) {
+                throw new CommitFailedException(INTEGRITY, 1,
+                        "Unable to delete referenced node");
             }
         }
     }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditorProvider.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceEditorProvider.java Mon Jul 25 12:19:03 2016
@@ -16,20 +16,17 @@
  */
 package org.apache.jackrabbit.oak.plugins.index.reference;
 
-import static org.apache.jackrabbit.oak.plugins.index.reference.NodeReferenceConstants.TYPE;
-
 import javax.annotation.Nonnull;
 
+import static org.apache.jackrabbit.oak.plugins.index.reference.NodeReferenceConstants.TYPE;
+
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
 import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.plugins.index.IndexUpdateCallback;
 import org.apache.jackrabbit.oak.spi.commit.Editor;
-import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
-import org.apache.jackrabbit.oak.spi.mount.Mounts;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
@@ -38,21 +35,13 @@ import org.apache.jackrabbit.oak.spi.sta
 @Property(name = IndexConstants.TYPE_PROPERTY_NAME , value = NodeReferenceConstants.TYPE, propertyPrivate = true)
 public class ReferenceEditorProvider implements IndexEditorProvider {
 
-    @Reference
-    private MountInfoProvider mountInfoProvider = Mounts.defaultMountInfoProvider();
-
     @Override
     public Editor getIndexEditor(@Nonnull String type, @Nonnull NodeBuilder definition,
             @Nonnull NodeState root, @Nonnull IndexUpdateCallback callback) {
         if (TYPE.equals(type)) {
-            return new ReferenceEditor(definition, root, mountInfoProvider);
+            return new ReferenceEditor(definition, root);
         }
         return null;
     }
 
-    public ReferenceEditorProvider with(MountInfoProvider mountInfoProvider) {
-        this.mountInfoProvider = mountInfoProvider;
-        return this;
-    }
-
 }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceIndex.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceIndex.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceIndex.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceIndex.java Mon Jul 25 12:19:03 2016
@@ -31,14 +31,9 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.spi.query.Cursors.newPathCursor;
 
 import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
 
-import org.apache.jackrabbit.oak.plugins.index.property.Multiplexers;
-import org.apache.jackrabbit.oak.plugins.index.property.strategy.IndexStoreStrategy;
+import org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy;
 import org.apache.jackrabbit.oak.query.index.FilterImpl;
-import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
-import org.apache.jackrabbit.oak.spi.mount.Mounts;
 import org.apache.jackrabbit.oak.spi.query.Cursor;
 import org.apache.jackrabbit.oak.spi.query.Filter;
 import org.apache.jackrabbit.oak.spi.query.Filter.PropertyRestriction;
@@ -48,8 +43,6 @@ import org.apache.jackrabbit.oak.spi.sta
 import com.google.common.base.Function;
 import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
 
 /**
  * Provides a QueryIndex that does lookups for node references based on a custom
@@ -58,17 +51,9 @@ import com.google.common.collect.Lists;
  */
 class ReferenceIndex implements QueryIndex {
 
-    private static final double COST = 1;
-
-    private final MountInfoProvider mountInfoProvider;
+    private static final ContentMirrorStoreStrategy STORE = new ContentMirrorStoreStrategy();
 
-    ReferenceIndex() {
-        this(Mounts.defaultMountInfoProvider());
-    }
-
-    ReferenceIndex(MountInfoProvider mountInfoProvider) {
-        this.mountInfoProvider = mountInfoProvider;
-    }
+    private static final double COST = 1;
 
     @Override
     public double getMinimumCost() {
@@ -125,19 +110,15 @@ class ReferenceIndex implements QueryInd
         return newPathCursor(new ArrayList<String>(), filter.getQueryEngineSettings());
     }
 
-    private Cursor lookup(NodeState root, String uuid,
+    private static Cursor lookup(NodeState root, String uuid,
             final String name, String index, Filter filter) {
         NodeState indexRoot = root.getChildNode(INDEX_DEFINITIONS_NAME)
                 .getChildNode(NAME);
         if (!indexRoot.exists()) {
             return newPathCursor(new ArrayList<String>(), filter.getQueryEngineSettings());
         }
-        List<Iterable<String>> iterables = Lists.newArrayList();
-        for (IndexStoreStrategy s : getStrategies(indexRoot, mountInfoProvider, index)) {
-            iterables.add(s.query(new FilterImpl(), index + "("
-                    + uuid + ")", indexRoot, ImmutableSet.of(uuid)));
-        }
-        Iterable<String> paths = Iterables.concat(iterables);
+        Iterable<String> paths = STORE.query(new FilterImpl(), index + "("
+                + uuid + ")", indexRoot, index, ImmutableSet.of(uuid));
 
         if (!"*".equals(name)) {
             paths = filter(paths, new Predicate<String>() {
@@ -156,12 +137,6 @@ class ReferenceIndex implements QueryInd
         return newPathCursor(paths, filter.getQueryEngineSettings());
     }
 
-    private static Set<IndexStoreStrategy> getStrategies(NodeState definition,
-            MountInfoProvider mountInfoProvider, String index) {
-        return Multiplexers.getStrategies(false, mountInfoProvider, definition,
-                index);
-    }
-
     @Override
     public String getPlan(Filter filter, NodeState root) {
         StringBuilder buff = new StringBuilder("reference");

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceIndexProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceIndexProvider.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceIndexProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/reference/ReferenceIndexProvider.java Mon Jul 25 12:19:03 2016
@@ -21,10 +21,7 @@ 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,17 +35,9 @@ import com.google.common.collect.Immutab
 @Service(QueryIndexProvider.class)
 public class ReferenceIndexProvider implements QueryIndexProvider {
 
-    @Reference
-    private MountInfoProvider mountInfoProvider = Mounts.defaultMountInfoProvider();
-
     @Override
     @Nonnull
     public List<QueryIndex> getQueryIndexes(NodeState state) {
-        return ImmutableList.<QueryIndex> of(new ReferenceIndex(mountInfoProvider));
-    }
-
-    public ReferenceIndexProvider with(MountInfoProvider mountInfoProvider) {
-        this.mountInfoProvider = mountInfoProvider;
-        return this;
+        return ImmutableList.<QueryIndex> of(new ReferenceIndex());
     }
 }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java Mon Jul 25 12:19:03 2016
@@ -21,7 +21,6 @@ import static org.apache.jackrabbit.JcrC
 import static org.apache.jackrabbit.JcrConstants.NT_BASE;
 import static org.apache.jackrabbit.JcrConstants.NT_FILE;
 import static org.apache.jackrabbit.JcrConstants.NT_UNSTRUCTURED;
-import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_CONTENT_NODE_NAME;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME;
 import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_PATH;
 import static org.apache.jackrabbit.oak.plugins.index.IndexUtils.createIndexDefinition;
@@ -31,7 +30,6 @@ import static org.apache.jackrabbit.oak.
 import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE;
 import static org.apache.jackrabbit.oak.plugins.memory.PropertyStates.createProperty;
 import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT;
-import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.getNode;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
@@ -45,7 +43,6 @@ import org.apache.jackrabbit.oak.api.Typ
 import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider;
 import org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy;
 import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState;
-import org.apache.jackrabbit.oak.plugins.multiplex.SimpleMountInfoProvider;
 import org.apache.jackrabbit.oak.query.NodeStateNodeTypeInfoProvider;
 import org.apache.jackrabbit.oak.query.QueryEngineSettings;
 import org.apache.jackrabbit.oak.query.ast.NodeTypeInfo;
@@ -56,8 +53,6 @@ import org.apache.jackrabbit.oak.query.i
 import org.apache.jackrabbit.oak.query.index.TraversingIndex;
 import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
 import org.apache.jackrabbit.oak.spi.commit.EditorHook;
-import org.apache.jackrabbit.oak.spi.mount.Mount;
-import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
 import org.apache.jackrabbit.oak.spi.query.Filter;
 import org.apache.jackrabbit.oak.spi.query.PropertyValues;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -751,107 +746,6 @@ public class PropertyIndexTest {
         assertEquals("/oak:index/foo", idxDefn.getString(INDEX_PATH));
     }
 
-    @Test
-    public void singleMount() throws Exception {
-        NodeState root = INITIAL_CONTENT;
-
-        // Add index definition
-        NodeBuilder builder = root.builder();
-        NodeBuilder index = createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "foo",
-                true, false, ImmutableSet.of("foo"), null);
-        index.setProperty("entryCount", -1);
-        NodeState before = builder.getNodeState();
-
-        // Add some content and process it through the property index hook
-        builder.child("a").setProperty("foo", "abc");
-        builder.child("b").child("x").setProperty("foo", "abc");
-        builder.child("a").child("x").setProperty("foo", "abc");
-        builder.child("m").child("n").setProperty("foo", "abc");
-        builder.child("m").child("n").child("o").setProperty("foo", "abc");
-        builder.child("m").setProperty("foo", "abc");
-
-        NodeState after = builder.getNodeState();
-
-        MountInfoProvider mip = SimpleMountInfoProvider.newBuilder()
-                .mount("foo", "/a", "/m/n")
-                .build();
-
-        Mount fooMount = mip.getMountByName("foo");
-        Mount defMount = mip.getDefaultMount();
-
-        EditorHook hook = new EditorHook(
-                new IndexUpdateProvider(new PropertyIndexEditorProvider().with(mip)));
-
-        NodeState indexed = hook.processCommit(before, after, CommitInfo.EMPTY);
-
-        FilterImpl f = createFilter(indexed, NT_BASE);
-
-        // Query the index
-        PropertyIndexLookup lookup = new PropertyIndexLookup(indexed,mip);
-        assertEquals(ImmutableSet.of("a", "b/x", "a/x", "m", "m/n", "m/n/o"), find(lookup, "foo", "abc", f));
-        assertEquals(ImmutableSet.of(), find(lookup, "foo", "ghi", f));
-
-        assertTrue(getNode(indexed, "/oak:index/foo/:index").exists());
-
-        //Separate node for mount
-        assertTrue(getNode(indexed, "/oak:index/foo/"+ getNodeForMount(fooMount)).exists());
-
-        //Index entries for paths in foo mount should go to :oak:foo-index
-        assertTrue(getNode(indexed, pathInIndex(fooMount, "/oak:index/foo", "/a", "abc")).exists());
-        assertTrue(getNode(indexed, pathInIndex(fooMount, "/oak:index/foo", "/a/x", "abc")).exists());
-        assertTrue(getNode(indexed, pathInIndex(fooMount, "/oak:index/foo", "/m/n", "abc")).exists());
-        assertTrue(getNode(indexed, pathInIndex(fooMount, "/oak:index/foo", "/m/n/o", "abc")).exists());
-        assertFalse(getNode(indexed, pathInIndex(defMount, "/oak:index/foo", "/a", "abc")).exists());
-        assertFalse(getNode(indexed, pathInIndex(defMount, "/oak:index/foo", "/a/x", "abc")).exists());
-        assertFalse(getNode(indexed, pathInIndex(defMount, "/oak:index/foo", "/m/n", "abc")).exists());
-        assertFalse(getNode(indexed, pathInIndex(defMount, "/oak:index/foo", "/m/n/o", "abc")).exists());
-
-        //All other index entries should go to :index
-        assertTrue(getNode(indexed, pathInIndex(defMount, "/oak:index/foo", "/b", "abc")).exists());
-        assertTrue(getNode(indexed, pathInIndex(defMount, "/oak:index/foo", "/b/x", "abc")).exists());
-        assertTrue(getNode(indexed, pathInIndex(defMount, "/oak:index/foo", "/m", "abc")).exists());
-        assertFalse(getNode(indexed, pathInIndex(fooMount, "/oak:index/foo", "/b", "abc")).exists());
-        assertFalse(getNode(indexed, pathInIndex(fooMount, "/oak:index/foo", "/b/x", "abc")).exists());
-
-        //System.out.println(NodeStateUtils.toString(getNode(indexed, "/oak:index/foo")));
-
-    }
-
-    @Test(expected = CommitFailedException.class)
-    public void mountAndUniqueIndexes() throws Exception {
-        NodeState root = INITIAL_CONTENT;
-
-        // Add index definition
-        NodeBuilder builder = root.builder();
-        NodeBuilder index = createIndexDefinition(builder.child(INDEX_DEFINITIONS_NAME), "foo",
-                true, true, ImmutableSet.of("foo"), null);
-        index.setProperty("entryCount", -1);
-        NodeState before = builder.getNodeState();
-
-        MountInfoProvider mip = SimpleMountInfoProvider.newBuilder()
-                .mount("foo", "/a")
-                .build();
-
-        builder.child("a").setProperty("foo", "abc");
-        builder.child("b").setProperty("foo", Arrays.asList("abc", "def"),
-                Type.STRINGS);
-        NodeState after = builder.getNodeState();
-
-        EditorHook hook = new EditorHook(
-                new IndexUpdateProvider(new PropertyIndexEditorProvider().with(mip)));
-        // should throw
-        hook.processCommit(before, after, CommitInfo.EMPTY);
-    }
-
-    private static String pathInIndex(Mount mount,
-                                      String indexPath, String indexedPath, String indexedValue){
-        return indexPath + "/" + getNodeForMount(mount) + "/" + indexedValue + indexedPath;
-    }
-
-    private static String getNodeForMount(Mount mount) {
-        return Multiplexers.getNodeForMount(mount, INDEX_CONTENT_NODE_NAME);
-    }
-
     private int getResultSize(NodeState indexed, String name, String value){
         FilterImpl f = createFilter(indexed, NT_BASE);
 

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/ContentMirrorStoreStrategyTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/ContentMirrorStoreStrategyTest.java?rev=1753982&r1=1753981&r2=1753982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/ContentMirrorStoreStrategyTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/ContentMirrorStoreStrategyTest.java Mon Jul 25 12:19:03 2016
@@ -63,7 +63,7 @@ public class ContentMirrorStoreStrategyT
      * </ul>
      */
     @Test
-    public void testIndexPruning() throws CommitFailedException {
+    public void testIndexPruning() {
         IndexStoreStrategy store = new ContentMirrorStoreStrategy();
 
         NodeState root = EMPTY_NODE;