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 boolean
applyJitter
protected int
backoffDecreaseThreshold
protected float
backoffIncreaseFactor
protected int
backoffLevel
protected long
baseBackoffWaitTime
protected long
baseIdleWaitTime
protected int
baseNumJobsToAcquire
static long
DEFAULT_EXECUTION_SATURATION_WAIT_TIME
protected boolean
executionSaturated
protected long
executionSaturationWaitTime
protected float
idleIncreaseFactor
protected int
idleLevel
protected java.util.Map<java.lang.String,java.lang.Integer>
jobsToAcquire
protected int
maxBackoffLevel
protected long
maxBackoffWaitTime
protected int
maxIdleLevel
protected long
maxIdleWaitTime
protected int
numAcquisitionsWithoutLockingFailure
-
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 boolean
allSubmittedJobsRejected(JobAcquisitionContext context)
protected long
calculateBackoffTime()
protected long
calculateIdleTime()
int
getNumJobsToAcquire(java.lang.String processEngine)
long
getWaitTime()
protected void
initializeMaxLevels()
protected double
log(double base, double value)
void
reconfigure(JobAcquisitionContext context)
protected void
reconfigureBackoffLevel(JobAcquisitionContext context)
protected void
reconfigureIdleLevel(JobAcquisitionContext context)
protected void
reconfigureNumberOfJobsToAcquire(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:
reconfigure
in 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:
getWaitTime
in interfaceJobAcquisitionStrategy
-
calculateIdleTime
protected long calculateIdleTime()
-
calculateBackoffTime
protected long calculateBackoffTime()
-
getNumJobsToAcquire
public int getNumJobsToAcquire(java.lang.String processEngine)
- Specified by:
getNumJobsToAcquire
in interfaceJobAcquisitionStrategy
-
-