Uploaded image for project: 'HttpComponents HttpCore'
  1. HttpComponents HttpCore
  2. HTTPCORE-567

Connection leak when aborting httpRequest after connection leasing

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 4.4.11
    • 4.4.12
    • None
    • None

    Description

      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, looks like the edge case that needs to be handled is "if (entry != null && future.isCancelled())"

      Code to reproduce:

      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());
      

      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.

       

       

       

      Attachments

        Activity

          People

            Unassigned Unassigned
            Zoe Wang Zoe Wang
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: