HADOOP-12772. NetworkTopologyWithNodeGroup.getNodeGroup() can loop infinitely for invalid 'loc' values. Contributed by Kuhu Shukla.

This commit is contained in:
Kihwal Lee 2016-02-05 15:46:25 -06:00
parent 9086dd58c3
commit 49e176c29f
4 changed files with 31 additions and 3 deletions

View File

@ -1718,6 +1718,9 @@ Release 2.7.3 - UNRELEASED
HADOOP-12761. incremental maven build is not really incremental (sjlee)
HADOOP-12772. NetworkTopologyWithNodeGroup.getNodeGroup() can loop
infinitely for invalid 'loc' values (Kuhu Shukla via kihwal)
Release 2.7.2 - 2016-01-25
INCOMPATIBLE CHANGES

View File

@ -101,7 +101,12 @@ public class NetworkTopologyWithNodeGroup extends NetworkTopology {
return null;
} else {
// may be a leaf node
return getNodeGroup(node.getNetworkLocation());
if(!(node.getNetworkLocation() == null ||
node.getNetworkLocation().isEmpty())) {
return getNodeGroup(node.getNetworkLocation());
} else {
return NodeBase.ROOT;
}
}
} else {
// not in cluster map, don't handle it

View File

@ -127,7 +127,14 @@ public class NodeBase implements Node {
* is not {@link #PATH_SEPARATOR}
*/
public static String normalize(String path) {
if (path == null || path.length() == 0) return ROOT;
if (path == null) {
throw new IllegalArgumentException(
"Network Location is null ");
}
if (path.length() == 0) {
return ROOT;
}
if (path.charAt(0) != PATH_SEPARATOR) {
throw new IllegalArgumentException(

View File

@ -178,7 +178,20 @@ public class TestNetworkTopologyWithNodeGroup {
assertTrue(frequency.get(key) > 0 || key == dataNodes[0]);
}
}
@Test
public void testNodeGroup() throws Exception {
String res = cluster.getNodeGroup("");
assertTrue("NodeGroup should be NodeBase.ROOT for empty location",
res.equals(NodeBase.ROOT));
try {
cluster.getNodeGroup(null);
} catch (IllegalArgumentException e) {
assertTrue("Null Network Location should throw exception!",
e.getMessage().contains("Network Location is null"));
}
}
/**
* This test checks that adding a node with invalid topology will be failed
* with an exception to show topology is invalid.