ffang closed pull request #466: [CXF-7883] fix: handle connectionRequestTimeout in AsyncHTTPConduitFactory URL: https://github.com/apache/cxf/pull/466
This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java index d616dda5fce..15445bc33db 100644 --- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java +++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java @@ -375,11 +375,9 @@ public void addCookie(Cookie cookie) { client = httpAsyncClientBuilder.build(); // Start the client thread client.start(); - if (this.connectionTTL == 0) { - //if the connection does not have an expiry deadline - //use the ConnectionMaxIdle to close the idle connection - new CloseIdleConnectionThread(connectionManager, client).start(); - } + //Always start the idle checker thread to validate pending requests and + //use the ConnectionMaxIdle to close the idle connection + new CloseIdleConnectionThread(connectionManager, client).start(); } //provide a hook to customize the builder @@ -401,20 +399,28 @@ public CloseableHttpAsyncClient createClient(final AsyncHTTPConduit c) throws IO public CloseIdleConnectionThread(PoolingNHttpClientConnectionManager connMgr, CloseableHttpAsyncClient client) { - super(); + super("CXFCloseIdleConnectionThread"); this.connMgr = connMgr; this.client = client; } @Override public void run() { + long nextIdleCheck = System.currentTimeMillis() + connectionMaxIdle; try { while (client.isRunning()) { synchronized (this) { - sleep(connectionMaxIdle); - // close connections - // that have been idle longer than specified connectionMaxIdle - connMgr.closeIdleConnections(connectionMaxIdle, TimeUnit.MILLISECONDS); + sleep(selectInterval); + // make sure pending leases fail in a timely manner, + // not just when a connection becomes available + connMgr.validatePendingRequests(); + + if (connectionMaxIdle > 0 && System.currentTimeMillis() >= nextIdleCheck) { + nextIdleCheck += connectionMaxIdle; + // close connections + // that have been idle longer than specified connectionMaxIdle + connMgr.closeIdleConnections(connectionMaxIdle, TimeUnit.MILLISECONDS); + } } } } catch (InterruptedException ex) { ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services