Class RetryStrategy.AdaptiveExponential

java.lang.Object
com.here.platform.data.client.utils.RetryStrategy.AdaptiveExponential
All Implemented Interfaces:
RetryStrategy, Serializable, scala.Equals, scala.Product
Enclosing interface:
RetryStrategy

public static final class RetryStrategy.AdaptiveExponential extends Object implements RetryStrategy, scala.Product, Serializable
A strategy that starts with some initial interval, and then picks the next interval so that it is the longer of the duration of the last request or an exponential increase over the previous interval. This ensures that backoff is at least exponential, and allows the strategy to adapt to increase intervals faster than it otherwise would when attempts take a long time (such as when an overloaded server is slow to respond).
See Also:
  • Constructor Details

    • AdaptiveExponential

      public AdaptiveExponential(scala.concurrent.duration.FiniteDuration initialInterval, double exponentialBase)
  • Method Details

    • initialInterval

      public scala.concurrent.duration.FiniteDuration initialInterval()
    • exponentialBase

      public double exponentialBase()
    • apply

      public scala.util.Either<String,scala.Tuple2<scala.concurrent.duration.FiniteDuration,RetryStrategy>> apply(scala.concurrent.duration.FiniteDuration attemptDuration)
      Description copied from interface: RetryStrategy
      Decides whether and when to retry an operation, given the duration of the most recent attempt.

      Why is this signature so complex, you ask? To be able to express both limits on retrying, and to support the logic of RetryStrategy.AdaptiveExponential.

      Specified by:
      apply in interface RetryStrategy
      Parameters:
      attemptDuration - duration of the most recent attempt
      Returns:
      a Left containing the reason for not retrying the request if the operation should not be retried, or a Right containing the minimum interval between the start of the most recent attempt and the start of the retry together with the RetryStrategy to use if this retry fails.