From: Robert Varga Date: Mon, 25 Aug 2014 12:41:20 +0000 (+0200) Subject: BUG-650: remove unneeded sort() X-Git-Tag: release/helium~207^2 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=21b7ff575b3fd9edd30a3367be3e250325754f98 BUG-650: remove unneeded sort() The need for sorting entries by depth disappeared with the migration to new codec infrastructure. Tracing shows some 44% CPU being spent here, so this should provide a marked improvement with large data changes. Change-Id: I7c437da5656cc5946ff9413307a563d4ff9b15de Signed-off-by: Robert Varga --- diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedDataBroker.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedDataBroker.java index f843b23f9b..53f96e44f4 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedDataBroker.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedDataBroker.java @@ -9,15 +9,14 @@ package org.opendaylight.controller.md.sal.binding.impl; import com.google.common.base.Objects; import com.google.common.base.Optional; -import java.util.ArrayList; + import java.util.Collections; -import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; + import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; @@ -88,7 +87,7 @@ public abstract class AbstractForwardedDataBroker implements Delegator> normalized) { Map, DataObject> newMap = new HashMap<>(); - for (Map.Entry> entry : sortedEntries(normalized)) { + for (Map.Entry> entry : normalized.entrySet()) { try { Optional, DataObject>> potential = getCodec().toBinding(entry); if (potential.isPresent()) { @@ -102,38 +101,6 @@ public abstract class AbstractForwardedDataBroker implements Delegator> MAP_ENTRY_COMPARATOR = new Comparator>() { - @Override - public int compare(final Entry left, final Entry right) { - final Iterator li = left.getKey().getPathArguments().iterator(); - final Iterator ri = right.getKey().getPathArguments().iterator(); - - // Iterate until left is exhausted... - while (li.hasNext()) { - if (!ri.hasNext()) { - // Left is deeper - return 1; - } - - li.next(); - ri.next(); - } - - // Check if right is exhausted - return ri.hasNext() ? -1 : 0; - } - }; - - private static Iterable> sortedEntries(final Map map) { - if (!map.isEmpty()) { - ArrayList> entries = new ArrayList<>(map.entrySet()); - Collections.sort(entries, MAP_ENTRY_COMPARATOR); - return entries; - } else { - return Collections.emptySet(); - } - } - protected Set> toBinding(final InstanceIdentifier path, final Set normalized) { Set> hashSet = new HashSet<>();