Class BackoffJobAcquisitionStrategy

  • All Implemented Interfaces:
    JobAcquisitionStrategy

    public class BackoffJobAcquisitionStrategy
    extends java.lang.Object
    implements JobAcquisitionStrategy

    Determines the number of jobs to acquire and the time to wait between acquisition cycles by an exponential backoff strategy.

    Manages two kinds of backoff times:

    • idle time: Wait for a certain amount of time when no jobs are available
    • backoff time: Wait for a certain amount of time when jobs are available but could not successfully be acquired
    Both times are calculated by applying an exponential backoff. This means, when the respective conditions repeatedly hold, the time increases exponentially from one acquisition cycle to the next.

    This implementation manages idle and backoff time in terms of levels. The initial backoff level is 0, meaning that no backoff is applied. In case the condition for increasing backoff applies, the backoff level is incremented. The actual time to wait is then computed as follows

    timeToWait = baseBackoffTime * (backoffFactor ^ (backoffLevel - 1))

    Accordingly, the maximum possible backoff level is

    maximumLevel = floor( log( backoffFactor, maximumBackoffTime / baseBackoffTime) ) + 1
    (where log(a, b) is the logarithm of b to the base of a)
    Author:
    Thorben Lindhauer
    • Field Detail

      • DEFAULT_EXECUTION_SATURATION_WAIT_TIME

        public static long DEFAULT_EXECUTION_SATURATION_WAIT_TIME
      • baseIdleWaitTime

        protected long baseIdleWaitTime
      • idleIncreaseFactor

        protected float idleIncreaseFactor
      • idleLevel

        protected int idleLevel
      • maxIdleLevel

        protected int maxIdleLevel
      • maxIdleWaitTime

        protected long maxIdleWaitTime
      • baseBackoffWaitTime

        protected long baseBackoffWaitTime
      • backoffIncreaseFactor

        protected float backoffIncreaseFactor
      • backoffLevel

        protected int backoffLevel
      • maxBackoffLevel

        protected int maxBackoffLevel
      • maxBackoffWaitTime

        protected long maxBackoffWaitTime
      • applyJitter

        protected boolean applyJitter
      • numAcquisitionsWithoutLockingFailure

        protected int numAcquisitionsWithoutLockingFailure
      • backoffDecreaseThreshold

        protected int backoffDecreaseThreshold
      • baseNumJobsToAcquire

        protected int baseNumJobsToAcquire
      • jobsToAcquire

        protected java.util.Map<java.lang.String,​java.lang.Integer> jobsToAcquire
      • executionSaturated

        protected boolean executionSaturated
      • executionSaturationWaitTime

        protected long executionSaturationWaitTime
    • Constructor Detail

      • BackoffJobAcquisitionStrategy

        public BackoffJobAcquisitionStrategy​(long baseIdleWaitTime,
                                             float idleIncreaseFactor,
                                             long maxIdleTime,
                                             long baseBackoffWaitTime,
                                             float backoffIncreaseFactor,
                                             long maxBackoffTime,
                                             int backoffDecreaseThreshold,
                                             int baseNumJobsToAcquire)
      • BackoffJobAcquisitionStrategy

        public BackoffJobAcquisitionStrategy​(JobExecutor jobExecutor)
    • Method Detail

      • initializeMaxLevels

        protected void initializeMaxLevels()
      • log

        protected double log​(double base,
                             double value)
      • allSubmittedJobsRejected

        protected boolean allSubmittedJobsRejected​(JobAcquisitionContext context)
        Returns:
        true, if all acquired jobs (spanning all engines) were rejected for execution
      • reconfigureNumberOfJobsToAcquire

        protected void reconfigureNumberOfJobsToAcquire​(JobAcquisitionContext context)
      • calculateIdleTime

        protected long calculateIdleTime()
      • calculateBackoffTime

        protected long calculateBackoffTime()