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