Class InternalJobQueue

  • All Implemented Interfaces:
    Runnable

    public final class InternalJobQueue
    extends TimerTask
    A simple implementation of a job queue that executes jobs in order of priority and longest waiting time. To allow quick jobs like importing raw data or reporters to run it is possible to reserve slots per Job.ExecutionTime setting. The configuration is done in the base.config file with the following settings:
    Internal job queue settings
    Setting Default/possible value(s) Description
    jobqueue.internal.enabled true | false If the internal job queue is enabled or not. Do not disable the job queue if you don't have another external job queue manager. It is possible to use both an external and internal job queue.
    jobqueue.internal.checkinterval 30 The interval, in seconds, that the job queue checks the database for new jobs.
    jobqueue.internal.maxthreadpriority Thread.NORM_PRIORITY - 1 The maximum thread priority for the threads that execute jobs. See Thread.setPriority(int) for possible values.
    jobqueue.internal.shortest.threads 1 Number of threads to reserve for jobs with an estimated execution time of less than one minute. Jobs with this setting may also use threads from the other "slower" slots.
    jobqueue.internal.shortest.threadpriority Thread.NORM_PRIORITY - 1 The thread priority to use when executing jobs in this slot. See Thread.setPriority(int) for possible values.
    jobqueue.internal.short.threads 1 Number of threads to reserve for jobs with an estimated execution time between one and ten minutes. Jobs with this setting may also use threads from the other "slower" slots.
    jobqueue.internal.short.threadpriority Thread.NORM_PRIORITY - 1 The thread priority to use when executing jobs in this slot. See Thread.setPriority(int) for possible values.
    jobqueue.internal.medium.threads 2 Number of threads to reserve for jobs with an estimated execution time less than one hour. Jobs with this setting may also use threads from the other "slower" slots.
    jobqueue.internal.medium.threadpriority Thread.NORM_PRIORITY - 2 The thread priority to use when executing jobs in this slot. See Thread.setPriority(int) for possible values.
    jobqueue.internal.long.threads 4 Number of threads to reserve for jobs with an estimated execution time more than one hour. Jobs with this setting may not use threads from the other slots.
    jobqueue.internal.long.threadpriority Thread.NORM_PRIORITY - 2 The thread priority to use when executing jobs in this slot. See Thread.setPriority(int) for possible values.
    Version:
    2.0
    Author:
    Nicklas
    Last modified
    $Date: 2018-11-02 08:45:02 +0100 (fr, 02 nov 2018) $
    • Field Detail

      • log

        private static final org.slf4j.Logger log
        Log job queue events.
      • runnersGroup

        private final ThreadGroup runnersGroup
        The group were all job runners are placed.
      • closeTimeout

        private int closeTimeout
        Timeout to wait for jobs to act on the ABORT signal when shutting down BASE. Default value is 20 seconds.
      • nextStatusUpdateRequest

        private long nextStatusUpdateRequest
        Time when the next status update request for external jobs is scheduled.
      • signalReceiver

        private static SignalReceiver signalReceiver
        Use the local signal receiver only.
    • Constructor Detail

      • InternalJobQueue

        InternalJobQueue()
        Create the job queue. The one and only instance is created by Application.start
    • Method Detail

      • getSignalReceiver

        public static SignalReceiver getSignalReceiver()
        Get the signal receiver used by the internal job queue. If the internal job queue is disabled a LocalSignalReceiver is created on the first call to this method.
        Returns:
        A signal receiver object
        Since:
        2.7
      • run

        public void run()
        Check the database for jobs that are waiting to be executed. We sort the jobs by priority and creation time and try to execute them in that order. Each job is encapsulated in a InternalJobQueue.JobRunner object which is started in it's own thread.
        Specified by:
        run in interface Runnable
        Specified by:
        run in class TimerTask
      • checkInternalJobQueue

        private void checkInternalJobQueue()
      • requestExternalStatusUpdate

        private void requestExternalStatusUpdate()
      • close

        void close()
        Cleanup