diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/test/java/org/apache/hadoop/yarn/applications/distributedshell/TestDistributedShell.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/test/java/org/apache/hadoop/yarn/applications/distributedshell/TestDistributedShell.java index 3445e27..8f29eb5 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/test/java/org/apache/hadoop/yarn/applications/distributedshell/TestDistributedShell.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-applications/hadoop-yarn-applications-distributedshell/src/test/java/org/apache/hadoop/yarn/applications/distributedshell/TestDistributedShell.java @@ -26,13 +26,13 @@ import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; +import java.net.InetAddress; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import org.junit.Assert; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; @@ -169,7 +169,12 @@ public void run() { yarnClient.init(new Configuration(yarnCluster.getConfig())); yarnClient.start(); String hostName = NetUtils.getHostname(); + String altHostName = generateAlternateHostname(hostName); + boolean verified = false; + boolean startsWithHostName = false; + boolean startsWithAltHostName = false; + String errorMessage = ""; while(!verified) { List apps = yarnClient.getApplications(); if (apps.size() == 0 ) { @@ -177,7 +182,14 @@ public void run() { continue; } ApplicationReport appReport = apps.get(0); - if (appReport.getHost().startsWith(hostName) + startsWithHostName = appReport.getHost().startsWith(hostName); + startsWithAltHostName = appReport.getHost().startsWith(altHostName); + errorMessage = + "Expected host name to start with '" + hostName + "' or '" + + altHostName + "', was '" + appReport.getHost() + + "'. Expected rpc port to be '-1', was '" + + appReport.getRpcPort() + "'."; + if ((startsWithHostName || startsWithAltHostName) && appReport.getRpcPort() == -1) { verified = true; } @@ -185,7 +197,7 @@ public void run() { break; } } - Assert.assertTrue(verified); + Assert.assertTrue(errorMessage, verified); t.join(); LOG.info("Client run completed. Result=" + result); Assert.assertTrue(result.get()); @@ -212,6 +224,28 @@ public void run() { .toString(), ApplicationMaster.DSEntity.DS_CONTAINER.toString()); } + private String generateAlternateHostname(String hostname) throws Exception { + // NetUtils sometimes returns a FQDN and sometimes a short name + // this function generates a FQDN if a short name is provided + // or a short name if a FQDN is provided + + String ret = hostname; + if (hostname.contains("/")) { + String[] parts = hostname.split("/"); + String name = parts[0]; + if (name.contains(".")) { + // FQDN + String[] nameParts = name.split("\\."); + ret = nameParts[0] + "/" + parts[1]; + } else { + // short name + String fqdn = InetAddress.getByName(hostname).getCanonicalHostName(); + ret = fqdn + "/" + parts[1]; + } + } + return ret; + } + @Test(timeout=90000) public void testDSRestartWithPreviousRunningContainers() throws Exception { String[] args = {