[
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]