You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Zoe Wang (JIRA)" <ji...@apache.org> on 2019/01/22 22:46:00 UTC

[jira] [Created] (HTTPCLIENT-1965) Connection leak when aborting httpRequest after connection leasing

Zoe Wang created HTTPCLIENT-1965:
------------------------------------

             Summary: Connection leak when aborting httpRequest after connection leasing
                 Key: HTTPCLIENT-1965
                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1965
             Project: HttpComponents HttpClient
          Issue Type: Bug
    Affects Versions: 4.5.6, 4.5.5
            Reporter: Zoe Wang


This is a follow up on https://issues.apache.org/jira/browse/HTTPCLIENT-1958. 

The leaking thread interrupt flag is fixed but we noticed that there's an edge case when a request gets aborted right after a new connection is leased, that connection will never get re-used and closed. 

 

From the [source code|https://github.com/apache/httpcomponents-client/blob/4.5.x/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java#L305], looks like the edge case that needs to be handled is "if (entry != null && future.isCancelled())"

Code to reproduce:
{code:java}
ScheduledExecutorService scheduledExecutorService =           Executors.newScheduledThreadPool(1);
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager();

CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(poolingHttpClientConnectionManager).build();

try {
HttpGet httpGet = new HttpGet("http://somehost");
scheduledExecutorService.schedule(httpGet::abort, 40, TimeUnit.MILLISECONDS);
CloseableHttpResponse response = httpclient.execute(httpGet);

HttpEntity entity = response.getEntity();
EntityUtils.consume(entity);
} catch (Exception e) {
    e.printStackTrace();
} finally {
scheduledExecutorService.shutdown();
}

System.out.println(poolingHttpClientConnectionManager.getTotalStats());
{code}
The printed out log was: [leased: 1; pending: 0; available: 0; max: 20]

Note that you might need to change the abort time to reproduce the issue.

 

 

 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org