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 ju...@apache.org on 2013/10/02 04:00:35 UTC

svn commit: r1528295 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property: PropertyIndexEditor.java PropertyIndexLookup.java strategy/UniqueEntryStoreStrategy.java

Author: jukka
Date: Wed Oct  2 02:00:34 2013
New Revision: 1528295

URL: http://svn.apache.org/r1528295
Log:
OAK-1059 Property index: faster unique indexes using new storage strategy

Revert revision 1528094 as it was causing integration test failures

Removed:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/index/property/strategy/UniqueEntryStoreStrategy.java
Modified:
    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/PropertyIndexLookup.java

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=1528295&r1=1528294&r2=1528295&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 Wed Oct  2 02:00:34 2013
@@ -45,7 +45,6 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.plugins.index.IndexEditor;
 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.spi.commit.Editor;
 import org.apache.jackrabbit.oak.spi.query.PropertyValues;
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -60,13 +59,9 @@ import org.apache.jackrabbit.oak.spi.sta
 class PropertyIndexEditor implements IndexEditor {
 
     /** Index storage strategy */
-    private static final IndexStoreStrategy MIRROR =
+    private static final IndexStoreStrategy STORE =
             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;
 
@@ -84,8 +79,6 @@ class PropertyIndexEditor implements Ind
     private final Set<String> primaryTypes;
 
     private final Set<String> mixinTypes;
-    
-    private final boolean isUnique;
 
     private final Set<String> keysToCheckForUniqueness;
 
@@ -140,10 +133,8 @@ class PropertyIndexEditor implements Ind
 
         // keep track of modified keys for uniqueness checks
         if (definition.getBoolean(IndexConstants.UNIQUE_PROPERTY_NAME)) {
-            isUnique = true;
             this.keysToCheckForUniqueness = newHashSet();
         } else {
-            isUnique = false;
             this.keysToCheckForUniqueness = null;
         }
     }
@@ -157,7 +148,6 @@ class PropertyIndexEditor implements Ind
         this.primaryTypes = parent.primaryTypes;
         this.mixinTypes = parent.mixinTypes;
         this.keysToCheckForUniqueness = parent.keysToCheckForUniqueness;
-        this.isUnique = parent.isUnique;
     }
 
     /**
@@ -227,11 +217,9 @@ class PropertyIndexEditor implements Ind
 
             if (!beforeKeys.isEmpty() || !afterKeys.isEmpty()) {
                 NodeBuilder index = definition.child(INDEX_CONTENT_NODE_NAME);
-                
-                if (keysToCheckForUniqueness == null) {
-                    MIRROR.update(index, getPath(), beforeKeys, afterKeys);
-                } else {
-                    UNIQUE.update(index, getPath(), beforeKeys, afterKeys);
+                STORE.update(index, getPath(), beforeKeys, afterKeys);
+
+                if (keysToCheckForUniqueness != null) {
                     keysToCheckForUniqueness.addAll(afterKeys);
                 }
             }
@@ -246,7 +234,7 @@ class PropertyIndexEditor implements Ind
                     && !keysToCheckForUniqueness.isEmpty()) {
                 NodeState indexMeta = definition.getNodeState();
                 for (String key : keysToCheckForUniqueness) {
-                    if (UNIQUE.count(indexMeta, singleton(key), 2) > 1) {
+                    if (STORE.count(indexMeta, singleton(key), 2) > 1) {
                         throw new CommitFailedException(
                                 CONSTRAINT, 30,
                                 "Uniqueness constraint violated for key " + key);

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=1528295&r1=1528294&r2=1528295&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 Wed Oct  2 02:00:34 2013
@@ -34,10 +34,8 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.PropertyValue;
 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.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;
@@ -62,13 +60,7 @@ public class PropertyIndexLookup {
 
     private 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 IndexStoreStrategy store = new ContentMirrorStoreStrategy();
 
     private final NodeState root;
 
@@ -107,14 +99,7 @@ public class PropertyIndexLookup {
         if (indexMeta == null) {
             throw new IllegalArgumentException("No index for " + propertyName);
         }
-        return getStrategy(indexMeta).query(filter, propertyName, indexMeta, encode(value));
-    }
-        
-    private static IndexStoreStrategy getStrategy(NodeState indexMeta) {
-        if (indexMeta.getBoolean(IndexConstants.UNIQUE_PROPERTY_NAME)) {
-            return UNIQUE;
-        }
-        return MIRROR;
+        return store.query(filter, propertyName, indexMeta, encode(value));
     }
 
     public double getCost(Filter filter, String propertyName, PropertyValue value) {
@@ -122,7 +107,7 @@ public class PropertyIndexLookup {
         if (indexMeta == null) {
             return Double.POSITIVE_INFINITY;
         }
-        return getStrategy(indexMeta).count(indexMeta, encode(value), MAX_COST);
+        return store.count(indexMeta, encode(value), MAX_COST);
     }
 
     /**