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 2014/03/19 20:17:36 UTC
svn commit: r1579360 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTree.java
Author: jukka
Date: Wed Mar 19 19:17:35 2014
New Revision: 1579360
URL: http://svn.apache.org/r1579360
Log:
OAK-850: Degrade gracefully when :childOrder is out of sync
Optimize the ordered getChildNames() operation for the common case where the child order list is in sync with the actual child nodes
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTree.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTree.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTree.java?rev=1579360&r1=1579359&r2=1579360&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTree.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/AbstractTree.java Wed Mar 19 19:17:35 2014
@@ -23,6 +23,7 @@ import static com.google.common.base.Pre
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 com.google.common.collect.Lists.newArrayListWithCapacity;
import static com.google.common.collect.Sets.newLinkedHashSet;
import static org.apache.jackrabbit.oak.api.Tree.Status.MODIFIED;
import static org.apache.jackrabbit.oak.api.Tree.Status.NEW;
@@ -31,6 +32,7 @@ import static org.apache.jackrabbit.oak.
import static org.apache.jackrabbit.oak.plugins.tree.TreeConstants.OAK_CHILD_ORDER;
import static org.apache.jackrabbit.oak.spi.state.NodeStateUtils.isHidden;
+import java.util.List;
import java.util.Set;
import javax.annotation.Nonnull;
@@ -133,9 +135,15 @@ public abstract class AbstractTree imple
PropertyState order = nodeBuilder.getProperty(OAK_CHILD_ORDER);
if (order != null && order.getType() == NAMES) {
Set<String> names = newLinkedHashSet(nodeBuilder.getChildNodeNames());
- Set<String> ordered = newLinkedHashSet(order.getValue(NAMES));
- ordered.retainAll(names); // remove names of missing child nodes
- ordered.addAll(names); // insert names of unordered child nodes
+ List<String> ordered = newArrayListWithCapacity(names.size());
+ for (String name : order.getValue(NAMES)) {
+ // only include names of child nodes that actually exist
+ if (names.remove(name)) {
+ ordered.add(name);
+ }
+ }
+ // add names of child nodes that are not explicitly ordered
+ ordered.addAll(names);
return ordered;
} else {
return nodeBuilder.getChildNodeNames();