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/02/25 15:49:18 UTC

svn commit: r1449729 - in /jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr: ItemImpl.java NodeImpl.java

Author: jukka
Date: Mon Feb 25 14:49:18 2013
New Revision: 1449729

URL: http://svn.apache.org/r1449729
Log:
OAK-652: ItemImpl.checkProtected() is too slow

Add a temporary flag for disabling the transient item definition checks

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java
    jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java?rev=1449729&r1=1449728&r2=1449729&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/ItemImpl.java Mon Feb 25 14:49:18 2013
@@ -36,6 +36,13 @@ import org.slf4j.LoggerFactory;
  */
 abstract class ItemImpl<T extends ItemDelegate> extends AbstractItem {
 
+    /**
+     * Flag to disable expensive transient item definition checks.
+     * FIXME: This flag should be removed once OAK-652 gets resolved.
+     */
+    protected static final boolean DISABLE_TRANSIENT_DEFINITION_CHECKS =
+            Boolean.getBoolean("OAK-652");
+
     protected final SessionDelegate sessionDelegate;
     protected final T dlg;
 
@@ -169,6 +176,10 @@ abstract class ItemImpl<T extends ItemDe
     }
 
     void checkProtected() throws RepositoryException {
+        if (DISABLE_TRANSIENT_DEFINITION_CHECKS) {
+            return;
+        }
+
         ItemDefinition definition;
         try {
             definition = (isNode()) ? ((Node) this).getDefinition() : ((Property) this).getDefinition();

Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java?rev=1449729&r1=1449728&r2=1449729&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/NodeImpl.java Mon Feb 25 14:49:18 2013
@@ -1465,19 +1465,24 @@ public class NodeImpl<T extends NodeDele
                                 sessionDelegate, dlg.getLocation().getChild(oakName)));
                     }
                 } else {
-                    PropertyDefinition definition;
-                    if (hasProperty(jcrName)) {
-                        definition = getProperty(jcrName).getDefinition();
+                    Value targetValue;
+                    if (DISABLE_TRANSIENT_DEFINITION_CHECKS) {
+                        targetValue = value;
                     } else {
-                        definition = dlg.sessionDelegate.getDefinitionProvider().getDefinition(NodeImpl.this, oakName, false, type, exactTypeMatch);
-                    }
-                    checkProtected(definition);
-                    if (definition.isMultiple()) {
-                        throw new ValueFormatException("Cannot set single value to multivalued property");
-                    }
+                        PropertyDefinition definition;
+                        if (hasProperty(jcrName)) {
+                            definition = getProperty(jcrName).getDefinition();
+                        } else {
+                            definition = dlg.sessionDelegate.getDefinitionProvider().getDefinition(NodeImpl.this, oakName, false, type, exactTypeMatch);
+                        }
+                        checkProtected(definition);
+                        if (definition.isMultiple()) {
+                            throw new ValueFormatException("Cannot set single value to multivalued property");
+                        }
 
-                    int targetType = getTargetType(value, definition);
-                    Value targetValue = ValueHelper.convert(value, targetType, getValueFactory());
+                        int targetType = getTargetType(value, definition);
+                        targetValue = ValueHelper.convert(value, targetType, getValueFactory());
+                    }
 
                     return new PropertyImpl(dlg.setProperty(oakName, targetValue));
                 }
@@ -1504,19 +1509,24 @@ public class NodeImpl<T extends NodeDele
                                 sessionDelegate, dlg.getLocation().getChild(oakName)));
                     }
                 } else {
-                    PropertyDefinition definition;
-                    if (hasProperty(jcrName)) {
-                        definition = getProperty(jcrName).getDefinition();
+                    Value[] targetValues;
+                    if (DISABLE_TRANSIENT_DEFINITION_CHECKS) {
+                        targetValues = values;
                     } else {
-                        definition = dlg.sessionDelegate.getDefinitionProvider().getDefinition(NodeImpl.this, oakName, true, type, exactTypeMatch);
-                    }
-                    checkProtected(definition);
-                    if (!definition.isMultiple()) {
-                        throw new ValueFormatException("Cannot set value array to single value property");
-                    }
+                        PropertyDefinition definition;
+                        if (hasProperty(jcrName)) {
+                            definition = getProperty(jcrName).getDefinition();
+                        } else {
+                            definition = dlg.sessionDelegate.getDefinitionProvider().getDefinition(NodeImpl.this, oakName, true, type, exactTypeMatch);
+                        }
+                        checkProtected(definition);
+                        if (!definition.isMultiple()) {
+                            throw new ValueFormatException("Cannot set value array to single value property");
+                        }
 
-                    int targetType = getTargetType(values, definition);
-                    Value[] targetValues = ValueHelper.convert(values, targetType, getValueFactory());
+                        int targetType = getTargetType(values, definition);
+                        targetValues = ValueHelper.convert(values, targetType, getValueFactory());
+                    }
 
                     Iterable<Value> nonNullValues = Iterables.filter(
                             Arrays.asList(targetValues),