[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-2213?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17532273#comment-17532273
 ] 

Oleg Kalnichevski commented on HTTPCLIENT-2213:
-----------------------------------------------

[~Paul Bakker] Connection expiry time calculation is never precise and cannot 
be precise when using relative values. It is basically on a per best effort 
basis. What is it exactly you would like us to do here?

Oleg

> Mechanism to not use pooled connections beyond the keep-alive period is flawed
> ------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-2213
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2213
>             Project: HttpComponents HttpClient
>          Issue Type: Improvement
>          Components: HttpClient (async), HttpClient (classic)
>    Affects Versions: 4.5.13, 5.1.4
>            Reporter: Paul Bakker
>            Priority: Minor
>
> When making a request using the HTTPClient to an endpoint that returns a 
> Keep-Alive header in the response with a timeout value of say 5 seconds, then 
> in org.apache.http.impl.execchain.MainClientExec.execute, directly after the 
> request was made the timeout value (5 seconds) from the response is stored on 
> the ConnectionHolder by making a call to ConnectionHolder.setValidFor(...).
> This value stored on the ConnectionHolder is used once the connection is 
> released back to the connection pool, in 
> PoolingHttpClientConnectionManager.releaseConnection(...), by making a call 
> to PoolEntry.updateExpiry(...).
> The .updateExpiry() method then updates its 'expiry' field with the timestamp 
> when the connection is to be considered not valid anymore (which gets checked 
> when leasing a connection from the pool).
> However, the logic in .updateExpiry(..) to calculate the new `expiry` 
> timestamp basically does `System.currentTimeMillis() + duration` (with 
> duration being 5 seconds in this example). This is problematic, because the 5 
> seconds Keep-Alive interval is relative to the moment to receiving the 
> response in the aforementioned .execute(...) method. The calculation in 
> .updateExpiry(...) however calculates it reletive to the moment that 
> .updateExpiry(...) is called, which, depending on the implementation, could 
> be quite some time later, which could result 
> inPoolingHttpClientConnectionManager. leaseConnection(...) returning a 
> connection from the pool, which isn't alive anymore.
>   



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

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

Reply via email to