Class RetryUtils

java.lang.Object
org.apache.druid.java.util.common.RetryUtils

public class RetryUtils extends Object
  • Field Details

  • 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 operation
      shouldRetry - 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 WARN
      maxTries - 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