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