HADOOP-12295. Improve NetworkTopology#InnerNode#remove logic. (yliu)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/53bef9c5 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/53bef9c5 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/53bef9c5 Branch: refs/heads/HADOOP-12111 Commit: 53bef9c5b98dee87d4ffaf35415bc38e2f876ed8 Parents: 40f8151 Author: yliu <y...@apache.org> Authored: Thu Aug 13 16:45:20 2015 +0800 Committer: yliu <y...@apache.org> Committed: Thu Aug 13 16:45:20 2015 +0800 ---------------------------------------------------------------------- hadoop-common-project/hadoop-common/CHANGES.txt | 2 ++ .../org/apache/hadoop/net/NetworkTopology.java | 38 ++++++++++---------- .../apache/hadoop/net/TestNetworkTopology.java | 1 + 3 files changed, 21 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/53bef9c5/hadoop-common-project/hadoop-common/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index 78f12e4..c80be05 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -749,6 +749,8 @@ Release 2.8.0 - UNRELEASED HADOOP-12318. Expose underlying LDAP exceptions in SaslPlainServer. (Mike Yoder via atm) + HADOOP-12295. Improve NetworkTopology#InnerNode#remove logic. (yliu) + OPTIMIZATIONS HADOOP-11785. Reduce the number of listStatus operation in distcp http://git-wip-us.apache.org/repos/asf/hadoop/blob/53bef9c5/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java index 970ad40..fe6e439 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/net/NetworkTopology.java @@ -166,10 +166,11 @@ public class NetworkTopology { * @return true if the node is added; false otherwise */ boolean add(Node n) { - if (!isAncestor(n)) - throw new IllegalArgumentException(n.getName()+", which is located at " - +n.getNetworkLocation()+", is not a decendent of " - +getPath(this)); + if (!isAncestor(n)) { + throw new IllegalArgumentException(n.getName() + + ", which is located at " + n.getNetworkLocation() + + ", is not a descendent of " + getPath(this)); + } if (isParent(n)) { // this node is the parent of n; add n directly n.setParent(this); @@ -227,12 +228,11 @@ public class NetworkTopology { * @return true if the node is deleted; false otherwise */ boolean remove(Node n) { - String parent = n.getNetworkLocation(); - String currentPath = getPath(this); - if (!isAncestor(n)) + if (!isAncestor(n)) { throw new IllegalArgumentException(n.getName() - +", which is located at " - +parent+", is not a descendent of "+currentPath); + + ", which is located at " + n.getNetworkLocation() + + ", is not a descendent of " + getPath(this)); + } if (isParent(n)) { // this node is the parent of n; remove n directly if (childrenMap.containsKey(n.getName())) { @@ -250,15 +250,8 @@ public class NetworkTopology { } else { // find the next ancestor node: the parent node String parentName = getNextAncestorName(n); - InnerNode parentNode = null; - int i; - for(i=0; i<children.size(); i++) { - if (children.get(i).getName().equals(parentName)) { - parentNode = (InnerNode)children.get(i); - break; - } - } - if (parentNode==null) { + InnerNode parentNode = (InnerNode)childrenMap.get(parentName); + if (parentNode == null) { return false; } // remove n from the parent node @@ -266,8 +259,13 @@ public class NetworkTopology { // if the parent node has no children, remove the parent node too if (isRemoved) { if (parentNode.getNumOfChildren() == 0) { - Node prev = children.remove(i); - childrenMap.remove(prev.getName()); + for(int i=0; i < children.size(); i++) { + if (children.get(i).getName().equals(parentName)) { + children.remove(i); + childrenMap.remove(parentName); + break; + } + } } numOfLeaves--; } http://git-wip-us.apache.org/repos/asf/hadoop/blob/53bef9c5/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/net/TestNetworkTopology.java ---------------------------------------------------------------------- diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/net/TestNetworkTopology.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/net/TestNetworkTopology.java index 1758807..45f6cb4 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/net/TestNetworkTopology.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/net/TestNetworkTopology.java @@ -251,6 +251,7 @@ public class TestNetworkTopology { assertFalse(cluster.contains(dataNodes[i])); } assertEquals(0, cluster.getNumOfLeaves()); + assertEquals(0, cluster.clusterMap.children.size()); for(int i=0; i<dataNodes.length; i++) { cluster.add(dataNodes[i]); }