private void initTopic()

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());
    }