Xi Fang created HADOOP-9633:
-------------------------------

             Summary: 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