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

[jira] [Resolved] (HTTPCORE-567) Connection leak when aborting httpRequest after connection leasing

     [ https://issues.apache.org/jira/browse/HTTPCORE-567?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Oleg Kalnichevski resolved HTTPCORE-567.
----------------------------------------
       Resolution: Fixed
    Fix Version/s: 4.4.12

> Connection leak when aborting httpRequest after connection leasing
> ------------------------------------------------------------------
>
>                 Key: HTTPCORE-567
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-567
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>    Affects Versions: 4.4.11
>            Reporter: Zoe Wang
>            Priority: Major
>             Fix For: 4.4.12
>
>
> 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