void maintain()

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