CAMEL-10240: Fix for thread pool sizes in CamelHttpClient
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/26041cad Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/26041cad Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/26041cad Branch: refs/heads/master Commit: 26041cad6709980386230b8042b5bad84f30031b Parents: bfb971b Author: Tomasz Kopczynski <to...@kopczynski.net.pl> Authored: Mon Sep 5 20:55:04 2016 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Wed Sep 7 09:44:57 2016 +0200 ---------------------------------------------------------------------- .../camel/component/jetty/CamelHttpClient.java | 9 ++++++--- .../component/jetty/JettyHttpComponent.java | 21 ++++++++++++++++++-- .../component/jetty9/CamelHttpClient9.java | 5 +++++ .../component/jetty9/JettyHttpComponent9.java | 5 +++-- 4 files changed, 33 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/26041cad/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelHttpClient.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelHttpClient.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelHttpClient.java index 1f4504c..ab5caac 100644 --- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelHttpClient.java +++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/CamelHttpClient.java @@ -22,6 +22,7 @@ import javax.net.ssl.SSLContext; import org.apache.camel.util.ObjectHelper; import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.HttpClientTransport; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.eclipse.jetty.util.thread.QueuedThreadPool; @@ -33,6 +34,10 @@ public abstract class CamelHttpClient extends HttpClient { super(sslContextFactory); } + public CamelHttpClient(HttpClientTransport transport, SslContextFactory sslContextFactory) { + super(transport, sslContextFactory); + } + @Deprecated /** * It does nothing here, please setup SslContextFactory directly, it will be removed in Camel 2.16.0 @@ -45,10 +50,8 @@ public abstract class CamelHttpClient extends HttpClient { @Override protected void doStart() throws Exception { if (!hasThreadPool()) { - // if there is no thread pool then create a default thread pool using daemon threads + // if there is no thread pool then create a default thread pool using daemon threads with default size (200) QueuedThreadPool qtp = new QueuedThreadPool(); - // 16 max threads is the default in the http client - qtp.setMaxThreads(16); qtp.setDaemon(true); // let the thread names indicate they are from the client qtp.setName("CamelJettyClient(" + ObjectHelper.getIdentityHashCode(this) + ")"); http://git-wip-us.apache.org/repos/asf/camel/blob/26041cad/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java index 70583c8..260e2bb 100644 --- a/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java +++ b/components/camel-jetty-common/src/main/java/org/apache/camel/component/jetty/JettyHttpComponent.java @@ -67,6 +67,8 @@ import org.apache.camel.util.URISupport; import org.apache.camel.util.UnsafeUriCharactersEncoder; import org.apache.camel.util.jsse.SSLContextParameters; import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.HttpClientTransport; +import org.eclipse.jetty.client.http.HttpClientTransportOverHTTP; import org.eclipse.jetty.http.HttpStatus; import org.eclipse.jetty.jmx.MBeanContainer; import org.eclipse.jetty.server.AbstractConnector; @@ -663,7 +665,8 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements */ public CamelHttpClient createHttpClient(JettyHttpEndpoint endpoint, Integer minThreads, Integer maxThreads, SSLContextParameters ssl) throws Exception { SslContextFactory sslContextFactory = createSslContextFactory(ssl); - CamelHttpClient httpClient = createCamelHttpClient(sslContextFactory); + HttpClientTransport transport = createHttpClientTransport(maxThreads); + CamelHttpClient httpClient = createCamelHttpClient(transport, sslContextFactory); CamelContext context = endpoint.getCamelContext(); @@ -713,7 +716,21 @@ public abstract class JettyHttpComponent extends HttpCommonComponent implements return httpClient; } - protected abstract CamelHttpClient createCamelHttpClient(SslContextFactory sslContextFactory); + private HttpClientTransport createHttpClientTransport(Integer maxThreads) { + if (maxThreads == null) { + return new HttpClientTransportOverHTTP(); + } + + int selectors = Runtime.getRuntime().availableProcessors() / 2; + + if (selectors >= maxThreads) { + selectors = maxThreads - 1; + } + + return new HttpClientTransportOverHTTP(selectors); + } + + protected abstract CamelHttpClient createCamelHttpClient(HttpClientTransport transport, SslContextFactory sslContextFactory); public Integer getHttpClientMinThreads() { return httpClientMinThreads; http://git-wip-us.apache.org/repos/asf/camel/blob/26041cad/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/CamelHttpClient9.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/CamelHttpClient9.java b/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/CamelHttpClient9.java index 001662f..bb29eaf 100644 --- a/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/CamelHttpClient9.java +++ b/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/CamelHttpClient9.java @@ -19,6 +19,7 @@ package org.apache.camel.component.jetty9; import java.util.concurrent.Executor; import org.apache.camel.component.jetty.CamelHttpClient; +import org.eclipse.jetty.client.HttpClientTransport; import org.eclipse.jetty.util.ssl.SslContextFactory; public class CamelHttpClient9 extends CamelHttpClient { @@ -27,6 +28,10 @@ public class CamelHttpClient9 extends CamelHttpClient { super(sslContextFactory); } + public CamelHttpClient9(HttpClientTransport transport, SslContextFactory sslContextFactory) { + super(transport, sslContextFactory); + } + protected boolean hasThreadPool() { return getExecutor() != null; } http://git-wip-us.apache.org/repos/asf/camel/blob/26041cad/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyHttpComponent9.java ---------------------------------------------------------------------- diff --git a/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyHttpComponent9.java b/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyHttpComponent9.java index 0b2177f..995dc78 100644 --- a/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyHttpComponent9.java +++ b/components/camel-jetty9/src/main/java/org/apache/camel/component/jetty9/JettyHttpComponent9.java @@ -27,6 +27,7 @@ import org.apache.camel.component.jetty.JettyHttpComponent; import org.apache.camel.component.jetty.JettyHttpEndpoint; import org.apache.camel.util.IntrospectionSupport; import org.apache.camel.util.ObjectHelper; +import org.eclipse.jetty.client.HttpClientTransport; import org.eclipse.jetty.server.AbstractConnector; import org.eclipse.jetty.server.ConnectionFactory; import org.eclipse.jetty.server.Connector; @@ -39,8 +40,8 @@ import org.eclipse.jetty.util.ssl.SslContextFactory; public class JettyHttpComponent9 extends JettyHttpComponent { - protected CamelHttpClient createCamelHttpClient(SslContextFactory sslContextFactory) { - return new CamelHttpClient9(sslContextFactory); + protected CamelHttpClient createCamelHttpClient(HttpClientTransport transport, SslContextFactory sslContextFactory) { + return new CamelHttpClient9(transport, sslContextFactory); } protected JettyHttpEndpoint createEndpoint(URI endpointUri, URI httpUri) throws URISyntaxException {