Merge "BUG-650: speed up ResolveDataChangeState.needsProcessing()"
authorTony Tkacik <ttkacik@cisco.com>
Tue, 9 Sep 2014 07:12:46 +0000 (07:12 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 9 Sep 2014 07:12:46 +0000 (07:12 +0000)
opendaylight/md-sal/sal-inmemory-datastore/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/ResolveDataChangeState.java

index d3c5a7cb70e8013734f64619b456e74ed18ee0e2..ea95030de3b82c758c478903448064d32fcdc10b 100644 (file)
@@ -103,8 +103,19 @@ final class ResolveDataChangeState {
      * @return State handle
      */
     public ResolveDataChangeState child(final PathArgument childId) {
-        return new ResolveDataChangeState(nodeId.node(childId),
-            Iterables.concat(inheritedSub, subBuilders.values()),
+        /*
+         * We instantiate a concatenation only when needed, otherwise
+         * we reuse the collection. This speeds up Iterables.isEmpty()
+         * in needsProcessing().
+         */
+        final Iterable<Builder> sb;
+        if (subBuilders.isEmpty()) {
+            sb = inheritedSub;
+        } else {
+            sb = Iterables.concat(inheritedSub, subBuilders.values());
+        }
+
+        return new ResolveDataChangeState(nodeId.node(childId), sb,
             oneBuilders.values(), getListenerChildrenWildcarded(nodes, childId));
     }