diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java index 425d45b..7e1102f 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java @@ -97,7 +97,8 @@ public Builder at(String bindAddress) { String[] parts = StringUtils.split(bindAddress, ':'); if (parts.length == 2) { - return at(parts[0], Integer.parseInt(parts[1]), true); + int port = Integer.parseInt(parts[1]); + return at(parts[0], port, port == 0); } return at(bindAddress, 0, true); } diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/TestWebApp.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/TestWebApp.java index d178dbb..5590bc8 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/TestWebApp.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/TestWebApp.java @@ -161,6 +161,31 @@ public void render(Page.HTML<_> html) { app.stop(); } + @Test public void testCreateWithBindAddress() { + WebApp app = WebApps.$for(this).at("0.0.0.0:0").start(); + int port = app.getListenerAddress().getPort(); + assertTrue(port > 0); + // start another WebApp with same port 0 + WebApp app2 = WebApps.$for(this).at("0.0.0.0:0").start(); + int port2 = app2.getListenerAddress().getPort(); + // findPort enabled + assertEquals(port + 1, port2); + app.stop(); + app2.stop(); + } + + @Test(expected=org.apache.hadoop.yarn.webapp.WebAppException.class) + public void testCreateWithBindAddressNonZeroPort() { + WebApp app = WebApps.$for(this).at("0.0.0.0:50000").start(); + int port = app.getListenerAddress().getPort(); + assertEquals(50000, port); + // start another WebApp with same NonZero port + WebApp app2 = WebApps.$for(this).at("0.0.0.0:50000").start(); + // An exception occurs (findPort disabled) + app.stop(); + app2.stop(); + } + @Test public void testServePaths() { WebApp app = WebApps.$for("test", this).start(); assertEquals("/test", app.getRedirectPath());