diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestRMFailover.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestRMFailover.java index 40350bc..1ee54e8 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestRMFailover.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/TestRMFailover.java @@ -270,9 +270,33 @@ public void testRMWebAppRedirect() throws YarnException, String header = getHeader("Refresh", rm2Url); assertTrue(header.contains("; url=" + rm1Url)); + // standby RM links /conf, /stacks, /logLevel, /metrics, /jmx, + // /static, /logs, /cluster/cluster as well as webService + // /ws/v1/cluster/info should not be redirected to active RM header = getHeader("Refresh", rm2Url + "/cluster/cluster"); assertEquals(null, header); + header = getHeader("Refresh", rm2Url + "/conf"); + assertEquals(null, header); + + header = getHeader("Refresh", rm2Url + "/stacks"); + assertEquals(null, header); + + header = getHeader("Refresh", rm2Url + "/logLevel"); + assertEquals(null, header); + + header = getHeader("Refresh", rm2Url + "/metrics"); + assertEquals(null, header); + + header = getHeader("Refresh", rm2Url + "/jmx"); + assertEquals(null, header); + + header = getHeader("Refresh", rm2Url + "/static"); + assertEquals(null, header); + + header = getHeader("Refresh", rm2Url + "/logs"); + assertEquals(null, header); + header = getHeader("Refresh", rm2Url + "/ws/v1/cluster/info"); assertEquals(null, header); diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebAppFilter.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebAppFilter.java index fd472dd..8cb2648 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebAppFilter.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/webapp/RMWebAppFilter.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.io.PrintWriter; +import java.util.Set; import javax.inject.Inject; import javax.inject.Singleton; @@ -30,6 +31,7 @@ import org.apache.hadoop.http.HtmlQuoting; +import com.google.common.collect.Sets; import com.google.inject.Injector; import com.sun.jersey.guice.spi.container.servlet.GuiceContainer; @@ -42,6 +44,10 @@ */ private static final long serialVersionUID = 1L; + // define a set of URIs which do not need to do redirection + private static final Set nonRedirectedURIs = Sets.newHashSet("/conf", + "/stacks", "/logLevel", "/metrics", "/jmx", "/logs"); + @Inject public RMWebAppFilter(Injector injector) { super(injector); @@ -61,8 +67,7 @@ public void doFilter(HttpServletRequest request, RMWebApp rmWebApp = injector.getInstance(RMWebApp.class); rmWebApp.checkIfStandbyRM(); if (rmWebApp.isStandby() - && !uri.equals("/" + rmWebApp.wsName() + "/v1/cluster/info") - && !uri.equals("/" + rmWebApp.name() + "/cluster")) { + && shouldRedirect(rmWebApp, uri)) { String redirectPath = rmWebApp.getRedirectPath() + uri; if (redirectPath != null && !redirectPath.isEmpty()) { @@ -80,4 +85,9 @@ public void doFilter(HttpServletRequest request, } + private boolean shouldRedirect(RMWebApp rmWebApp, String uri) { + return !uri.equals("/" + rmWebApp.wsName() + "/v1/cluster/info") + && !uri.equals("/" + rmWebApp.name() + "/cluster") + && ! nonRedirectedURIs.contains(uri); + } }