Class BackoffThrottler


  • public final class BackoffThrottler
    extends java.lang.Object
    Used to throttle code execution in presence of failures using exponential backoff logic. The formula used to calculate the next sleep interval is:

     min(pow(backoffCoefficient, failureCount - 1) * initialSleep, maxSleep);
     

    Example usage:

     BackoffThrottler throttler = new BackoffThrottler(1000, 60000, 2);
     while(!stopped) {
         try {
             throttler.throttle();
             // some code that can fail and should be throttled
             ...
             throttler.success();
         }
         catch (Exception e) {
             throttler.failure();
         }
     }
     
    • Constructor Summary

      Constructors 
      Constructor Description
      BackoffThrottler​(java.time.Duration initialSleep, java.time.Duration maxSleep, double backoffCoefficient)
      Construct an instance of the throttler.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void failure()
      Increment failure count.
      void success()
      Resent failure count to 0.
      void throttle()
      Sleep if there were failures since the last success call.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • BackoffThrottler

        public BackoffThrottler​(java.time.Duration initialSleep,
                                java.time.Duration maxSleep,
                                double backoffCoefficient)
        Construct an instance of the throttler.
        Parameters:
        initialSleep - time to sleep on the first failure
        maxSleep - maximum time to sleep independently of number of failures
        backoffCoefficient - coefficient used to calculate the next time to sleep.
    • Method Detail

      • throttle

        public void throttle()
                      throws java.lang.InterruptedException
        Sleep if there were failures since the last success call.
        Throws:
        java.lang.InterruptedException
      • success

        public void success()
        Resent failure count to 0.
      • failure

        public void failure()
        Increment failure count.