Class RetryUtils
java.lang.Object
org.apache.druid.java.util.common.RetryUtils
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfacestatic interface -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final longstatic final intstatic final Loggerstatic final long -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidawaitNextRetry(Throwable e, String messageOnRetry, int nTry, int maxRetries, boolean quiet) static longnextRetrySleepMillis(int nTry) Calculates the duration in milliseconds to sleep before the next attempt of a retryable operation.static <T> Tretry(RetryUtils.Task<T> f, com.google.common.base.Predicate<Throwable> shouldRetry, int maxTries) static <T> Tretry(RetryUtils.Task<T> f, com.google.common.base.Predicate<Throwable> shouldRetry, int quietTries, int maxTries) static <T> Tretry(RetryUtils.Task<T> f, com.google.common.base.Predicate<Throwable> shouldRetry, int quietTries, int maxTries, RetryUtils.CleanupAfterFailure cleanupAfterFailure, String messageOnRetry) Retry an operation using fuzzy exponentially increasing backoff.static <T> Tretry(RetryUtils.Task<T> f, com.google.common.base.Predicate<Throwable> shouldRetry, RetryUtils.CleanupAfterFailure onEachFailure, int maxTries, String messageOnRetry)
-
Field Details
-
log
-
MAX_SLEEP_MILLIS
public static final long MAX_SLEEP_MILLIS- See Also:
-
BASE_SLEEP_MILLIS
public static final long BASE_SLEEP_MILLIS- See Also:
-
DEFAULT_MAX_TRIES
public static final int DEFAULT_MAX_TRIES- See Also:
-
-
Constructor Details
-
RetryUtils
public RetryUtils()
-
-
Method Details
-
retry
public static <T> T retry(RetryUtils.Task<T> f, com.google.common.base.Predicate<Throwable> shouldRetry, int quietTries, int maxTries, @Nullable RetryUtils.CleanupAfterFailure cleanupAfterFailure, @Nullable String messageOnRetry) throws Exception Retry an operation using fuzzy exponentially increasing backoff. The wait time after the nth failed attempt is min(60000ms, 1000ms * pow(2, n - 1)), fuzzed by a number drawn from a Gaussian distribution with mean 0 and standard deviation 0.2. If maxTries is exhausted, or if shouldRetry returns false, the last exception thrown by "f" will be thrown by this function.- Parameters:
f- the operationshouldRetry- predicate determining whether we should retry after a particular exception thrown by "f"quietTries- first quietTries attempts will log exceptions at DEBUG level rather than WARNmaxTries- maximum number of attempts- Returns:
- result of the first successful operation
- Throws:
Exception- if maxTries is exhausted, or shouldRetry returns false
-
retry
public static <T> T retry(RetryUtils.Task<T> f, com.google.common.base.Predicate<Throwable> shouldRetry, int maxTries) throws Exception - Throws:
Exception
-
retry
public static <T> T retry(RetryUtils.Task<T> f, com.google.common.base.Predicate<Throwable> shouldRetry, int quietTries, int maxTries) throws Exception - Throws:
Exception
-
retry
public static <T> T retry(RetryUtils.Task<T> f, com.google.common.base.Predicate<Throwable> shouldRetry, RetryUtils.CleanupAfterFailure onEachFailure, int maxTries, String messageOnRetry) throws Exception - Throws:
Exception
-
awaitNextRetry
public static void awaitNextRetry(Throwable e, @Nullable String messageOnRetry, int nTry, int maxRetries, boolean quiet) throws InterruptedException - Throws:
InterruptedException
-
nextRetrySleepMillis
public static long nextRetrySleepMillis(int nTry) Calculates the duration in milliseconds to sleep before the next attempt of a retryable operation. The duration is calculated in an exponential back-off manner with a fuzzy multiplier to introduce some variance.Sleep duration in milliseconds for subsequent retries:
- Retry 1: [0, 2000]
- Retry 2: [0, 4000]
- Retry 3: [0, 8000]
- ...
- Retry 7 and later: [0, 120,000]
- Parameters:
nTry- Index of the next retry, starting with 1- Returns:
- Next sleep duration in the range [0, 120,000] millis
-