Selaa lähdekoodia

MAPREDUCE-6789. Fix TestAMWebApp failure. Contributed by Daniel Templeton.

Akira Ajisaka 8 vuotta sitten
vanhempi
commit
272a21747e

+ 5 - 3
hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/webapp/TestAMWebApp.java

@@ -247,9 +247,11 @@ public class TestAMWebApp {
       HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection();
       conn.setInstanceFollowRedirects(false);
       conn.connect();
-      String expectedURL =
-          scheme + conf.get(YarnConfiguration.PROXY_ADDRESS)
-              + ProxyUriUtils.getPath(app.getAppID(), "/mapreduce");
+
+      // Because we're not calling from the proxy's address, we'll be redirected
+      String expectedURL = scheme + conf.get(YarnConfiguration.PROXY_ADDRESS)
+          + ProxyUriUtils.getPath(app.getAppID(), "/mapreduce", true);
+
       Assert.assertEquals(expectedURL,
         conn.getHeaderField(HttpHeaders.LOCATION));
       Assert.assertEquals(HttpStatus.SC_MOVED_TEMPORARILY,

+ 43 - 10
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-web-proxy/src/main/java/org/apache/hadoop/yarn/server/webproxy/ProxyUriUtils.java

@@ -40,6 +40,8 @@ public class ProxyUriUtils {
   public static final String PROXY_SERVLET_NAME = "proxy";
   /**Base path where the proxy servlet will handle requests.*/
   public static final String PROXY_BASE = "/proxy/";
+  /**Path component added when the proxy redirects the connection.*/
+  public static final String REDIRECT = "redirect/";
   /**Path Specification for the proxy servlet.*/
   public static final String PROXY_PATH_SPEC = PROXY_BASE+"*";
   /**Query Parameter indicating that the URI was approved.*/
@@ -57,27 +59,58 @@ public class ProxyUriUtils {
   
   /**
    * Get the proxied path for an application.
-   * @param id the application id to use.
-   * @return the base path to that application through the proxy.
+   *
+   * @param id the application id to use
+   * @return the base path to that application through the proxy
    */
   public static String getPath(ApplicationId id) {
-    if(id == null) {
+    return getPath(id, false);
+  }
+
+  /**
+   * Get the proxied path for an application.
+   *
+   * @param id the application id to use
+   * @param redirected whether the path should contain the redirect component
+   * @return the base path to that application through the proxy
+   */
+  public static String getPath(ApplicationId id, boolean redirected) {
+    if (id == null) {
       throw new IllegalArgumentException("Application id cannot be null ");
     }
-    return ujoin(PROXY_BASE, uriEncode(id));
+
+    if (redirected) {
+      return ujoin(PROXY_BASE, REDIRECT, uriEncode(id));
+    } else {
+      return ujoin(PROXY_BASE, uriEncode(id));
+    }
   }
 
   /**
    * Get the proxied path for an application.
-   * @param id the application id to use.
-   * @param path the rest of the path to the application.
-   * @return the base path to that application through the proxy.
+   *
+   * @param id the application id to use
+   * @param path the rest of the path to the application
+   * @return the base path to that application through the proxy
    */
   public static String getPath(ApplicationId id, String path) {
-    if(path == null) {
-      return getPath(id);
+    return getPath(id, path, false);
+  }
+
+  /**
+   * Get the proxied path for an application.
+   *
+   * @param id the application id to use
+   * @param path the rest of the path to the application
+   * @param redirected whether the path should contain the redirect component
+   * @return the base path to that application through the proxy
+   */
+  public static String getPath(ApplicationId id, String path,
+      boolean redirected) {
+    if (path == null) {
+      return getPath(id, redirected);
     } else {
-      return ujoin(getPath(id), path);
+      return ujoin(getPath(id, redirected), path);
     }
   }