[ https://issues.apache.org/jira/browse/HADOOP-9633?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13683984#comment-13683984 ]
Xi Fang commented on HADOOP-9633: --------------------------------- Thanks, Aaron. HDFS-4521 has been reopened. > An incorrect data node might be added to the network topology, an exception > is thrown though > -------------------------------------------------------------------------------------------- > > Key: HADOOP-9633 > URL: https://issues.apache.org/jira/browse/HADOOP-9633 > Project: Hadoop Common > Issue Type: Bug > Affects Versions: 1.3.0 > Reporter: Xi Fang > Priority: Minor > > In NetworkTopology#add(Node node), an incorrect node may be added to the > cluster even if an exception is thrown. > This is the original code: > {code} > if (clusterMap.add(node)) { > LOG.info("Adding a new node: "+NodeBase.getPath(node)); > if (rack == null) { > numOfRacks++; > } > if (!(node instanceof InnerNode)) { > if (depthOfAllLeaves == -1) { > depthOfAllLeaves = node.getLevel(); > } else { > if (depthOfAllLeaves != node.getLevel()) { > LOG.error("Error: can't add leaf node at depth " + > node.getLevel() + " to topology:\n" + oldTopoStr); > throw new InvalidTopologyException("Invalid network topology. " > + > "You cannot have a rack and a non-rack node at the same " + > "level of the network topology."); > } > } > } > {code} > This is a potential bug, because a wrong leaf node is already added to the > cluster before throwing the exception. However, we can't check this > (depthOfAllLeaves != node.getLevel()) before if (clusterMap.add(node)), > because node.getLevel() will work correctly only after clusterMap.add(node) > has been executed. > A possible solution to this is checking the depthOfAllLeaves in > clusterMap.add(node). Note that this is a recursive call. A check should be > put at the bottom of this recursive call. If check fails, don't add this leaf > and all its upstream racks. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira