diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/RackResolver.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/RackResolver.java index 08e7b7c..b9467f2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/RackResolver.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/RackResolver.java @@ -28,6 +28,7 @@ import org.apache.hadoop.fs.CommonConfigurationKeysPublic; import org.apache.hadoop.net.CachedDNSToSwitchMapping; import org.apache.hadoop.net.DNSToSwitchMapping; +import org.apache.hadoop.net.NetworkTopology; import org.apache.hadoop.net.Node; import org.apache.hadoop.net.NodeBase; import org.apache.hadoop.net.ScriptBasedMapping; @@ -96,7 +97,8 @@ private static Node coreResolve(String hostName) { List tmpList = new ArrayList(1); tmpList.add(hostName); List rNameList = dnsToSwitchMapping.resolve(tmpList); - String rName = rNameList.get(0); + String rName = (rNameList == null || rNameList.get(0) == null) ? + NetworkTopology.DEFAULT_RACK : rNameList.get(0); LOG.info("Resolved " + hostName + " to " + rName); return new NodeBase(hostName, rName); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/TestRackResolver.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/TestRackResolver.java index fd29670..5292737 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/TestRackResolver.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/TestRackResolver.java @@ -28,6 +28,7 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.CommonConfigurationKeysPublic; import org.apache.hadoop.net.DNSToSwitchMapping; +import org.apache.hadoop.net.NetworkTopology; import org.apache.hadoop.net.Node; import org.junit.Assert; import org.junit.Test; @@ -35,6 +36,8 @@ public class TestRackResolver { private static Log LOG = LogFactory.getLog(TestRackResolver.class); + private static final String invalidHost = "invalidHost"; + public static final class MyResolver implements DNSToSwitchMapping { @@ -50,6 +53,11 @@ if (hostList.isEmpty()) { return returnList; } + if (hostList.get(0).equals(invalidHost)) { + // Simulate condition where resolving host returns null + return null; + } + LOG.info("Received resolve request for " + hostList.get(0)); if (hostList.get(0).equals("host1") @@ -82,6 +90,8 @@ public void testCaching() { Assert.assertEquals("/rack1", node.getNetworkLocation()); node = RackResolver.resolve("host1"); Assert.assertEquals("/rack1", node.getNetworkLocation()); + node = RackResolver.resolve(invalidHost); + Assert.assertEquals(NetworkTopology.DEFAULT_RACK, node.getNetworkLocation()); } }