in src/main/java/org/apache/sling/event/impl/jobs/queues/QueueManager.java [193:233]
void maintain() {
this.schedulerRuns++;
logger.debug("Queue manager maintenance: Starting #{}", this.schedulerRuns);
// queue maintenance
if ( this.isActive.get() ) {
for(final JobQueueImpl jbq : this.queues.values() ) {
jbq.maintain();
}
}
// full topic scan is done every third run
if ( schedulerRuns % 3 == 0 && this.isActive.get() ) {
this.fullTopicScan();
}
// we only do a full clean up on every fifth run
final boolean doFullCleanUp = (schedulerRuns % 5 == 0);
if ( doFullCleanUp ) {
// check for idle queue
logger.debug("Checking for idle queues...");
// we synchronize to avoid creating a queue which is about to be removed during cleanup
synchronized ( queuesLock ) {
final Iterator<Map.Entry<String, JobQueueImpl>> i = this.queues.entrySet().iterator();
while ( i.hasNext() ) {
final Map.Entry<String, JobQueueImpl> current = i.next();
final JobQueueImpl jbq = current.getValue();
if ( jbq.tryToClose() ) {
logger.debug("Removing idle job queue {}", jbq);
// remove
i.remove();
// update mbeans
((QueuesMBeanImpl)queuesMBean).sendEvent(new QueueStatusEvent(null, jbq));
}
}
}
}
logger.debug("Queue manager maintenance: Finished #{}", this.schedulerRuns);
}