diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java index 0e9f0a77be4..6dd9830e6e2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java @@ -32,7 +32,6 @@ import javax.servlet.http.HttpServlet; -import org.apache.commons.lang3.StringUtils; import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration.IntegerRanges; @@ -48,6 +47,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.net.HostAndPort; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; @@ -116,12 +116,14 @@ } public Builder at(String bindAddress) { - String[] parts = StringUtils.split(bindAddress, ':'); - if (parts.length == 2) { - int port = Integer.parseInt(parts[1]); - return at(parts[0], port, port == 0); + HostAndPort hp = HostAndPort.fromString(bindAddress); + if(hp.hasPort()){ + String hostAndPort = hp.toString(); + String host = hostAndPort.substring(0,hostAndPort.lastIndexOf(":")); + return at(host, hp.getPort(), hp.getPort() == 0); + }else { + return at(bindAddress, 0, true); } - return at(bindAddress, 0, true); } public Builder at(int port) { diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/TestWebApp.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/TestWebApp.java index 98b75054268..2652138d637 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/TestWebApp.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/TestWebApp.java @@ -38,6 +38,7 @@ import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.net.ServerSocketUtil; import org.apache.hadoop.yarn.MockApps; +import org.apache.hadoop.yarn.webapp.WebApps.Builder; import org.apache.hadoop.yarn.webapp.view.HtmlPage; import org.apache.hadoop.yarn.webapp.view.JQueryUI; import org.apache.hadoop.yarn.webapp.view.RobotsTextPage; @@ -191,6 +192,17 @@ public void testCreateWithNonZeroPort() { app2.stop(); } + @Test + public void testCreateWithIPv6Address(){ + Builder apps = WebApps.$for(this).at("[2401:db00:20:a01e:face:0:5:0]:50000"); + + int port = apps.port; + assertEquals(50000, port); + + String bindAddress = apps.bindAddress; + assertEquals("[2401:db00:20:a01e:face:0:5:0]",bindAddress); + } + @Test public void testServePaths() { WebApp app = WebApps.$for("test", this).start(); assertEquals("/test", app.getRedirectPath());