in src/main/java/org/apache/sling/event/impl/jobs/tasks/FindUnfinishedJobsTask.java [92:136]
private void initTopic(final Resource topicResource) {
logger.debug("Initializing topic {}...", topicResource.getName());
JobTopicTraverser.traverse(logger, topicResource, new JobTopicTraverser.JobCallback() {
@Override
public boolean handle(final JobImpl job) {
if ( job.getProcessingStarted() != null ) {
logger.debug("Found unfinished job {}", job.getId());
job.retry();
try {
final Resource jobResource = topicResource.getResourceResolver().getResource(job.getResourcePath());
// sanity check
if ( jobResource != null ) {
final ModifiableValueMap mvm = jobResource.adaptTo(ModifiableValueMap.class);
mvm.remove(Job.PROPERTY_JOB_STARTED_TIME);
mvm.put(Job.PROPERTY_JOB_RETRY_COUNT, job.getRetryCount());
if ( job.getProperty(JobImpl.PROPERTY_JOB_QUEUED, Calendar.class) == null) {
mvm.put(JobImpl.PROPERTY_JOB_QUEUED, Calendar.getInstance());
}
jobResource.getResourceResolver().commit();
}
} catch ( final PersistenceException ignore) {
logger.error("Unable to update unfinished job " + job, ignore);
}
} else if ( job.getProperty(JobImpl.PROPERTY_JOB_QUEUED, Calendar.class) == null) {
logger.debug("Found job without queued date {}", job.getId());
try {
final Resource jobResource = topicResource.getResourceResolver().getResource(job.getResourcePath());
// sanity check
if ( jobResource != null ) {
final ModifiableValueMap mvm = jobResource.adaptTo(ModifiableValueMap.class);
mvm.put(JobImpl.PROPERTY_JOB_QUEUED, Calendar.getInstance());
jobResource.getResourceResolver().commit();
}
} catch ( final PersistenceException ignore) {
logger.error("Unable to update queued date for job " + job.getId(), ignore);
}
}
return true;
}
});
logger.debug("Topic {} initialized", topicResource.getName());
}