You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Oleg Kalnichevski (Jira)" <ji...@apache.org> on 2020/08/29 13:00:07 UTC

[jira] [Updated] (HTTPCLIENT-2114) AsyncHttpRequestRetryExec ignores HttpRequestRetryStrategy

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

Oleg Kalnichevski updated HTTPCLIENT-2114:
------------------------------------------
    Fix Version/s: Future

> AsyncHttpRequestRetryExec ignores HttpRequestRetryStrategy 
> -----------------------------------------------------------
>
>                 Key: HTTPCLIENT-2114
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2114
>             Project: HttpComponents HttpClient
>          Issue Type: Improvement
>          Components: HttpClient (async)
>    Affects Versions: 5.0.1
>            Reporter: Thomas Warner
>            Priority: Major
>             Fix For: Future
>
>
> It is noted in the Javadoc that AsyncHttpRequestRetryExec does not respect [{{HttpRequestRetryStrategy.getRetryInterval()}}|https://hc.apache.org/httpcomponents-client-5.0.x/httpclient5/apidocs/org/apache/hc/client5/http/HttpRequestRetryStrategy.html#getRetryInterval(org.apache.hc.core5.http.HttpResponse,%20int,%20org.apache.hc.core5.http.protocol.HttpContext)]
> Instead, the request is retried instantly. The immediate retry happens for both IOException retries and server responses with 429 and 503 status codes. The Retry-After header is also ignored due to this issue. Retrying instantly is not desirable, especially and can actively make the situation worse.
> The most relevant code block is in the completed() method of the AsyncExecCallback that is created. If the request is meant to be retried, AsyncHttpRequestRetryExec immediately calls the internalExecute() method to retry the request.
> A naive approach would be to add to the internal State class a field for a TimeValue representing the delay for the request. In handleResponse(), the response from  retryStrategy.retryRequest() could be stored in the state object and then in completed(), you could call TimeValue.sleep() on that property. However, I imagine this has the potential to lock up resources for a significant amount of time.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

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