mirror of https://github.com/micromata/borgbackup-butler.git

Kai Reinhard
06.08.2019 3b6408569b692bf2c12d8b3e355d3fba5c41a41a
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java
@@ -9,21 +9,34 @@
import java.util.concurrent.Executors;
public class JobQueue<T> {
    private static final int MAX_DONE_JOBS_SIZE = 50;
    private static final int MAX_OLD_JOBS_SIZE = 50;
    private static long jobSequence = 0;
    private Logger log = LoggerFactory.getLogger(JobQueue.class);
    private List<AbstractJob<T>> queue = new ArrayList<>();
    private List<AbstractJob<T>> doneJobs = new LinkedList<>();
    /**
     * Finished, failed and cancelled jobs.
     */
    private List<AbstractJob<T>> oldJobs = new LinkedList<>();
    private ExecutorService executorService = Executors.newSingleThreadExecutor();
    private static synchronized void setNextJobId(AbstractJob<?> job) {
        job.setUniqueJobNumber(jobSequence++);
    }
    /**
     * @return the number of running and queued jobs of this queue or 0 if no job is in the queue.
     */
    public int getQueueSize() {
        return queue.size();
    }
    /**
     * @return the number of old jobs (done, failed or cancelled) stored. The size of stored old jobs is limited.
     */
    public int getOldJobsSize() {
        return oldJobs.size();
    }
    public Iterator<AbstractJob<T>> getQueueIterator() {
        return Collections.unmodifiableList(queue).iterator();
    }
@@ -93,13 +106,13 @@
                AbstractJob<T> job = it.next();
                if (job.isFinished()) {
                    it.remove();
                    synchronized (doneJobs) {
                        doneJobs.add(0, job);
                    synchronized (oldJobs) {
                        oldJobs.add(0, job);
                    }
                }
                synchronized (doneJobs) {
                    while (doneJobs.size() > MAX_DONE_JOBS_SIZE) {
                        doneJobs.remove(doneJobs.size() - 1);
                synchronized (oldJobs) {
                    while (oldJobs.size() > MAX_OLD_JOBS_SIZE) {
                        oldJobs.remove(oldJobs.size() - 1);
                    }
                }
            }