YARN-2449. Fixed the bug that TimelineAuthenticationFilterInitializer is not automatically added when hadoop.http.filter.initializers is not configured. Contributed by Varun Vasudev.
This commit is contained in:
parent
4ae8178c56
commit
4bd0194e6b
|
@ -251,6 +251,10 @@ Release 2.6.0 - UNRELEASED
|
|||
|
||||
YARN-2405. NPE in FairSchedulerAppsBlock. (Tsuyoshi Ozawa via kasha)
|
||||
|
||||
YARN-2449. Fixed the bug that TimelineAuthenticationFilterInitializer
|
||||
is not automatically added when hadoop.http.filter.initializers is not
|
||||
configured. (Varun Vasudev via zjshen)
|
||||
|
||||
Release 2.5.1 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -197,6 +197,7 @@ public class ApplicationHistoryServer extends CompositeService {
|
|||
// 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 @@ public class ApplicationHistoryServer extends CompositeService {
|
|||
initializers =
|
||||
TimelineAuthenticationFilterInitializer.class.getName() + ","
|
||||
+ initializers;
|
||||
modifiedInitialiers = true;
|
||||
}
|
||||
|
||||
String[] parts = initializers.split(",");
|
||||
|
@ -214,13 +216,14 @@ public class ApplicationHistoryServer extends CompositeService {
|
|||
filterInitializer = filterInitializer.trim();
|
||||
if (filterInitializer.equals(AuthenticationFilterInitializer.class
|
||||
.getName())) {
|
||||
modifiedInitialiers = true;
|
||||
continue;
|
||||
}
|
||||
target.add(filterInitializer);
|
||||
}
|
||||
String actualInitializers =
|
||||
org.apache.commons.lang.StringUtils.join(target, ",");
|
||||
if (!actualInitializers.equals(initializers)) {
|
||||
if (modifiedInitialiers) {
|
||||
conf.set("hadoop.http.filter.initializers", actualInitializers);
|
||||
}
|
||||
String bindAddress = WebAppUtils.getWebAppBindURL(conf,
|
||||
|
|
|
@ -23,6 +23,7 @@ import static org.junit.Assert.assertNotNull;
|
|||
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.After;
|
|||
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,32 @@ public class TestApplicationHistoryServer {
|
|||
@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<String, String> driver = new HashMap<String, String>();
|
||||
driver.put("", TimelineAuthenticationFilterInitializer.class.getName());
|
||||
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<String, String> 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();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue