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

Arturo Bernal commented on HTTPCLIENT-2437:
-------------------------------------------

Oleg, you are right, I missed it. closeExpired() goes through enumAvailable(), 
which calls processPendingRequests(), so the pending request is failed.

The watcher thread still does not help, but for a different reason. 
enumAvailable() and enumLeased() queue the failed request in completedRequests 
and never call fireCallbacks(), so the future is not notified until the next 
lease or release. With a call to fireCallbacks() at the end of enumAvailable(), 
the same test fails request B after 1050 ms with DeadlineTimeoutException. 
Without it B was still waiting after 8 s.

I checked StrictConnPool on 5.3.6 (the version used by httpclient 5.6.5) only, 
and master has the same code. I did not test LaxConnPool. Is that intended, or 
do you want a fix in core?

> Async connectionRequestTimeout does not fire on an otherwise idle pool
> ----------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-2437
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2437
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient (async), Site
>    Affects Versions: 5.6.5
>            Reporter: seongsu shin
>            Priority: Major
>
> h2. Summary
> On the async client, {{connectionRequestTimeout}} does not seem to fire 
> unless something else happens in the connection pool. A request waiting for a 
> lease can wait much longer than the configured timeout.
> h2. How to reproduce
> # Set {{connectionRequestTimeout}} to 1s and limit the pool to a single 
> connection.
> # Send request A to a server that never completes the response. It holds the 
> only connection.
> # Send request B to the same route.
> h2. Observed
> Request B was still waiting after 10s.
> h2. Expected
> Request B fails with a connection request timeout after about 1s.
> h2. Analysis
> I could not find a caller of {{validatePendingRequests()}}. Pending lease 
> requests seem to be expired only when the pool is touched by other activity, 
> so an otherwise idle pool never expires them. Enforcing this may need a 
> periodic task or watcher thread, but I'm not sure whether this is intended.
> h2. Notes
> Found while writing the timeouts section for HTTPCLIENT-2404 
> (https://github.com/apache/httpcomponents-website/pull/48). Oleg Kalnichevski 
> asked there for a JIRA.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to