Return-Path: X-Original-To: apmail-ambari-commits-archive@www.apache.org Delivered-To: apmail-ambari-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 9521811E12 for ; Wed, 30 Apr 2014 19:06:52 +0000 (UTC) Received: (qmail 87554 invoked by uid 500); 30 Apr 2014 19:06:38 -0000 Delivered-To: apmail-ambari-commits-archive@ambari.apache.org Received: (qmail 87480 invoked by uid 500); 30 Apr 2014 19:06:35 -0000 Mailing-List: contact commits-help@ambari.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: ambari-dev@ambari.apache.org Delivered-To: mailing list commits@ambari.apache.org Received: (qmail 87128 invoked by uid 99); 30 Apr 2014 19:06:28 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Apr 2014 19:06:28 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 581A288A5B3; Wed, 30 Apr 2014 19:06:28 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: ncole@apache.org To: commits@ambari.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: git commit: AMBARI-5639. Ambari will not respond to connections when CPU exceeds Jetty threads (ncole) Date: Wed, 30 Apr 2014 19:06:28 +0000 (UTC) Repository: ambari Updated Branches: refs/heads/trunk 7140d3c36 -> e28a1f506 AMBARI-5639. Ambari will not respond to connections when CPU exceeds Jetty threads (ncole) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/e28a1f50 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/e28a1f50 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/e28a1f50 Branch: refs/heads/trunk Commit: e28a1f506a314ce60c381abba50d846b3927905b Parents: 7140d3c Author: Nate Cole Authored: Wed Apr 30 13:50:19 2014 -0400 Committer: Nate Cole Committed: Wed Apr 30 13:50:25 2014 -0400 ---------------------------------------------------------------------- ambari-server/conf/unix/ambari.properties | 4 ++ .../server/configuration/Configuration.java | 43 +++++++++++++---- .../ambari/server/controller/AmbariServer.java | 6 ++- .../server/configuration/ConfigurationTest.java | 51 ++++++++++++++------ 4 files changed, 78 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/e28a1f50/ambari-server/conf/unix/ambari.properties ---------------------------------------------------------------------- diff --git a/ambari-server/conf/unix/ambari.properties b/ambari-server/conf/unix/ambari.properties index 5880dfe..764328e 100644 --- a/ambari-server/conf/unix/ambari.properties +++ b/ambari-server/conf/unix/ambari.properties @@ -42,3 +42,7 @@ server.execution.scheduler.misfire.toleration.minutes=480 # Default timeout in seconds before task is killed agent.task.timeout=600 + +# thread pool maximums +client.threadpool.size.max=25 +agent.threadpool.size.max=25 http://git-wip-us.apache.org/repos/asf/ambari/blob/e28a1f50/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java index 19b3c9a..6576861 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/configuration/Configuration.java @@ -17,7 +17,15 @@ */ package org.apache.ambari.server.configuration; -import com.google.inject.Singleton; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.orm.JPATableGenerationStrategy; import org.apache.ambari.server.orm.PersistenceType; @@ -30,14 +38,8 @@ import org.apache.commons.lang.RandomStringUtils; import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.util.HashMap; -import java.util.Map; -import java.util.Properties; -import java.util.Map.Entry; + +import com.google.inject.Singleton; /** @@ -274,6 +276,13 @@ public class Configuration { private static final String REPO_SUFFIX_UBUNTU = "/dists/HDP/Release.gpg,/dists/HDP/Release"; private static final String PARALLEL_STAGE_EXECUTION_DEFAULT = "true"; + + private static final String CLIENT_THREADPOOL_SIZE_KEY = "client.threadpool.size.max"; + private static final int CLIENT_THREADPOOL_SIZE_DEFAULT = 25; + private static final String AGENT_THREADPOOL_SIZE_KEY = "agent.threadpool.size.max"; + private static final int AGENT_THREADPOOL_SIZE_DEFAULT = 25; + + private static final Logger LOG = LoggerFactory.getLogger( Configuration.class); private Properties properties; @@ -968,4 +977,20 @@ public class Configuration { public String getServerJDBCSchemaName() { return properties.getProperty(SERVER_JDBC_SCHEMA_NAME, SERVER_DB_NAME_DEFAULT); } + + /** + * @return max thread pool size for clients, default 25 + */ + public int getClientThreadPoolSize() { + return Integer.parseInt(properties.getProperty( + CLIENT_THREADPOOL_SIZE_KEY, String.valueOf(CLIENT_THREADPOOL_SIZE_DEFAULT))); + } + + /** + * @return max thread pool size for agents, default 25 + */ + public int getAgentThreadPoolSize() { + return Integer.parseInt(properties.getProperty( + AGENT_THREADPOOL_SIZE_KEY, String.valueOf(AGENT_THREADPOOL_SIZE_DEFAULT))); + } } http://git-wip-us.apache.org/repos/asf/ambari/blob/e28a1f50/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 91632c0..cdb7fea 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 @@ -341,8 +341,10 @@ public class AmbariServer { } //Set jetty thread pool - serverForAgent.setThreadPool(new QueuedThreadPool(25)); - server.setThreadPool(new QueuedThreadPool(25)); + serverForAgent.setThreadPool( + new QueuedThreadPool(configs.getAgentThreadPoolSize())); + server.setThreadPool( + new QueuedThreadPool(configs.getClientThreadPoolSize())); /* Configure the API server to use the NIO connectors */ SelectChannelConnector apiConnector; http://git-wip-us.apache.org/repos/asf/ambari/blob/e28a1f50/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java b/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java index 8da66f4..c47c7fb 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/configuration/ConfigurationTest.java @@ -18,10 +18,22 @@ package org.apache.ambari.server.configuration; -import com.google.inject.Guice; -import com.google.inject.Inject; -import com.google.inject.Injector; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static org.powermock.api.easymock.PowerMock.mockStatic; +import static org.powermock.api.easymock.PowerMock.replayAll; +import static org.powermock.api.easymock.PowerMock.verifyAll; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.Map; +import java.util.Properties; + import junit.framework.Assert; + import org.apache.ambari.server.AmbariException; import org.apache.ambari.server.orm.InMemoryDefaultTestModule; import org.apache.commons.io.FileUtils; @@ -38,18 +50,9 @@ import org.powermock.api.support.membermodification.MemberMatcher; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; -import static org.mockito.Mockito.*; -import static org.powermock.api.easymock.PowerMock.mockStatic; -import static org.powermock.api.easymock.PowerMock.replayAll; -import static org.powermock.api.easymock.PowerMock.verifyAll; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileWriter; -import java.io.IOException; -import java.lang.reflect.Method; -import java.util.Map; -import java.util.Properties; +import com.google.inject.Guice; +import com.google.inject.Inject; +import com.google.inject.Injector; @RunWith(PowerMockRunner.class) @@ -258,4 +261,22 @@ public class ConfigurationTest { conf.getLocalDatabaseUrl(); } + @Test() + public void testServerPoolSizes() { + Properties ambariProperties = new Properties(); + Configuration conf = new Configuration(ambariProperties); + + Assert.assertEquals(25, conf.getClientThreadPoolSize()); + Assert.assertEquals(25, conf.getAgentThreadPoolSize()); + + ambariProperties = new Properties(); + ambariProperties.setProperty("client.threadpool.size.max", "4"); + ambariProperties.setProperty("agent.threadpool.size.max", "82"); + conf = new Configuration(ambariProperties); + + Assert.assertEquals(4, conf.getClientThreadPoolSize()); + Assert.assertEquals(82, conf.getAgentThreadPoolSize()); + + } + }