diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryServer.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryServer.java index c61b80e..32cd65a 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryServer.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/ApplicationHistoryServer.java @@ -197,6 +197,7 @@ private void startWebApp() { // the customized filter will be loaded by the timeline server to do Kerberos // + DT authentication. String initializers = conf.get("hadoop.http.filter.initializers"); + boolean modifiedInitialiers = false; initializers = initializers == null || initializers.length() == 0 ? "" : initializers; @@ -206,6 +207,7 @@ private void startWebApp() { initializers = TimelineAuthenticationFilterInitializer.class.getName() + "," + initializers; + modifiedInitialiers = true; } String[] parts = initializers.split(","); @@ -220,7 +222,7 @@ private void startWebApp() { } String actualInitializers = org.apache.commons.lang.StringUtils.join(target, ","); - if (!actualInitializers.equals(initializers)) { + if (!actualInitializers.equals(initializers) || modifiedInitialiers) { conf.set("hadoop.http.filter.initializers", actualInitializers); } String bindAddress = WebAppUtils.getWebAppBindURL(conf, diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryServer.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryServer.java index bcd8e45..b80ecd3 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryServer.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/TestApplicationHistoryServer.java @@ -23,6 +23,7 @@ import static org.junit.Assert.fail; import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.http.lib.StaticUserWebFilter; import org.apache.hadoop.security.AuthenticationFilterInitializer; import org.apache.hadoop.service.Service.STATE; import org.apache.hadoop.util.ExitUtil; @@ -33,6 +34,9 @@ import org.junit.Assert; import org.junit.Test; +import java.util.HashMap; +import java.util.Map; + public class TestApplicationHistoryServer { ApplicationHistoryServer historyServer = null; @@ -75,23 +79,31 @@ public void testLaunch() throws Exception { @Test(timeout = 50000) public void testFilteOverrides() throws Exception { - String[] filterInitializers = - { - AuthenticationFilterInitializer.class.getName(), - TimelineAuthenticationFilterInitializer.class.getName(), - AuthenticationFilterInitializer.class.getName() + "," - + TimelineAuthenticationFilterInitializer.class.getName(), - AuthenticationFilterInitializer.class.getName() + ", " - + TimelineAuthenticationFilterInitializer.class.getName() }; - for (String filterInitializer : filterInitializers) { + HashMap driver = new HashMap(); + driver.put(StaticUserWebFilter.class.getName(), + TimelineAuthenticationFilterInitializer.class.getName() + "," + + StaticUserWebFilter.class.getName()); + driver.put(AuthenticationFilterInitializer.class.getName(), + TimelineAuthenticationFilterInitializer.class.getName()); + driver.put(TimelineAuthenticationFilterInitializer.class.getName(), + TimelineAuthenticationFilterInitializer.class.getName()); + driver.put(AuthenticationFilterInitializer.class.getName() + "," + + TimelineAuthenticationFilterInitializer.class.getName(), + TimelineAuthenticationFilterInitializer.class.getName()); + driver.put(AuthenticationFilterInitializer.class.getName() + ", " + + TimelineAuthenticationFilterInitializer.class.getName(), + TimelineAuthenticationFilterInitializer.class.getName()); + + for (Map.Entry entry : driver.entrySet()) { + String filterInitializer = entry.getKey(); + String expectedValue = entry.getValue(); historyServer = new ApplicationHistoryServer(); Configuration config = new YarnConfiguration(); config.set("hadoop.http.filter.initializers", filterInitializer); historyServer.init(config); historyServer.start(); Configuration tmp = historyServer.getConfig(); - assertEquals(TimelineAuthenticationFilterInitializer.class.getName(), - tmp.get("hadoop.http.filter.initializers")); + assertEquals(expectedValue, tmp.get("hadoop.http.filter.initializers")); historyServer.stop(); AHSWebApp.resetInstance(); }