From c9c0ae2823641b31ff33f6e710b50745c181ebb2 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Fri, 17 Jan 2020 09:43:14 -0500 Subject: [PATCH] make selector/worker thread counts configurable --- .../cobbzilla/wizard/client/ApiClientBase.java | 5 ++++- .../cobbzilla/wizard/server/RestServerBase.java | 17 +++++++++++++---- .../wizard/server/config/HttpConfiguration.java | 7 +++++++ 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/wizard-common/src/main/java/org/cobbzilla/wizard/client/ApiClientBase.java b/wizard-common/src/main/java/org/cobbzilla/wizard/client/ApiClientBase.java index 8c02df3..3747af0 100644 --- a/wizard-common/src/main/java/org/cobbzilla/wizard/client/ApiClientBase.java +++ b/wizard-common/src/main/java/org/cobbzilla/wizard/client/ApiClientBase.java @@ -129,12 +129,15 @@ public class ApiClientBase implements Cloneable, Closeable { .setSocketTimeout(socketTimeout) .setConnectionRequestTimeout(requestTimeout); - httpClient = HttpClientBuilder.create() + httpClient = getHttpClientBuilder() .setDefaultRequestConfig(requestBuilder.build()) .build(); } return httpClient; } + + public HttpClientBuilder getHttpClientBuilder() { return HttpClientBuilder.create(); } + public void setHttpClient(HttpClient httpClient) { this.httpClient = httpClient; } public RestResponse process(HttpRequestBean requestBean) throws Exception { diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/server/RestServerBase.java b/wizard-server/src/main/java/org/cobbzilla/wizard/server/RestServerBase.java index d0b8277..93af36b 100644 --- a/wizard-server/src/main/java/org/cobbzilla/wizard/server/RestServerBase.java +++ b/wizard-server/src/main/java/org/cobbzilla/wizard/server/RestServerBase.java @@ -183,12 +183,21 @@ public abstract class RestServerBase implemen rc.property("contextConfig", applicationContext); // pick a port - if (!configuration.getHttp().hasPort()) { - configuration.getHttp().setPort(PortPicker.pick()); + final HttpConfiguration httpConfig = configuration.getHttp(); + if (!httpConfig.hasPort()) { + httpConfig.setPort(PortPicker.pick()); } final HttpServer httpServer = new HttpServer(); - final NetworkListener listener = new NetworkListener("grizzly-"+serverName, getListenAddress(), configuration.getHttp().getPort()); + final NetworkListener listener = new NetworkListener("grizzly-"+serverName, getListenAddress(), httpConfig.getPort()); + if (httpConfig.hasSelectorThreads()) { + log.info("buildServer: using "+httpConfig.getSelectorThreads()+" selector threads"); + listener.getTransport().setSelectorRunnersCount(httpConfig.getSelectorThreads()); + } + if (httpConfig.hasWorkerThreads()) { + log.info("buildServer: using "+httpConfig.getWorkerThreads()+" worker threads"); + listener.getTransport().getWorkerThreadPoolConfig().setMaxPoolSize(httpConfig.getWorkerThreads()); + } httpServer.addListener(listener); final ServerConfiguration serverConfig = httpServer.getServerConfiguration(); @@ -213,7 +222,7 @@ public abstract class RestServerBase implemen // then the REST/Jersey handler final HttpHandler processor = ContainerFactory.createContainer(GrizzlyHttpContainer.class, rc); - final String restBase = configuration.getHttp().getBaseUri(); + final String restBase = httpConfig.getBaseUri(); serverConfig.addHttpHandler(processor, restBase); // then optional static asset handler diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/HttpConfiguration.java b/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/HttpConfiguration.java index 73bf16c..9cc0b85 100644 --- a/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/HttpConfiguration.java +++ b/wizard-server/src/main/java/org/cobbzilla/wizard/server/config/HttpConfiguration.java @@ -19,4 +19,11 @@ public class HttpConfiguration { public String getHost () throws URISyntaxException { return new URI(baseUri).getHost(); } + + @Getter @Setter private Integer selectorThreads; + public boolean hasSelectorThreads () { return selectorThreads != null; } + + @Getter @Setter private Integer workerThreads; + public boolean hasWorkerThreads () { return workerThreads != null; } + }