Pārlūkot izejas kodu

svn merge -c 1333144 FIXES: MAPREDUCE-4210. Expose listener address for WebApp (Daryn Sharp via bobby)

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1333145 13f79535-47bb-0310-9956-ffa450edef68
Robert Joseph Evans 13 gadi atpakaļ
vecāks
revīzija
611dffafc7

+ 2 - 0
hadoop-mapreduce-project/CHANGES.txt

@@ -201,6 +201,8 @@ Release 0.23.3 - UNRELEASED
     MAPREDUCE-4079. Allow MR AppMaster to limit ephemeral port range.
     (bobby via tgraves)
 
+    MAPREDUCE-4210. Expose listener address for WebApp (Daryn Sharp via bobby)
+
   OPTIMIZATIONS
 
   BUG FIXES

+ 9 - 0
hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApp.java

@@ -20,6 +20,7 @@ package org.apache.hadoop.yarn.webapp;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
+import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -75,6 +76,14 @@ public abstract class WebApp extends ServletModule {
 
   @Provides public HttpServer httpServer() { return httpServer; }
 
+  /**
+   * Get the address the http server is bound to
+   * @return InetSocketAddress
+   */
+  public InetSocketAddress getListenerAddress() {
+    return checkNotNull(httpServer, "httpServer").getListenerAddress();
+  }
+	
   public int port() {
     return checkNotNull(httpServer, "httpServer").getPort();
   }

+ 12 - 0
hadoop-mapreduce-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/webapp/TestWebApp.java

@@ -149,6 +149,18 @@ public class TestWebApp {
     app.stop();
   }
 
+  @Test public void testCreateWithPort() {
+    // see if the ephemeral port is updated
+    WebApp app = WebApps.$for(this).at(0).start();
+    int port = app.getListenerAddress().getPort();
+    assertTrue(port > 0);
+    app.stop();
+    // try to reuse the port
+    app = WebApps.$for(this).at(port).start();
+    assertEquals(port, app.getListenerAddress().getPort());
+    app.stop();
+  }
+
   @Test public void testServePaths() {
     WebApp app = WebApps.$for("test", this).start();
     assertEquals("/test", app.getRedirectPath());