Class ExponentialBackoffRetryStrategy

java.lang.Object
org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy
com.cloudbees.jenkins.plugins.bitbucket.impl.client.ExponentialBackoffRetryStrategy
All Implemented Interfaces:
org.apache.hc.client5.http.HttpRequestRetryStrategy

@Contract(threading=SAFE) public class ExponentialBackoffRetryStrategy extends org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy
An implementation that backs off exponentially based on the number of consecutive failed attempts. It uses the following defaults:
         no delay in case it was never tried or didn't fail so far
     6 secs delay for one failed attempt (= initialExpiryInMillis)
    60 secs delay for two failed attempts
    10 mins delay for three failed attempts
   100 mins delay for four failed attempts
  ~16 hours delay for five failed attempts
   24 hours delay for six or more failed attempts (= maxExpiryInMillis)
 
The following equation is used to calculate the delay for a specific revalidation request:
     delay = initialExpiryInMillis * Math.pow(backOffRate, AsynchronousValidationRequest.getConsecutiveFailedAttempts() - 1))
 
The resulting delay won't exceed maxExpiryInMillis.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final long
     
    static final long
     
    static final long
     

    Fields inherited from class org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy

    INSTANCE
  • Constructor Summary

    Constructors
    Constructor
    Description
    Create a new strategy using a fixed pool of worker threads.
    ExponentialBackoffRetryStrategy(long backOffRate, long initialExpiryInMillis, long maxExpiryInMillis)
    Create a new strategy by using a fixed pool of worker threads and the given parameters to calculated the delay.
  • Method Summary

    Modifier and Type
    Method
    Description
    org.apache.hc.core5.util.TimeValue
    getRetryInterval(org.apache.hc.core5.http.HttpRequest request, IOException exception, int execCount, org.apache.hc.core5.http.protocol.HttpContext context)
     
    org.apache.hc.core5.util.TimeValue
    getRetryInterval(org.apache.hc.core5.http.HttpResponse response, int execCount, org.apache.hc.core5.http.protocol.HttpContext context)
    boolean
    retryRequest(org.apache.hc.core5.http.HttpRequest request, IOException exception, int execCount, org.apache.hc.core5.http.protocol.HttpContext context)
     
    boolean
    retryRequest(org.apache.hc.core5.http.HttpResponse response, int executionCount, org.apache.hc.core5.http.protocol.HttpContext context)

    Methods inherited from class org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy

    handleAsIdempotent

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • DEFAULT_BACK_OFF_RATE

      public static final long DEFAULT_BACK_OFF_RATE
      See Also:
    • DEFAULT_INITIAL_EXPIRY_IN_MILLIS

      public static final long DEFAULT_INITIAL_EXPIRY_IN_MILLIS
    • DEFAULT_MAX_EXPIRY_IN_MILLIS

      public static final long DEFAULT_MAX_EXPIRY_IN_MILLIS
  • Constructor Details

    • ExponentialBackoffRetryStrategy

      public ExponentialBackoffRetryStrategy()
      Create a new strategy using a fixed pool of worker threads.
    • ExponentialBackoffRetryStrategy

      public ExponentialBackoffRetryStrategy(long backOffRate, long initialExpiryInMillis, long maxExpiryInMillis)
      Create a new strategy by using a fixed pool of worker threads and the given parameters to calculated the delay.
      Parameters:
      backOffRate - the back off rate to be used; not negative
      initialExpiryInMillis - the initial expiry in milli seconds; not negative
      maxExpiryInMillis - the upper limit of the delay in milli seconds; not negative
  • Method Details

    • retryRequest

      public boolean retryRequest(org.apache.hc.core5.http.HttpResponse response, int executionCount, org.apache.hc.core5.http.protocol.HttpContext context)
      Specified by:
      retryRequest in interface org.apache.hc.client5.http.HttpRequestRetryStrategy
      Overrides:
      retryRequest in class org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy
    • retryRequest

      public boolean retryRequest(org.apache.hc.core5.http.HttpRequest request, IOException exception, int execCount, org.apache.hc.core5.http.protocol.HttpContext context)
      Specified by:
      retryRequest in interface org.apache.hc.client5.http.HttpRequestRetryStrategy
      Overrides:
      retryRequest in class org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy
    • getRetryInterval

      public org.apache.hc.core5.util.TimeValue getRetryInterval(org.apache.hc.core5.http.HttpRequest request, IOException exception, int execCount, org.apache.hc.core5.http.protocol.HttpContext context)
    • getRetryInterval

      public org.apache.hc.core5.util.TimeValue getRetryInterval(org.apache.hc.core5.http.HttpResponse response, int execCount, org.apache.hc.core5.http.protocol.HttpContext context)
      Specified by:
      getRetryInterval in interface org.apache.hc.client5.http.HttpRequestRetryStrategy
      Overrides:
      getRetryInterval in class org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy