HttpBackOffUnsuccessfulResponseHandler
with ExponentialBackOff
instead.@Beta @Deprecated public class ExponentialBackOffPolicy extends Object implements BackOffPolicy
Beta
BackOffPolicy
that increases the back off period for each retry attempt
using a randomization function that grows exponentially.
getNextBackOffMillis()
is calculated using the following formula:
randomized_interval = retry_interval * (random value in range [1 - randomization_factor, 1 + randomization_factor])
In other words getNextBackOffMillis()
will range between the randomization factor
percentage below and above the retry interval. For example, using 2 seconds as the base retry
interval and 0.5 as the randomization factor, the actual back off period used in the next retry
attempt will be between 1 and 3 seconds.
Note: max_interval caps the retry_interval and not the randomized_interval.
If the time elapsed since an ExponentialBackOffPolicy
instance is created goes past
the max_elapsed_time then the method getNextBackOffMillis()
starts returning BackOffPolicy.STOP
. The elapsed time can be reset by calling reset()
.
Example: The default retry_interval is .5 seconds, default randomization_factor is 0.5, default multiplier is 1.5 and the default max_interval is 1 minute. For 10 requests the sequence will be (values in seconds) and assuming we go over the max_elapsed_time on the 10th request:
request# retry_interval randomized_interval
1 0.5 [0.25, 0.75]
2 0.75 [0.375, 1.125]
3 1.125 [0.562, 1.687]
4 1.687 [0.8435, 2.53]
5 2.53 [1.265, 3.795]
6 3.795 [1.897, 5.692]
7 5.692 [2.846, 8.538]
8 8.538 [4.269, 12.807]
9 12.807 [6.403, 19.210]
10 19.210 BackOffPolicy.STOP
Implementation is not thread-safe.
Modifier and Type | Class and Description |
---|---|
static class |
ExponentialBackOffPolicy.Builder
Deprecated.
|
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_INITIAL_INTERVAL_MILLIS
Deprecated.
The default initial interval value in milliseconds (0.5 seconds).
|
static int |
DEFAULT_MAX_ELAPSED_TIME_MILLIS
Deprecated.
The default maximum elapsed time in milliseconds (15 minutes).
|
static int |
DEFAULT_MAX_INTERVAL_MILLIS
Deprecated.
The default maximum back off time in milliseconds (1 minute).
|
static double |
DEFAULT_MULTIPLIER
Deprecated.
The default multiplier value (1.5 which is 50% increase per back off).
|
static double |
DEFAULT_RANDOMIZATION_FACTOR
Deprecated.
The default randomization factor (0.5 which results in a random period ranging between 50%
below and 50% above the retry interval).
|
STOP
Modifier | Constructor and Description |
---|---|
|
ExponentialBackOffPolicy()
Deprecated.
Creates an instance of ExponentialBackOffPolicy using default values.
|
protected |
ExponentialBackOffPolicy(ExponentialBackOffPolicy.Builder builder)
Deprecated.
|
Modifier and Type | Method and Description |
---|---|
static ExponentialBackOffPolicy.Builder |
builder()
Deprecated.
Returns an instance of a new builder.
|
int |
getCurrentIntervalMillis()
Deprecated.
Returns the current retry interval in milliseconds.
|
long |
getElapsedTimeMillis()
Deprecated.
Returns the elapsed time in milliseconds since an
ExponentialBackOffPolicy instance is
created and is reset when reset() is called. |
int |
getInitialIntervalMillis()
Deprecated.
Returns the initial retry interval in milliseconds.
|
int |
getMaxElapsedTimeMillis()
Deprecated.
Returns the maximum elapsed time in milliseconds.
|
int |
getMaxIntervalMillis()
Deprecated.
Returns the maximum value of the back off period in milliseconds.
|
double |
getMultiplier()
Deprecated.
Returns the value to multiply the current interval with for each retry attempt.
|
long |
getNextBackOffMillis()
Deprecated.
Gets the number of milliseconds to wait before retrying an HTTP request.
|
double |
getRandomizationFactor()
Deprecated.
Returns the randomization factor to use for creating a range around the retry interval.
|
boolean |
isBackOffRequired(int statusCode)
Deprecated.
Determines if back off is required based on the specified status code.
|
void |
reset()
Deprecated.
Sets the interval back to the initial retry interval and restarts the timer.
|
public static final int DEFAULT_INITIAL_INTERVAL_MILLIS
public static final double DEFAULT_RANDOMIZATION_FACTOR
public static final double DEFAULT_MULTIPLIER
public static final int DEFAULT_MAX_INTERVAL_MILLIS
public static final int DEFAULT_MAX_ELAPSED_TIME_MILLIS
public ExponentialBackOffPolicy()
builder()
.
initialIntervalMillis
is defaulted to DEFAULT_INITIAL_INTERVAL_MILLIS
randomizationFactor
is defaulted to DEFAULT_RANDOMIZATION_FACTOR
multiplier
is defaulted to DEFAULT_MULTIPLIER
maxIntervalMillis
is defaulted to DEFAULT_MAX_INTERVAL_MILLIS
maxElapsedTimeMillis
is defaulted in DEFAULT_MAX_ELAPSED_TIME_MILLIS
protected ExponentialBackOffPolicy(ExponentialBackOffPolicy.Builder builder)
builder
- builderpublic boolean isBackOffRequired(int statusCode)
The idea is that the servers are only temporarily unavailable, and they should not be overwhelmed when they are trying to get back up.
The default implementation requires back off for 500 and 503 status codes. Subclasses may override if different status codes are required.
isBackOffRequired
in interface BackOffPolicy
statusCode
- HTTP status codepublic final void reset()
reset
in interface BackOffPolicy
public long getNextBackOffMillis() throws IOException
BackOffPolicy.STOP
is
returned, no retries should be made.
This method calculates the next back off interval using the formula: randomized_interval = retry_interval +/- (randomization_factor * retry_interval)
Subclasses may override if a different algorithm is required.
getNextBackOffMillis
in interface BackOffPolicy
BackOffPolicy.STOP
if no
more retries should be madeIOException
public final int getInitialIntervalMillis()
public final double getRandomizationFactor()
A randomization factor of 0.5 results in a random period ranging between 50% below and 50% above the retry interval.
public final int getCurrentIntervalMillis()
public final double getMultiplier()
public final int getMaxIntervalMillis()
public final int getMaxElapsedTimeMillis()
If the time elapsed since an ExponentialBackOffPolicy
instance is created goes past
the max_elapsed_time then the method getNextBackOffMillis()
starts returning BackOffPolicy.STOP
. The elapsed time can be reset by calling reset()
.
public final long getElapsedTimeMillis()
ExponentialBackOffPolicy
instance is
created and is reset when reset()
is called.
The elapsed time is computed using System.nanoTime()
.
public static ExponentialBackOffPolicy.Builder builder()
Copyright © 2011–2022 Google. All rights reserved.