[ 
https://issues.apache.org/jira/browse/HADOOP-9633?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Aaron T. Myers resolved HADOOP-9633.
------------------------------------

    Resolution: Fixed

Resolving as a duplicate of HDFS-4521. If we want to fix this in branch-1 as 
well, let's do it via that JIRA.
                
> 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

Reply via email to