Class BackoffLimitedRetryHandler

  • All Implemented Interfaces:
    HttpRetryHandler, IOExceptionRetryHandler

    @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 * (TransformingHttpCommand#getFailureCount() ^ 2). For example:

    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.

    • Constructor Detail

      • BackoffLimitedRetryHandler

        public BackoffLimitedRetryHandler()
    • Method Detail

      • 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 interface HttpRetryHandler
      • 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)