Oscar created HTTPCLIENT-2326:
---------------------------------

             Summary: Support any Exception in RetryStrategy
                 Key: HTTPCLIENT-2326
                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-2326
             Project: HttpComponents HttpClient
          Issue Type: Improvement
            Reporter: Oscar


It would be useful to modify {{HttpRequestRetryExec}} to allow 
{{HttpRequestRetryStrategy}} to support all kind of exceptions, not only those 
extending {{{}IOException{}}}.

I would like HttpClient to retry requests when facing a 
[TunnelRefusedException|https://hc.apache.org/httpcomponents-client-5.1.x/current/httpclient5/apidocs/org/apache/hc/client5/http/impl/TunnelRefusedException.html]
 (it happens randomly that the proxy refuses the initial connection, but it 
usually works ok when retrying).

I have tried extending 
[DefaultHttpRequestRetryStrategy|https://github.com/apache/httpcomponents-client/blob/master/httpclient5/src/main/java/org/apache/hc/client5/http/impl/DefaultHttpRequestRetryStrategy.java]
 but it can only capture exceptions inheriting from {{IOException.}}

So, maybe {{HttpRequestRetryStrategy}} interface should support any kind of 
{{Exception }} or maybe {{TunnelRefusedException}} should be an {{IOException}}

 

This is an example of a stacktrace that I would like to retry:

 
{code:java}
org.apache.hc.client5.http.ClientProtocolException: CONNECT refused by proxy: 
HTTP/1.1 500 Internal Server Error
at 
org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:173)
at 
org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:245)
at 
org.apache.hc.client5.http.impl.classic.CloseableHttpClient.execute(CloseableHttpClient.java:188)
[...]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: org.apache.hc.client5.http.impl.TunnelRefusedException: CONNECT 
refused by proxy: HTTP/1.1 500 Internal Server Error
at 
org.apache.hc.client5.http.impl.classic.ConnectExec.createTunnelToTarget(ConnectExec.java:284)
at 
org.apache.hc.client5.http.impl.classic.ConnectExec.execute(ConnectExec.java:151)
at 
org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
at 
org.apache.hc.client5.http.impl.classic.ProtocolExec.execute(ProtocolExec.java:192)
at 
org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
at 
org.apache.hc.client5.http.impl.classic.HttpRequestRetryExec.execute(HttpRequestRetryExec.java:96)
at 
org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
at 
org.apache.hc.client5.http.impl.classic.ContentCompressionExec.execute(ContentCompressionExec.java:152)
at 
org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
at 
org.apache.hc.client5.http.impl.classic.RedirectExec.execute(RedirectExec.java:115)
at 
org.apache.hc.client5.http.impl.classic.ExecChainElement.execute(ExecChainElement.java:51)
at 
org.apache.hc.client5.http.impl.classic.InternalHttpClient.doExecute(InternalHttpClient.java:170){code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

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

Reply via email to