You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Alf Høgemark (JIRA)" <ji...@apache.org> on 2012/09/25 19:26:08 UTC

[jira] [Updated] (HTTPCLIENT-1237) PoolingClientConnectionManager should only update pool expiry for resuable connections

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

Alf Høgemark updated HTTPCLIENT-1237:
-------------------------------------

    Attachment: 1237.txt

Suggested patch
                
> PoolingClientConnectionManager should only update pool expiry for resuable connections
> --------------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1237
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1237
>             Project: HttpComponents HttpClient
>          Issue Type: Improvement
>            Reporter: Alf Høgemark
>            Priority: Minor
>              Labels: patch
>         Attachments: 1237.txt
>
>
> When a HTTP 1.1 web server respons with a "Connection: close", the connection cannot be reused, and therefore it is not needed to update the "expiry time" for the connection in the pool.
> Avoiding updating the expiry will also mean that we do not get somewhat confusing log messages like this for such a connection :
> "
> 2012/09/25 19:16:55:845 CEST [DEBUG] PoolingClientConnectionManager - Connection [id: 2][route: {}->http://alf-quad:37442] can be kept alive for 9223372036854775807 MILLISECONDS
> "
> I was testing against a web server which does not allow keep alive, so then I thought the pool was incorrectly reusing the connection when I saw this log line while debugging a connection related problem.
> So I think the following change is correct :
> Index: src/main/java/org/apache/http/impl/conn/PoolingClientConnectionManager.java
> ===================================================================
> --- src/main/java/org/apache/http/impl/conn/PoolingClientConnectionManager.java	(revision 1389988)
> +++ src/main/java/org/apache/http/impl/conn/PoolingClientConnectionManager.java	(working copy)
> @@ -261,15 +261,18 @@
>                          }
>                      }
>                  }
> -                entry.updateExpiry(keepalive, tunit != null ? tunit : TimeUnit.MILLISECONDS);
> -                if (this.log.isDebugEnabled()) {
> -                    String s;
> -                    if (keepalive > 0) {
> -                        s = "for " + keepalive + " " + tunit;
> -                    } else {
> -                        s = "indefinitely";
> +                // Only reusable connections can be kept alive
> +                if(managedConn.isMarkedReusable()) {
> +                    entry.updateExpiry(keepalive, tunit != null ? tunit : TimeUnit.MILLISECONDS);
> +                    if (this.log.isDebugEnabled()) {
> +                        String s;
> +                        if (keepalive > 0) {
> +                            s = "for " + keepalive + " " + tunit;
> +                        } else {
> +                            s = "indefinitely";
> +                        }
> +                        this.log.debug("Connection " + format(entry) + " can be kept alive " + s);
>                      }
> -                    this.log.debug("Connection " + format(entry) + " can be kept alive " + s);
>                  }
>              } finally {
>                  this.pool.release(entry, managedConn.isMarkedReusable());

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

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