Freeman,

Can the timer be moved into the factory so there is a single timer for all the 
conduits that the factory creates?   This way still results in a timer thread 
per conduit which can still balloon way up.

Dan


> On Oct 28, 2016, at 7:09 PM, [email protected] wrote:
> 
> Repository: cxf
> Updated Branches:
>  refs/heads/3.1.x-fixes 1f61dfba7 -> 6ec0e90dc
> 
> 
> [CXF-7112]use Timer/TimerTask to check timeout for every async request to 
> avoid create lots of thread
> 
> 
> Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
> Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/6ec0e90d
> Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/6ec0e90d
> Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/6ec0e90d
> 
> Branch: refs/heads/3.1.x-fixes
> Commit: 6ec0e90dc12c2384612f201f54d1e6e7e7f45724
> Parents: 1f61dfb
> Author: Freeman Fang <[email protected]>
> Authored: Sat Oct 29 07:09:39 2016 +0800
> Committer: Freeman Fang <[email protected]>
> Committed: Sat Oct 29 07:09:39 2016 +0800
> 
> ----------------------------------------------------------------------
> .../http/asyncclient/AsyncHTTPConduit.java       | 19 ++++++++-----------
> .../http/asyncclient/AsyncHTTPConduitTest.java   |  1 -
> 2 files changed, 8 insertions(+), 12 deletions(-)
> ----------------------------------------------------------------------
> 
> 
> http://git-wip-us.apache.org/repos/asf/cxf/blob/6ec0e90d/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java
> ----------------------------------------------------------------------
> diff --git 
> a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java
>  
> b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java
> index dba9673..bc1212f 100644
> --- 
> a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java
> +++ 
> b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java
> @@ -38,6 +38,8 @@ import java.security.cert.Certificate;
> import java.util.ArrayList;
> import java.util.List;
> import java.util.Map;
> +import java.util.Timer;
> +import java.util.TimerTask;
> import java.util.concurrent.Future;
> import java.util.logging.Level;
> 
> @@ -106,6 +108,8 @@ public class AsyncHTTPConduit extends 
> URLConnectionHTTPConduit {
>     volatile SSLContext sslContext;
>     volatile SSLSession session;
>     volatile CloseableHttpAsyncClient client;
> +    volatile Timer timer;
> +    
> 
>     public AsyncHTTPConduit(Bus b,
>                             EndpointInfo ei, 
> @@ -113,6 +117,7 @@ public class AsyncHTTPConduit extends 
> URLConnectionHTTPConduit {
>                             AsyncHTTPConduitFactory factory) throws 
> IOException {
>         super(b, ei, t);
>         this.factory = factory;
> +        this.timer = new Timer();
>     }
> 
>     public synchronized CloseableHttpAsyncClient getHttpAsyncClient() throws 
> IOException {
> @@ -642,7 +647,7 @@ public class AsyncHTTPConduit extends 
> URLConnectionHTTPConduit {
> 
>         protected void handleResponseAsync() throws IOException {
>             isAsync = true;
> -            new CheckReceiveTimeoutForAsync().start();
> +            timer.schedule(new CheckReceiveTimeoutForAsync(), 
> csPolicy.getReceiveTimeout());
>         }
> 
>         protected void closeInputStream() throws IOException {
> @@ -859,17 +864,9 @@ public class AsyncHTTPConduit extends 
> URLConnectionHTTPConduit {
>             }
>         }
> 
> -        class CheckReceiveTimeoutForAsync extends Thread {
> +        class CheckReceiveTimeoutForAsync extends TimerTask {
>             public void run() {
> -                long startTime = System.currentTimeMillis();
> -                while (httpResponse == null && exception == null
> -                    && (System.currentTimeMillis() - startTime) < 
> csPolicy.getReceiveTimeout()) {
> -                    try {
> -                        Thread.sleep(1000);
> -                    } catch (InterruptedException e) {
> -                        throw new RuntimeException(e);
> -                    }
> -                }
> +                
>                 if (httpResponse == null) {
>                     outbuf.shutdown();
>                     inbuf.shutdown();
> 
> http://git-wip-us.apache.org/repos/asf/cxf/blob/6ec0e90d/rt/transports/http-hc/src/test/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitTest.java
> ----------------------------------------------------------------------
> diff --git 
> a/rt/transports/http-hc/src/test/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitTest.java
>  
> b/rt/transports/http-hc/src/test/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitTest.java
> index fb0f78c..0c350e5 100644
> --- 
> a/rt/transports/http-hc/src/test/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitTest.java
> +++ 
> b/rt/transports/http-hc/src/test/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitTest.java
> @@ -139,7 +139,6 @@ public class AsyncHTTPConduitTest extends 
> AbstractBusClientServerTestBase {
>         HTTPConduit c = (HTTPConduit)ClientProxy.getClient(g).getConduit();
>         c.getClient().setReceiveTimeout(3000);
>         try {
> -            assertEquals("Hello " + request, g.greetMeLater(-5000));
>             Response<GreetMeLaterResponse> future = 
> g.greetMeLaterAsync(-5000L);
>             future.get();
>             fail();
> 

-- 
Daniel Kulp
[email protected] - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com

Reply via email to