HADOOP-12295. Improve NetworkTopology#InnerNode#remove logic. (yliu)
This commit is contained in:
parent
40f815131e
commit
53bef9c5b9
@ -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
|
||||
|
@ -166,10 +166,11 @@ private String getNextAncestorName(Node n) {
|
||||
* @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 @@ protected InnerNode createParentNode(String parentName) {
|
||||
* @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 @@ boolean remove(Node n) {
|
||||
} 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 @@ boolean remove(Node n) {
|
||||
// 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--;
|
||||
}
|
||||
|
@ -251,6 +251,7 @@ public void testRemove() throws Exception {
|
||||
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]);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user