Package org.jclouds.http.handlers
Class BackoffLimitedRetryHandler
- java.lang.Object
-
- org.jclouds.http.handlers.BackoffLimitedRetryHandler
-
- All Implemented Interfaces:
HttpRetryHandler
,IOExceptionRetryHandler
- Direct Known Subclasses:
AWSEC2IOExceptionRetryHandler
,AWSServerErrorRetryHandler
,AzureRetryableErrorHandler
,B2RetryHandler
,InvalidateSessionAndRetryOn401AndLogoutOnClose
,SessionManager
@Singleton public class BackoffLimitedRetryHandler extends Object implements HttpRetryHandler, IOExceptionRetryHandler
Allow replayable request to be retried a limited number of times, and impose an exponential back-off delay before returning.The back-off delay grows rapidly according to the formula
50 * (
. For example:TransformingHttpCommand#getFailureCount()
^ 2)Number of Attempts Delay in milliseconds 1 50 2 200 3 450 4 800 5 1250 This implementation has two side-effects. It increments the command's failure count with
TransformingHttpCommand#incrementFailureCount()
, because this failure count value is used to determine how many times the command has already been tried. It also closes the response's content input stream to ensure connections are cleaned up.
-
-
Field Summary
Fields Modifier and Type Field Description static BackoffLimitedRetryHandler
INSTANCE
protected Logger
logger
-
Fields inherited from interface org.jclouds.http.HttpRetryHandler
ALWAYS_RETRY, NEVER_RETRY
-
Fields inherited from interface org.jclouds.http.IOExceptionRetryHandler
ALWAYS_RETRY, NEVER_RETRY
-
-
Constructor Summary
Constructors Constructor Description BackoffLimitedRetryHandler()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
imposeBackoffExponentialDelay(int failureCount, String commandDescription)
void
imposeBackoffExponentialDelay(long period, int pow, int failureCount, int max, String commandDescription)
void
imposeBackoffExponentialDelay(long period, long maxPeriod, int pow, int failureCount, int max, String commandDescription)
boolean
shouldRetryRequest(HttpCommand command, IOException error)
boolean
shouldRetryRequest(HttpCommand command, HttpResponse response)
Return true if the command should be retried.
-
-
-
Field Detail
-
INSTANCE
public static final BackoffLimitedRetryHandler INSTANCE
-
logger
protected Logger logger
-
-
Method Detail
-
shouldRetryRequest
public boolean shouldRetryRequest(HttpCommand command, IOException error)
- Specified by:
shouldRetryRequest
in interfaceIOExceptionRetryHandler
-
shouldRetryRequest
public boolean shouldRetryRequest(HttpCommand command, HttpResponse response)
Description copied from interface:HttpRetryHandler
Return true if the command should be retried. This method should only be invoked when the response has failed with a HTTP 5xx error indicating a server-side error.- Specified by:
shouldRetryRequest
in interfaceHttpRetryHandler
-
imposeBackoffExponentialDelay
public void imposeBackoffExponentialDelay(int failureCount, String commandDescription)
-
imposeBackoffExponentialDelay
public void imposeBackoffExponentialDelay(long period, int pow, int failureCount, int max, String commandDescription)
-
imposeBackoffExponentialDelay
public void imposeBackoffExponentialDelay(long period, long maxPeriod, int pow, int failureCount, int max, String commandDescription)
-
-