commit a13bc6b585e2634b6dd0f285d183450f52943785 Author: Gera Shegalov Date: Wed Mar 14 03:57:11 2018 -0700 YARN-7747 use injected GuiceFilter instances diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer2.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer2.java index 7e1264059fe..e687b0ed069 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer2.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/http/HttpServer2.java @@ -971,6 +971,13 @@ public static void defineFilter(ServletContextHandler ctx, String name, defineFilter(ctx, filterHolder, fmap); } + public static void defineFilter(ServletContextHandler ctx, String name, + Filter filter, Map parameters, String[] urls) { + FilterHolder filterHolder = getFilterHolder(name, filter, parameters); + FilterMapping fmap = getFilterMapping(name, urls); + defineFilter(ctx, filterHolder, fmap); + } + /** * Define a filter for a context and set up default url mappings. */ @@ -988,11 +995,15 @@ private static FilterMapping getFilterMapping(String name, String[] urls) { return fmap; } - private static FilterHolder getFilterHolder(String name, String classname, + private static FilterHolder getFilterHolder(String name, Object filter, Map parameters) { FilterHolder holder = new FilterHolder(); holder.setName(name); - holder.setClassName(classname); + if (filter instanceof String) { + holder.setClassName((String)filter); + } else { + holder.setFilter((Filter)filter); + } if (parameters != null) { holder.setInitParameters(parameters); } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApp.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApp.java index fad6fe29462..4f37a59f7bc 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApp.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApp.java @@ -153,6 +153,9 @@ void setHostClass(Class cls) { void setGuiceFilter(GuiceFilter instance) { guiceFilter = instance; + LOG.info("Registered webapp guice modules"); + HttpServer2.defineFilter(httpServer.getWebAppContext(), "guice", + instance, null, new String[] { "/*" }); } @Override diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java index 73644452140..acdd14424db 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java @@ -364,10 +364,6 @@ public void setup() { xfsClassName, params, new String[] {"/*"}); } - - HttpServer2.defineFilter(server.getWebAppContext(), "guice", - GuiceFilter.class.getName(), null, new String[] { "/*" }); - webapp.setConf(conf); webapp.setHttpServer(server); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/WebServer.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/WebServer.java index 813ba142111..539d67c42e1 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/WebServer.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/webapp/WebServer.java @@ -40,6 +40,8 @@ import org.apache.hadoop.yarn.webapp.util.WebAppUtils; import com.sun.jersey.guice.spi.container.servlet.GuiceContainer; + +import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.List; @@ -96,7 +98,6 @@ protected void serviceStart() throws Exception { targets.add(AuthenticationFilterInitializer.class.getName()); conf.set(filterInitializerConfKey, StringUtils.join(",", targets)); } - LOG.info("Instantiating NMWebApp at " + bindAddress); try { this.webApp = WebApps @@ -110,7 +111,9 @@ protected void serviceStart() throws Exception { .withCSRFProtection(YarnConfiguration.NM_CSRF_PREFIX) .withXFSProtection(YarnConfiguration.NM_XFS_PREFIX) .start(this.nmWebApp); - this.port = this.webApp.httpServer().getConnectorAddress(0).getPort(); + InetSocketAddress webAddr = this.webApp.httpServer().getConnectorAddress(0); + this.port = webAddr.getPort(); + LOG.info("NMWebApp at " + webAddr.getHostName() + ":" + port); } catch (Exception e) { String msg = "NMWebapps failed to start."; LOG.error(msg, e); diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java index 5140c9fa558..beee6c0075c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java @@ -274,7 +274,7 @@ protected void serviceInit(Configuration conf) throws Exception { loadConfigurationXml(YarnConfiguration.YARN_SITE_CONFIGURATION_FILE); validateConfigs(this.conf); - + // Set HA configuration should be done before login this.rmContext.setHAEnabled(HAUtil.isHAEnabled(this.conf)); if (this.rmContext.isHAEnabled()) { @@ -318,7 +318,7 @@ protected void serviceInit(Configuration conf) throws Exception { } rmContext.setYarnConfiguration(conf); - + createAndInitActiveServices(false); webAppAddress = WebAppUtils.getWebAppBindURL(this.conf, @@ -491,7 +491,7 @@ private NMLivelinessMonitor createNMLivelinessMonitor() { protected AMLivelinessMonitor createAMLivelinessMonitor() { return new AMLivelinessMonitor(this.rmDispatcher); } - + protected RMNodeLabelsManager createNodeLabelManager() throws InstantiationException, IllegalAccessException { return new RMNodeLabelsManager(); @@ -506,7 +506,7 @@ protected AllocationTagsManager createAllocationTagsManager() { // Use the in memory Placement Constraint Manager. return new MemoryPlacementConstraintManager(); } - + protected DelegationTokenRenewer createDelegationTokenRenewer() { return new DelegationTokenRenewer(); } @@ -622,7 +622,7 @@ protected void serviceInit(Configuration configuration) throws Exception { AMLivelinessMonitor amFinishingMonitor = createAMLivelinessMonitor(); addService(amFinishingMonitor); rmContext.setAMFinishingMonitor(amFinishingMonitor); - + RMAppLifetimeMonitor rmAppLifetimeMonitor = createRMAppLifetimeMonitor(); addService(rmAppLifetimeMonitor); rmContext.setRMAppLifetimeMonitor(rmAppLifetimeMonitor); @@ -1083,7 +1083,7 @@ protected void startWepApp() { params.put("com.sun.jersey.config.property.packages", apiPackages); } - Builder builder = + Builder builder = WebApps .$for("cluster", ApplicationMasterService.class, masterService, "ws") @@ -1146,6 +1146,8 @@ protected void startWepApp() { } webApp = builder.start(new RMWebApp(this), uiWebAppContext); + InetSocketAddress webAddr = webApp.httpServer().getConnectorAddress(0); + LOG.info("RMWebApp at " + webAddr.getHostName() + ":" + webAddr.getPort()); } private String getWebAppsPath(String appName) { @@ -1263,7 +1265,7 @@ protected void serviceStart() throws Exception { } super.serviceStart(); } - + protected void doSecureLogin() throws IOException { InetSocketAddress socAddr = getBindAddress(conf); SecurityUtil.login(this.conf, YarnConfiguration.RM_KEYTAB, @@ -1293,7 +1295,7 @@ protected void serviceStop() throws Exception { transitionToStandby(false); rmContext.setHAServiceState(HAServiceState.STOPPING); } - + protected ResourceTrackerService createResourceTrackerService() { return new ResourceTrackerService(this.rmContext, this.nodesListManager, this.nmLivelinessMonitor, @@ -1501,7 +1503,7 @@ private void setSchedulerRecoveryStartAndWaitTime(RMState state, /** * Retrieve RM bind address from configuration - * + * * @param conf * @return InetSocketAddress */