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

Kai Reinhard
05.02.2019 80406d66f759065c0dae7aea332f847c65c77001
Job monitor...
3 files modified
23 ■■■■■ changed files
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java 4 ●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java 3 ●●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java 16 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
@@ -42,7 +42,9 @@
    public List<BorgJob<?>> getJobListCopy(String repo) {
        JobQueue<String> origQueue = getQueue(repo);
        List<BorgJob<?>> jobList = new ArrayList<>();
        for (AbstractJob<String> origJob : origQueue.getQueue()) {
        Iterator<AbstractJob<String>> it = origQueue.getQueueIterator();
        while (it.hasNext()) {
            AbstractJob<String> origJob = it.next();
            if (!(origJob instanceof BorgJob)) {
                log.error("Oups, only BorgJobs are supported. Ignoring unexpected job: " + origJob.getClass());
                continue;
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java
@@ -26,6 +26,9 @@
    @Getter(AccessLevel.PACKAGE)
    @Setter(AccessLevel.PACKAGE)
    private Future<JobResult<T>> future;
    @Getter
    @Setter(AccessLevel.PACKAGE)
    private long uniqueJobNumber;
    public void cancel() {
        if (this.getStatus() == Status.QUEUED) {
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java
@@ -1,6 +1,5 @@
package de.micromata.borgbutler.jobs;
import lombok.Getter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -11,20 +10,22 @@
public class JobQueue<T> {
    private static final int MAX_DONE_JOBS_SIZE = 50;
    private static long jobSequence = 0;
    private Logger log = LoggerFactory.getLogger(JobQueue.class);
    @Getter
    private List<AbstractJob<T>> queue = new ArrayList<>();
    private List<AbstractJob<T>> doneJobs = new LinkedList<>();
    private ExecutorService executorService = Executors.newSingleThreadExecutor();
    private  static synchronized void setNextJobId(AbstractJob<?> job) {
        job.setUniqueJobNumber(jobSequence++);
    }
    public int getQueueSize() {
        return queue.size();
    }
    public List<AbstractJob<T>> getDoneJobs() {
        synchronized (doneJobs) {
            return Collections.unmodifiableList(doneJobs);
        }
    public Iterator<AbstractJob<T>> getQueueIterator() {
        return Collections.unmodifiableList(queue).iterator();
    }
    /**
@@ -41,6 +42,7 @@
                    return queuedJob;
                }
            }
            setNextJobId(job);
            queue.add(job.setStatus(AbstractJob.Status.QUEUED));
        }
        job.setFuture(executorService.submit(new CallableTask(job)));
@@ -79,8 +81,6 @@
                }
            }
        }
    }
    private class CallableTask implements Callable<JobResult<T>> {