Repository: ambari Updated Branches: refs/heads/branch-2.4 2605237df -> 1f7a4ee91
Revert "AMBARI-17991 Ambari agent unable to register with server when server response is too big (dsen)" This reverts commit a76215f67d7e95e5a33d72012e16efb34f4de6c6. Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1f7a4ee9 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1f7a4ee9 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1f7a4ee9 Branch: refs/heads/branch-2.4 Commit: 1f7a4ee911f1bbc66d3d468103fc40f84e139e4d Parents: 2605237 Author: Jonathan Hurley <[email protected]> Authored: Fri Aug 5 14:19:16 2016 -0400 Committer: Jonathan Hurley <[email protected]> Committed: Fri Aug 5 14:19:16 2016 -0400 ---------------------------------------------------------------------- .../src/main/python/ambari_agent/security.py | 2 +- ambari-funtest/pom.xml | 10 +- .../ambari-logsearch-portal/pom.xml | 25 --- ambari-project/pom.xml | 22 +-- ambari-server/pom.xml | 23 ++- .../ambari/server/api/AmbariErrorHandler.java | 14 +- .../ambari/server/controller/AmbariServer.java | 159 +++++++++++++------ .../server/stack/ConfigurationDirectory.java | 4 +- .../apache/ambari/server/utils/JsonUtils.java | 4 +- .../server/api/AmbariErrorHandlerTest.java | 3 +- .../audit/request/DefaultEventCreatorTest.java | 5 +- 11 files changed, 145 insertions(+), 126 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/1f7a4ee9/ambari-agent/src/main/python/ambari_agent/security.py ---------------------------------------------------------------------- diff --git a/ambari-agent/src/main/python/ambari_agent/security.py b/ambari-agent/src/main/python/ambari_agent/security.py index a0b5e7e..779b85c 100644 --- a/ambari-agent/src/main/python/ambari_agent/security.py +++ b/ambari-agent/src/main/python/ambari_agent/security.py @@ -98,7 +98,7 @@ class VerifiedHTTPSConnection(httplib.HTTPSConnection): if self.sock: self.sock.close() logger.info("SSL Connect being called.. connecting to the server") - sock = socket.create_connection((self.host, self.port), 90) + sock = socket.create_connection((self.host, self.port), 60) sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1) if self._tunnel_host: self.sock = sock http://git-wip-us.apache.org/repos/asf/ambari/blob/1f7a4ee9/ambari-funtest/pom.xml ---------------------------------------------------------------------- diff --git a/ambari-funtest/pom.xml b/ambari-funtest/pom.xml index 257af3b..422137a 100644 --- a/ambari-funtest/pom.xml +++ b/ambari-funtest/pom.xml @@ -302,14 +302,8 @@ </dependency> <!--jsp support for jetty --> <dependency> - <groupId>org.mortbay.jetty</groupId> - <artifactId>jsp-api-2.1-glassfish</artifactId> - <version>2.1.v20100127</version> - </dependency> - <dependency> - <groupId>org.mortbay.jetty</groupId> - <artifactId>jsp-2.1-glassfish</artifactId> - <version>2.1.v20100127</version> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-jsp</artifactId> </dependency> <dependency> <groupId>org.apache.ant</groupId> http://git-wip-us.apache.org/repos/asf/ambari/blob/1f7a4ee9/ambari-logsearch/ambari-logsearch-portal/pom.xml ---------------------------------------------------------------------- diff --git a/ambari-logsearch/ambari-logsearch-portal/pom.xml b/ambari-logsearch/ambari-logsearch-portal/pom.xml index 2b2ca50..6233b48 100755 --- a/ambari-logsearch/ambari-logsearch-portal/pom.xml +++ b/ambari-logsearch/ambari-logsearch-portal/pom.xml @@ -596,31 +596,6 @@ </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-security</artifactId> - <version>${jetty-version}</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-server</artifactId> - <version>${jetty-version}</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-servlet</artifactId> - <version>${jetty-version}</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-servlets</artifactId> - <version>${jetty-version}</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> - <artifactId>jetty-util</artifactId> - <version>${jetty-version}</version> - </dependency> - <dependency> - <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> <version>${jetty-version}</version> <exclusions> http://git-wip-us.apache.org/repos/asf/ambari/blob/1f7a4ee9/ambari-project/pom.xml ---------------------------------------------------------------------- diff --git a/ambari-project/pom.xml b/ambari-project/pom.xml index 64e0ff5..019108b 100644 --- a/ambari-project/pom.xml +++ b/ambari-project/pom.xml @@ -29,7 +29,6 @@ <properties> <ambari.dir>${project.parent.basedir}</ambari.dir> <powermock.version>1.6.3</powermock.version> - <jetty.version>8.1.19.v20160209</jetty.version> </properties> <profiles> <profile> @@ -261,37 +260,32 @@ <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> - <version>${jetty.version}</version> + <version>9.2.11.v20150529</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-security</artifactId> - <version>${jetty.version}</version> + <version>9.2.11.v20150529</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> - <version>${jetty.version}</version> + <version>9.2.11.v20150529</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlets</artifactId> - <version>${jetty.version}</version> + <version>9.2.11.v20150529</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> - <version>${jetty.version}</version> + <version>9.2.11.v20150529</version> </dependency> <dependency> - <groupId>org.mortbay.jetty</groupId> - <artifactId>jsp-api-2.1-glassfish</artifactId> - <version>2.1.v20100127</version> - </dependency> - <dependency> - <groupId>org.mortbay.jetty</groupId> - <artifactId>jsp-2.1-glassfish</artifactId> - <version>2.1.v20100127</version> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-jsp</artifactId> + <version>9.2.11.v20150529</version> </dependency> <dependency> <groupId>org.apache.ant</groupId> http://git-wip-us.apache.org/repos/asf/ambari/blob/1f7a4ee9/ambari-server/pom.xml ---------------------------------------------------------------------- diff --git a/ambari-server/pom.xml b/ambari-server/pom.xml index 63c2185..8d59460 100644 --- a/ambari-server/pom.xml +++ b/ambari-server/pom.xml @@ -45,6 +45,7 @@ <tarballResourcesFolder>src/main/resources</tarballResourcesFolder> <skipPythonTests>false</skipPythonTests> <hadoop.version>2.7.1</hadoop.version> + <jetty.version>9.2.11.v20150529</jetty.version> <empty.dir>src/main/package</empty.dir> <!-- any directory in project with not very big amount of files (not to waste-load them) --> </properties> <build> @@ -1089,32 +1090,22 @@ <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-security</artifactId> - <version>${jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlet</artifactId> - <version>${jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-servlets</artifactId> - <version>${jetty.version}</version> </dependency> <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-webapp</artifactId> - <version>${jetty.version}</version> </dependency> <dependency> - <groupId>org.mortbay.jetty</groupId> - <artifactId>jsp-api-2.1-glassfish</artifactId> - <version>2.1.v20100127</version> - </dependency> - <dependency> - <groupId>org.mortbay.jetty</groupId> - <artifactId>jsp-2.1-glassfish</artifactId> - <version>2.1.v20100127</version> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-jsp</artifactId> </dependency> <dependency> <groupId>org.apache.ant</groupId> @@ -1124,7 +1115,6 @@ <dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> - <version>${jetty.version}</version> </dependency> <dependency> <groupId>commons-logging</groupId> @@ -1278,7 +1268,7 @@ <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> - <version>2.7</version> + <version>2.2.2</version> </dependency> <dependency> <groupId>org.postgresql</groupId> @@ -1369,6 +1359,11 @@ <version>${jetty.version}</version> </dependency> <dependency> + <groupId>org.eclipse.jetty</groupId> + <artifactId>jetty-util-ajax</artifactId> + <version>${jetty.version}</version> + </dependency> + <dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.3.1</version> http://git-wip-us.apache.org/repos/asf/ambari/blob/1f7a4ee9/ambari-server/src/main/java/org/apache/ambari/server/api/AmbariErrorHandler.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/AmbariErrorHandler.java b/ambari-server/src/main/java/org/apache/ambari/server/api/AmbariErrorHandler.java index c4a80f2..373face 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/api/AmbariErrorHandler.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/api/AmbariErrorHandler.java @@ -25,7 +25,8 @@ import org.apache.ambari.server.configuration.Configuration; import org.apache.ambari.server.security.authorization.jwt.JwtAuthenticationProperties; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.http.MimeTypes; -import org.eclipse.jetty.server.AbstractHttpConnection; +import org.eclipse.jetty.server.HttpChannel; +import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.ErrorHandler; @@ -50,15 +51,14 @@ public class AmbariErrorHandler extends ErrorHandler { @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException { - AbstractHttpConnection connection = AbstractHttpConnection.getCurrentConnection(); - connection.getRequest().setHandled(true); - - response.setContentType(MimeTypes.TEXT_PLAIN); + HttpChannel httpChannel = HttpConnection.getCurrentConnection().getHttpChannel(); + httpChannel.getRequest().setHandled(true); + response.setContentType(MimeTypes.Type.TEXT_PLAIN.asString()); Map<String, Object> errorMap = new LinkedHashMap<String, Object>(); - int code = connection.getResponse().getStatus(); + int code = httpChannel.getResponse().getStatus(); errorMap.put("status", code); - String message = connection.getResponse().getReason(); + String message = httpChannel.getResponse().getReason(); if (message == null) { message = HttpStatus.getMessage(code); } http://git-wip-us.apache.org/repos/asf/ambari/blob/1f7a4ee9/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java index a6d8d6a..bd96868 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java @@ -119,11 +119,15 @@ import org.apache.ambari.server.view.ViewDirectoryWatcher; import org.apache.ambari.server.view.ViewRegistry; import org.apache.ambari.server.view.ViewThrottleFilter; import org.apache.velocity.app.Velocity; +import org.eclipse.jetty.http.HttpVersion; +import org.eclipse.jetty.server.HttpConfiguration; +import org.eclipse.jetty.server.HttpConnectionFactory; +import org.eclipse.jetty.server.SecureRequestCustomizer; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.server.SessionIdManager; import org.eclipse.jetty.server.SessionManager; -import org.eclipse.jetty.server.nio.SelectChannelConnector; -import org.eclipse.jetty.server.ssl.SslSelectChannelConnector; +import org.eclipse.jetty.server.SslConnectionFactory; import org.eclipse.jetty.servlet.DefaultServlet; import org.eclipse.jetty.servlet.FilterHolder; import org.eclipse.jetty.servlet.ServletContextHandler; @@ -409,10 +413,11 @@ public class AmbariServer { if (configs.getAgentSSLAuthentication()) { //Secured connector for 2-way auth SslContextFactory contextFactoryTwoWay = new SslContextFactory(); - disableInsecureProtocols(contextFactoryTwoWay); - - SslSelectChannelConnector sslConnectorTwoWay = new SslSelectChannelConnector(contextFactoryTwoWay); - sslConnectorTwoWay.setPort(configs.getTwoWayAuthPort()); + HttpConfiguration httpConfigurationTwoWay = new HttpConfiguration(); + httpConfigurationTwoWay.setSecureScheme("https"); + httpConfigurationTwoWay.setSecurePort(configs.getTwoWayAuthPort()); + httpConfigurationTwoWay.addCustomizer(new SecureRequestCustomizer()); + setHeaderSize(httpConfigurationTwoWay); String keystore = configsMap.get(Configuration.SRVR_KSTR_DIR_KEY) + File.separator + configsMap.get(Configuration.KSTR_NAME_KEY); @@ -422,21 +427,20 @@ public class AmbariServer { String srvrCrtPass = configsMap.get(Configuration.SRVR_CRT_PASS_KEY); - sslConnectorTwoWay.setKeystore(keystore); - sslConnectorTwoWay.setTruststore(truststore); - sslConnectorTwoWay.setPassword(srvrCrtPass); - sslConnectorTwoWay.setKeyPassword(srvrCrtPass); - sslConnectorTwoWay.setTrustPassword(srvrCrtPass); - sslConnectorTwoWay.setKeystoreType(configsMap.get(Configuration.KSTR_TYPE_KEY)); - sslConnectorTwoWay.setTruststoreType(configsMap.get(Configuration.TSTR_TYPE_KEY)); - sslConnectorTwoWay.setNeedClientAuth(configs.getTwoWaySsl()); - sslConnectorTwoWay.setRequestHeaderSize(configs.getHttpRequestHeaderSize()); - sslConnectorTwoWay.setResponseHeaderSize(configs.getHttpResponseHeaderSize()); + contextFactoryTwoWay.setKeyStorePath(keystore); + contextFactoryTwoWay.setTrustStorePath(truststore); + contextFactoryTwoWay.setKeyManagerPassword(srvrCrtPass); + contextFactoryTwoWay.setKeyStorePassword(srvrCrtPass); + contextFactoryTwoWay.setTrustStorePassword(srvrCrtPass); + contextFactoryTwoWay.setKeyStoreType(configsMap.get(Configuration.KSTR_TYPE_KEY)); + contextFactoryTwoWay.setTrustStoreType(configsMap.get(Configuration.TSTR_TYPE_KEY)); + contextFactoryTwoWay.setNeedClientAuth(configs.getTwoWaySsl()); + disableInsecureProtocols(contextFactoryTwoWay); //SSL Context Factory SslContextFactory contextFactoryOneWay = new SslContextFactory(true); contextFactoryOneWay.setKeyStorePath(keystore); - contextFactoryOneWay.setTrustStore(truststore); + contextFactoryOneWay.setTrustStorePath(truststore); contextFactoryOneWay.setKeyStorePassword(srvrCrtPass); contextFactoryOneWay.setKeyManagerPassword(srvrCrtPass); contextFactoryOneWay.setTrustStorePassword(srvrCrtPass); @@ -445,32 +449,43 @@ public class AmbariServer { contextFactoryOneWay.setNeedClientAuth(false); disableInsecureProtocols(contextFactoryOneWay); - //Secured connector for 1-way auth - SslSelectChannelConnector sslConnectorOneWay = new SslSelectChannelConnector(contextFactoryOneWay); + HttpConfiguration httpConfigurationOneWay = new HttpConfiguration(); + httpConfigurationOneWay.setSecureScheme("https"); + httpConfigurationOneWay.setSecurePort(configs.getOneWayAuthPort()); + httpConfigurationOneWay.addCustomizer(new SecureRequestCustomizer()); + setHeaderSize(httpConfigurationOneWay); + + Map <String, Integer> agentSelectorAcceptorMap = getDesiredAgentAcceptorSelector(serverForAgent); + // SSL for 1-way auth + ServerConnector sslConnectorOneWay = new ServerConnector(serverForAgent, + agentSelectorAcceptorMap.get("desiredAcceptors"), agentSelectorAcceptorMap.get("desiredSelectors"), + new SslConnectionFactory(contextFactoryOneWay, HttpVersion.HTTP_1_1.asString()), + new HttpConnectionFactory(httpConfigurationOneWay)); + sslConnectorOneWay.setPort(configs.getOneWayAuthPort()); - sslConnectorOneWay.setRequestHeaderSize(configs.getHttpRequestHeaderSize()); - sslConnectorOneWay.setResponseHeaderSize(configs.getHttpResponseHeaderSize()); - // because there are two connectors sharing the same pool, cut each's - // acceptors in half - int sslAcceptors = sslConnectorOneWay.getAcceptors(); - sslConnectorOneWay.setAcceptors(Math.max(2, sslAcceptors / 2)); - sslConnectorTwoWay.setAcceptors(Math.max(2, sslAcceptors / 2)); + // SSL for 2-way auth + ServerConnector sslConnectorTwoWay = new ServerConnector(serverForAgent, + agentSelectorAcceptorMap.get("desiredAcceptors"), agentSelectorAcceptorMap.get("desiredSelectors"), + new SslConnectionFactory(contextFactoryTwoWay, HttpVersion.HTTP_1_1.asString()), + new HttpConnectionFactory(httpConfigurationTwoWay)); + + sslConnectorTwoWay.setPort(configs.getTwoWayAuthPort()); // Agent Jetty thread pool configureJettyThreadPool(serverForAgent, sslConnectorOneWay.getAcceptors(), - "qtp-ambari-agent", configs.getAgentThreadPoolSize()); + AGENT_THREAD_POOL_NAME, configs.getAgentThreadPoolSize()); serverForAgent.addConnector(sslConnectorOneWay); serverForAgent.addConnector(sslConnectorTwoWay); } else { - SelectChannelConnector agentConnector = new SelectChannelConnector(); + ServerConnector agentConnector = new ServerConnector(serverForAgent); agentConnector.setPort(configs.getOneWayAuthPort()); - agentConnector.setMaxIdleTime(configs.getConnectionMaxIdleTime()); + agentConnector.setIdleTimeout(configs.getConnectionMaxIdleTime()); // Agent Jetty thread pool - configureJettyThreadPool(serverForAgent, agentConnector.getAcceptors(), "qtp-ambari-agent", - configs.getAgentThreadPoolSize()); + configureJettyThreadPool(serverForAgent, agentConnector.getAcceptors(), AGENT_THREAD_POOL_NAME, + configs.getAgentThreadPoolSize()); serverForAgent.addConnector(agentConnector); } @@ -533,7 +548,7 @@ public class AmbariServer { } /* Configure the API server to use the NIO connectors */ - SelectChannelConnector apiConnector; + ServerConnector apiConnector; if (configs.getApiSSLAuthentication()) { String httpsKeystore = configsMap.get(Configuration.CLIENT_API_SSL_KSTR_DIR_NAME_KEY) + @@ -546,26 +561,35 @@ public class AmbariServer { SslContextFactory contextFactoryApi = new SslContextFactory(); disableInsecureProtocols(contextFactoryApi); - SslSelectChannelConnector sapiConnector = new SslSelectChannelConnector(contextFactoryApi); - sapiConnector.setPort(configs.getClientSSLApiPort()); - sapiConnector.setKeystore(httpsKeystore); - sapiConnector.setTruststore(httpsTruststore); - sapiConnector.setPassword(httpsCrtPass); - sapiConnector.setKeyPassword(httpsCrtPass); - sapiConnector.setTrustPassword(httpsCrtPass); - sapiConnector.setKeystoreType(configsMap.get(Configuration.CLIENT_API_SSL_KSTR_TYPE_KEY)); - sapiConnector.setTruststoreType(configsMap.get(Configuration.CLIENT_API_SSL_KSTR_TYPE_KEY)); - sapiConnector.setMaxIdleTime(configs.getConnectionMaxIdleTime()); - apiConnector = sapiConnector; + + contextFactoryApi.setKeyStorePath(httpsKeystore); + contextFactoryApi.setTrustStorePath(httpsTruststore); + contextFactoryApi.setKeyManagerPassword(httpsCrtPass); + contextFactoryApi.setKeyStorePassword(httpsCrtPass); + contextFactoryApi.setTrustStorePassword(httpsCrtPass); + contextFactoryApi.setKeyStoreType(configsMap.get(Configuration.CLIENT_API_SSL_KSTR_TYPE_KEY)); + contextFactoryApi.setTrustStoreType(configsMap.get(Configuration.CLIENT_API_SSL_KSTR_TYPE_KEY)); + + HttpConfiguration httpConfigurationSSL = new HttpConfiguration(); + httpConfigurationSSL.setSecurePort(configs.getClientSSLApiPort()); + httpConfigurationSSL.addCustomizer(new SecureRequestCustomizer()); + setHeaderSize(httpConfigurationSSL); + + ServerConnector https = new ServerConnector(server, new SslConnectionFactory(contextFactoryApi, "http/1.1"), + new HttpConnectionFactory(httpConfigurationSSL)); + https.setPort(configs.getClientSSLApiPort()); + https.setIdleTimeout(configs.getConnectionMaxIdleTime()); + apiConnector = https; } else { - apiConnector = new SelectChannelConnector(); + HttpConfiguration httpConfiguration = new HttpConfiguration(); + httpConfiguration.setSecurePort(configs.getClientApiPort()); + setHeaderSize(httpConfiguration); + + apiConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfiguration)); apiConnector.setPort(configs.getClientApiPort()); - apiConnector.setMaxIdleTime(configs.getConnectionMaxIdleTime()); + apiConnector.setIdleTimeout(configs.getConnectionMaxIdleTime()); } - apiConnector.setRequestHeaderSize(configs.getHttpRequestHeaderSize()); - apiConnector.setResponseHeaderSize(configs.getHttpResponseHeaderSize()); - // Client Jetty thread pool configureJettyThreadPool(server, apiConnector.getAcceptors(), CLIENT_THREAD_POOL_NAME, configs.getClientThreadPoolSize()); server.addConnector(apiConnector); @@ -650,13 +674,38 @@ public class AmbariServer { } /** + * Calculate desired Acceptor and Selector for Jetty agent ServerConnector + * @param serverForAgent + * the Jetty server instance which will have the selector and Acceptor set on it + * @return jettySelectorAcceptorMap + * Map with "desiredAcceptors" and "desiredSelectors" keys + */ + protected Map<String, Integer> getDesiredAgentAcceptorSelector(Server serverForAgent) { + ServerConnector serverConnector = new ServerConnector(serverForAgent); + Map <String, Integer> jettySelectorAcceptorMap = new HashMap<>(); + // By default Jetty-9 assigns Math.max(1, Math.min(4, (cores available to JVM)/8)) acceptors to a ServerConnector + int defaultAcceptors = serverConnector.getAcceptors(); + + // By default Jetty-9 assigns Math.max(1, Math.min(4, (cores available to JVM)/2))) selectors to a ServerConnector + int defaultSelectors = serverConnector.getSelectorManager().getSelectorCount(); + + // because there are two connectors sharing the same pool, cut each's + // acceptors and selectors in half + int desiredAcceptors = Math.max(2, defaultAcceptors / 2); + int desiredSelectors = Math.max(2, defaultSelectors / 2); + jettySelectorAcceptorMap.put("desiredAcceptors", desiredAcceptors); + jettySelectorAcceptorMap.put("desiredSelectors", desiredSelectors); + return jettySelectorAcceptorMap; + } + + /** * The Jetty thread pool consists of three basic types of threads: * <ul> * <li>Acceptors</li> * <li>Selectors</li> * <li>Threads which can actually do stuff</li> * <ul> - * The {@link SelectChannelConnector} uses the + * The {@link ServerConnector} uses the * {@link Runtime#availableProcessors()} as a way to determine how many * acceptors and selectors to create. If the number of processors is too * great, then there will be no threads left to fullfil connection requests. @@ -702,9 +751,9 @@ public class AmbariServer { threadPoolName, acceptorThreads * 2, configuredThreadPoolSize, Runtime.getRuntime().availableProcessors()); - QueuedThreadPool qtp = new QueuedThreadPool(configuredThreadPoolSize); + final QueuedThreadPool qtp = server.getBean(QueuedThreadPool.class); qtp.setName(threadPoolName); - server.setThreadPool(qtp); + qtp.setMaxThreads(configuredThreadPoolSize); } /** @@ -727,6 +776,14 @@ public class AmbariServer { } /** + * Propagate header size to Jetty HTTP configuration + */ + private void setHeaderSize(HttpConfiguration httpConfiguration) { + httpConfiguration.setResponseHeaderSize(configs.getHttpResponseHeaderSize()); + httpConfiguration.setRequestHeaderSize(configs.getHttpRequestHeaderSize()); + } + + /** * Performs basic configuration of root handler with static values and values * from configuration file. * http://git-wip-us.apache.org/repos/asf/ambari/blob/1f7a4ee9/ambari-server/src/main/java/org/apache/ambari/server/stack/ConfigurationDirectory.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/stack/ConfigurationDirectory.java b/ambari-server/src/main/java/org/apache/ambari/server/stack/ConfigurationDirectory.java index cfdf9fc..44cdf2b 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/stack/ConfigurationDirectory.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/stack/ConfigurationDirectory.java @@ -25,7 +25,7 @@ import org.apache.ambari.server.state.stack.ConfigurationXml; import org.apache.ambari.server.utils.JsonUtils; import org.apache.ambari.server.utils.XmlUtils; import org.apache.commons.io.FileUtils; -import org.apache.commons.lang.StringUtils; +import org.eclipse.jetty.util.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,7 +73,7 @@ public class ConfigurationDirectory extends StackDefinitionDirectory { */ public ConfigurationDirectory(String directoryName, String propertiesDirectoryName) { super(directoryName); - if(!StringUtils.isBlank(propertiesDirectoryName)) { + if(!StringUtil.isBlank(propertiesDirectoryName)) { propertiesDirFile = new File(propertiesDirectoryName); } parsePath(); http://git-wip-us.apache.org/repos/asf/ambari/blob/1f7a4ee9/ambari-server/src/main/java/org/apache/ambari/server/utils/JsonUtils.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/utils/JsonUtils.java b/ambari-server/src/main/java/org/apache/ambari/server/utils/JsonUtils.java index ff4bc1d..63c88d8 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/utils/JsonUtils.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/utils/JsonUtils.java @@ -19,7 +19,7 @@ package org.apache.ambari.server.utils; import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; -import org.apache.commons.lang.StringUtils; +import org.eclipse.jetty.util.StringUtil; /** * Static Helper methods for Json processing. @@ -35,7 +35,7 @@ public class JsonUtils { */ public static boolean isValidJson(String jsonString) { - if(StringUtils.isBlank(jsonString)) { + if(StringUtil.isBlank(jsonString)) { return false; } try { http://git-wip-us.apache.org/repos/asf/ambari/blob/1f7a4ee9/ambari-server/src/test/java/org/apache/ambari/server/api/AmbariErrorHandlerTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/AmbariErrorHandlerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/AmbariErrorHandlerTest.java index 5ecadca..30c22a2 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/api/AmbariErrorHandlerTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/api/AmbariErrorHandlerTest.java @@ -26,6 +26,7 @@ import com.sun.jersey.api.client.WebResource; import org.apache.ambari.server.configuration.Configuration; import org.eclipse.jetty.server.Connector; import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; import org.eclipse.jetty.servlet.DefaultServlet; import org.eclipse.jetty.servlet.ServletContextHandler; import org.junit.Test; @@ -65,7 +66,7 @@ public class AmbariErrorHandlerTest { server.start(); Connector connector = server.getConnectors()[0]; - int localPort = server.getConnectors()[0].getLocalPort(); + int localPort = ((ServerConnector)connector).getLocalPort(); Client client = new Client(); WebResource resource = client.resource("http://localhost:" + localPort + "/"); http://git-wip-us.apache.org/repos/asf/ambari/blob/1f7a4ee9/ambari-server/src/test/java/org/apache/ambari/server/audit/request/DefaultEventCreatorTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/DefaultEventCreatorTest.java b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/DefaultEventCreatorTest.java index 778b3ed..1e063ec 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/audit/request/DefaultEventCreatorTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/audit/request/DefaultEventCreatorTest.java @@ -232,6 +232,7 @@ public class DefaultEventCreatorTest { return null; } + @Override public String changeSessionId() { return null; } @@ -281,6 +282,7 @@ public class DefaultEventCreatorTest { return null; } + @Override public <T extends HttpUpgradeHandler> T upgrade(Class<T> aClass) throws IOException, ServletException { return null; } @@ -310,6 +312,7 @@ public class DefaultEventCreatorTest { return 0; } + @Override public long getContentLengthLong() { return 0; } @@ -509,4 +512,4 @@ public class DefaultEventCreatorTest { Assert.assertEquals(expected, actual); } -} +} \ No newline at end of file
