diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockNM.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockNM.java index fe3a889af9d..2189b21d620 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockNM.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/MockNM.java @@ -102,7 +102,8 @@ public MockNM(String nodeIdStr, Resource capability, this.resourceTracker = resourceTracker; this.version = version; String[] splits = nodeIdStr.split(":"); - nodeId = BuilderUtils.newNodeId(splits[0], Integer.parseInt(splits[1])); + String ip = generateRandomIP(splits[0]); + nodeId = BuilderUtils.newNodeId(ip, Integer.parseInt(splits[1])); } public MockNM(String nodeIdStr, Resource capability, @@ -327,4 +328,21 @@ public String getVersion() { public void setResponseId(int id) { this.responseId = id; } + + /** + * To avoid long time waiting to resolve for a unreal hostname. + * We generate a random IP address for non IPv4 format hostname except name + * starts with "unknown" + * */ + private String generateRandomIP(String hostname) { + if (hostname.startsWith("unknown")) { + return hostname; + } + // First do a sanity check if the hostname is in IPv4 format + if (hostname!= null && hostname.split("\\.").length == 4) { + return hostname; + } + // If not IPv4 format, we generate one. + return "127.0.0." + hostname.hashCode() % 255; + } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestContainerAllocation.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestContainerAllocation.java index 9f01a172891..7ba5c701b9a 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestContainerAllocation.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/test/java/org/apache/hadoop/yarn/server/resourcemanager/scheduler/capacity/TestContainerAllocation.java @@ -1187,4 +1187,18 @@ public void testContainerRejectionWhenAskBeyondDynamicMax() rm1.close(); } + + @Test(timeout = 10000) + public void testMockNMRegistrationTime() throws Exception { + MockRM rm1 = new MockRM(conf); + rm1.start(); + rm1.registerNode("h1:1234", 2 * GB, 1); + rm1.registerNode("h2:1234", 2 * GB, 1); + rm1.registerNode("h3:1234", 2 * GB, 1); + rm1.registerNode("h4:1234", 2 * GB, 1); + rm1.registerNode("h5:1234", 2 * GB, 1); + rm1.registerNode("h6:1234", 2 * GB, 1); + + } + }