Class BackoffJobAcquisitionStrategy
- java.lang.Object
-
- org.camunda.bpm.engine.impl.jobexecutor.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
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 Summary
Fields Modifier and Type Field Description protected booleanapplyJitterprotected intbackoffDecreaseThresholdprotected floatbackoffIncreaseFactorprotected intbackoffLevelprotected longbaseBackoffWaitTimeprotected longbaseIdleWaitTimeprotected intbaseNumJobsToAcquirestatic longDEFAULT_EXECUTION_SATURATION_WAIT_TIMEprotected booleanexecutionSaturatedprotected longexecutionSaturationWaitTimeprotected floatidleIncreaseFactorprotected intidleLevelprotected java.util.Map<java.lang.String,java.lang.Integer>jobsToAcquireprotected intmaxBackoffLevelprotected longmaxBackoffWaitTimeprotected intmaxIdleLevelprotected longmaxIdleWaitTimeprotected intnumAcquisitionsWithoutLockingFailure
-
Constructor Summary
Constructors Constructor Description BackoffJobAcquisitionStrategy(long baseIdleWaitTime, float idleIncreaseFactor, long maxIdleTime, long baseBackoffWaitTime, float backoffIncreaseFactor, long maxBackoffTime, int backoffDecreaseThreshold, int baseNumJobsToAcquire)BackoffJobAcquisitionStrategy(JobExecutor jobExecutor)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected booleanallSubmittedJobsRejected(JobAcquisitionContext context)protected longcalculateBackoffTime()protected longcalculateIdleTime()intgetNumJobsToAcquire(java.lang.String processEngine)longgetWaitTime()protected voidinitializeMaxLevels()protected doublelog(double base, double value)voidreconfigure(JobAcquisitionContext context)protected voidreconfigureBackoffLevel(JobAcquisitionContext context)protected voidreconfigureIdleLevel(JobAcquisitionContext context)protected voidreconfigureNumberOfJobsToAcquire(JobAcquisitionContext context)
-
-
-
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)
-
reconfigure
public void reconfigure(JobAcquisitionContext context)
- Specified by:
reconfigurein interfaceJobAcquisitionStrategy
-
allSubmittedJobsRejected
protected boolean allSubmittedJobsRejected(JobAcquisitionContext context)
- Returns:
- true, if all acquired jobs (spanning all engines) were rejected for execution
-
reconfigureIdleLevel
protected void reconfigureIdleLevel(JobAcquisitionContext context)
-
reconfigureBackoffLevel
protected void reconfigureBackoffLevel(JobAcquisitionContext context)
-
reconfigureNumberOfJobsToAcquire
protected void reconfigureNumberOfJobsToAcquire(JobAcquisitionContext context)
-
getWaitTime
public long getWaitTime()
- Specified by:
getWaitTimein interfaceJobAcquisitionStrategy
-
calculateIdleTime
protected long calculateIdleTime()
-
calculateBackoffTime
protected long calculateBackoffTime()
-
getNumJobsToAcquire
public int getNumJobsToAcquire(java.lang.String processEngine)
- Specified by:
getNumJobsToAcquirein interfaceJobAcquisitionStrategy
-
-