in src/main/java/org/apache/sling/event/impl/jobs/queues/JobQueueImpl.java [739:783]
private void reschedule(final JobHandler handler) {
// we delay putting back the job until the retry delay is over
final long delay = this.getRetryDelay(handler);
if ( delay > 0 ) {
if ( this.configuration.getType() == Type.ORDERED ) {
this.cache.setIsBlocked(true);
}
handler.addToRetryList();
final Date fireDate = new Date();
fireDate.setTime(System.currentTimeMillis() + delay);
if ( this.configuration.getType() == Type.ORDERED ) {
this.isSleepingUntil = fireDate.getTime();
}
final Runnable t = new Runnable() {
@Override
public void run() {
try {
if ( handler.removeFromRetryList() ) {
requeue(handler);
}
waitCounter.decrementAndGet();
} finally {
if ( configuration.getType() == Type.ORDERED ) {
isSleepingUntil = -1;
cache.setIsBlocked(false);
startJobs();
}
}
}
};
this.waitCounter.incrementAndGet();
final Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
t.run();
}
}, delay);
} else {
// put directly into queue
this.requeue(handler);
}
}