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/dfb1083b
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/dfb1083b
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/dfb1083b

Branch: refs/heads/ftpfix
Commit: dfb1083b2a0e13436a18b35e93b84b5de37087db
Parents: 66d050f
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:21:32 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/dfb1083b/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/dfb1083b/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/dfb1083b/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/dfb1083b/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 {

Reply via email to