Externalize httpd and sshd thread computation
Move sshd.threads, httpd.maxThreads and database.poolLimit to separate class. This way default value of poolLimit can be dynamically computed based on two previously mentioned properties. Change-Id: I5167c4a42ed5e5a480d0ff4accba490dffa05fd4 Signed-off-by: Dariusz Luksza <dariusz@luksza.org>
This commit is contained in:
@@ -23,6 +23,7 @@ import com.google.gerrit.pgm.http.jetty.HttpLog.HttpLogFactory;
|
||||
import com.google.gerrit.reviewdb.client.AuthType;
|
||||
import com.google.gerrit.server.config.GerritServerConfig;
|
||||
import com.google.gerrit.server.config.SitePaths;
|
||||
import com.google.gerrit.server.config.ThreadSettingsConfig;
|
||||
import com.google.inject.Inject;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Singleton;
|
||||
@@ -127,11 +128,14 @@ public class JettyServer {
|
||||
private boolean reverseProxy;
|
||||
|
||||
@Inject
|
||||
JettyServer(@GerritServerConfig final Config cfg, final SitePaths site,
|
||||
final JettyEnv env, final HttpLogFactory httpLogFactory) {
|
||||
JettyServer(@GerritServerConfig Config cfg,
|
||||
ThreadSettingsConfig threadSettingsConfig,
|
||||
SitePaths site,
|
||||
JettyEnv env,
|
||||
HttpLogFactory httpLogFactory) {
|
||||
this.site = site;
|
||||
|
||||
httpd = new Server(threadPool(cfg));
|
||||
httpd = new Server(threadPool(cfg, threadSettingsConfig));
|
||||
httpd.setConnectors(listen(httpd, cfg));
|
||||
|
||||
Handler app = makeContext(env, cfg);
|
||||
@@ -315,8 +319,8 @@ public class JettyServer {
|
||||
return site.resolve(path);
|
||||
}
|
||||
|
||||
private ThreadPool threadPool(Config cfg) {
|
||||
int maxThreads = cfg.getInt("httpd", null, "maxthreads", 25);
|
||||
private ThreadPool threadPool(Config cfg, ThreadSettingsConfig threadSettingsConfig) {
|
||||
int maxThreads = threadSettingsConfig.getHttpdMaxThreads();
|
||||
int minThreads = cfg.getInt("httpd", null, "minthreads", 5);
|
||||
int maxQueued = cfg.getInt("httpd", null, "maxqueued", 200);
|
||||
int idleTimeout = (int)MILLISECONDS.convert(60, SECONDS);
|
||||
|
||||
@@ -18,6 +18,7 @@ import com.google.gerrit.common.SiteLibraryLoaderUtil;
|
||||
import com.google.gerrit.metrics.MetricMaker;
|
||||
import com.google.gerrit.server.config.GerritServerConfig;
|
||||
import com.google.gerrit.server.config.SitePaths;
|
||||
import com.google.gerrit.server.config.ThreadSettingsConfig;
|
||||
import com.google.gerrit.server.schema.DataSourceProvider;
|
||||
import com.google.gerrit.server.schema.DataSourceType;
|
||||
import com.google.inject.Inject;
|
||||
@@ -39,9 +40,10 @@ public class SiteLibraryBasedDataSourceProvider extends DataSourceProvider {
|
||||
SiteLibraryBasedDataSourceProvider(SitePaths site,
|
||||
@GerritServerConfig Config cfg,
|
||||
MetricMaker metrics,
|
||||
ThreadSettingsConfig tsc,
|
||||
DataSourceProvider.Context ctx,
|
||||
DataSourceType dst) {
|
||||
super(cfg, metrics, ctx, dst);
|
||||
super(cfg, metrics, tsc, ctx, dst);
|
||||
libdir = site.lib_dir;
|
||||
}
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
package com.google.gerrit.pgm.util;
|
||||
|
||||
import com.google.gerrit.server.config.GerritServerConfig;
|
||||
import com.google.gerrit.server.config.ThreadSettingsConfig;
|
||||
import com.google.gerrit.server.schema.DataSourceProvider;
|
||||
import com.google.gerrit.server.schema.DataSourceType;
|
||||
import com.google.inject.Injector;
|
||||
@@ -34,14 +35,15 @@ public class ThreadLimiter {
|
||||
return limitThreads(
|
||||
dbInjector.getInstance(Key.get(Config.class, GerritServerConfig.class)),
|
||||
dbInjector.getInstance(DataSourceType.class),
|
||||
dbInjector.getInstance(ThreadSettingsConfig.class),
|
||||
threads);
|
||||
}
|
||||
|
||||
private static int limitThreads(Config cfg, DataSourceType dst, int threads) {
|
||||
private static int limitThreads(Config cfg, DataSourceType dst,
|
||||
ThreadSettingsConfig threadSettingsConfig, int threads) {
|
||||
boolean usePool = cfg.getBoolean("database", "connectionpool",
|
||||
dst.usePool());
|
||||
int poolLimit = cfg.getInt("database", "poollimit",
|
||||
DataSourceProvider.DEFAULT_POOL_LIMIT);
|
||||
int poolLimit = threadSettingsConfig.getDatabasePoolLimit();
|
||||
if (usePool && threads > poolLimit) {
|
||||
log.warn("Limiting program to " + poolLimit
|
||||
+ " threads due to database.poolLimit");
|
||||
|
||||
Reference in New Issue
Block a user