in src/main/java/org/apache/sling/event/impl/jobs/queues/JobQueueImpl.java [509:554]
private RescheduleInfo handleReschedule(final JobHandler handler, final Job.JobState resultState) {
final RescheduleInfo info = new RescheduleInfo();
info.state = resultState;
switch ( resultState ) {
case SUCCEEDED : // job is finished
if ( this.logger.isDebugEnabled() ) {
this.logger.debug("Finished job {}", Utility.toString(handler.getJob()));
}
info.processingTime = System.currentTimeMillis() - handler.started;
info.finalState = InternalJobState.SUCCEEDED;
break;
case QUEUED : // check if we exceeded the number of retries
final int retries = handler.getJob().getProperty(Job.PROPERTY_JOB_RETRIES, 0);
int retryCount = handler.getJob().getProperty(Job.PROPERTY_JOB_RETRY_COUNT, 0);
retryCount++;
if ( retries != -1 && retryCount > retries ) {
if ( this.logger.isDebugEnabled() ) {
this.logger.error("Cancelled job {} after {} unsuccessful retries",
Utility.toString(handler.getJob()),
retries);
}
info.finalState = InternalJobState.CANCELLED;
} else {
info.reschedule = true;
handler.getJob().retry();
this.logger.warn("Failed job {}, will retry {} more time(s), retryCount={}",
Utility.toString(handler.getJob()),
retries-retryCount,
retryCount);
info.finalState = InternalJobState.FAILED;
}
break;
default : // consumer cancelled the job (STOPPED, GIVEN_UP, ERROR)
if ( this.logger.isDebugEnabled() ) {
this.logger.debug("Cancelled job {}", Utility.toString(handler.getJob()));
}
info.finalState = InternalJobState.CANCELLED;
break;
}
if ( info.state == Job.JobState.QUEUED && !info.reschedule ) {
info.state = Job.JobState.GIVEN_UP;
}
return info;
}