Author: angela
Date: Wed Nov 13 10:28:14 2013
New Revision: 1541456

URL: http://svn.apache.org/r1541456
Log:
OAK-1172 : AbstractTree.getChildrenCount() not very performant due to 
INTERNAL_NODE_NAMES (wip)

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/SecureNodeBuilder.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java?rev=1541456&r1=1541455&r2=1541456&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/AbstractTree.java
 Wed Nov 13 10:28:14 2013
@@ -19,18 +19,7 @@
 
 package org.apache.jackrabbit.oak.core;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.size;
-import static com.google.common.collect.Iterables.transform;
-import static org.apache.jackrabbit.oak.api.Tree.Status.EXISTING;
-import static org.apache.jackrabbit.oak.api.Tree.Status.MODIFIED;
-import static org.apache.jackrabbit.oak.api.Tree.Status.NEW;
-import static org.apache.jackrabbit.oak.api.Type.STRING;
-import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
-
 import java.util.Iterator;
-
 import javax.annotation.Nonnull;
 
 import com.google.common.base.Function;
@@ -42,6 +31,16 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.size;
+import static com.google.common.collect.Iterables.transform;
+import static org.apache.jackrabbit.oak.api.Tree.Status.EXISTING;
+import static org.apache.jackrabbit.oak.api.Tree.Status.MODIFIED;
+import static org.apache.jackrabbit.oak.api.Tree.Status.NEW;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
+
 /**
  * {@code AbstractTree} provides default implementations for most
  * read methods of {@code Tree}. Furthermore it handles the
@@ -244,9 +243,11 @@ public abstract class AbstractTree imple
             max += INTERNAL_NODE_NAMES.length;
         }
         long count = nodeBuilder.getChildNodeCount(max);
-        for (String name : INTERNAL_NODE_NAMES) {
-            if (nodeBuilder.hasChildNode(name)) {
-                count--;
+        if (count > 0) {
+            for (String name : INTERNAL_NODE_NAMES) {
+                if (nodeBuilder.hasChildNode(name)) {
+                    count--;
+                }
             }
         }
         return count;

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/SecureNodeBuilder.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/SecureNodeBuilder.java?rev=1541456&r1=1541455&r2=1541456&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/SecureNodeBuilder.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/SecureNodeBuilder.java
 Wed Nov 13 10:28:14 2013
@@ -268,7 +268,11 @@ class SecureNodeBuilder implements NodeB
 
     @Override
     public boolean hasChildNode(@Nonnull String name) {
-        return getChildNode(name).exists();
+        if (builder.hasChildNode(name)) {
+            return getChildNode(name).exists();
+        } else {
+            return false;
+        }
     }
 
     @Override @Nonnull


Reply via email to