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

Kai Reinhard
28.55.2018 66bf65a49dba5df6ffbf865bc6cac9afba41ead1
Job queueing...
3 files modified
47 ■■■■ changed files
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java 19 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java 4 ●●●● patch | view | raw | blame | history
borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java 24 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java
@@ -12,11 +12,11 @@
public abstract class AbstractJob<T> {
    private Logger logger = LoggerFactory.getLogger(AbstractJob.class);
    public enum Status {DONE, RUNNING, QUEUED, STOPPED, FAILED}
    public enum Status {DONE, RUNNING, QUEUED, CANCELLED, FAILED}
    @Getter
    @Setter
    private boolean stopRequested;
    private boolean cancelledRequested;
    @Getter
    @Setter(AccessLevel.PACKAGE)
@@ -31,7 +31,18 @@
    @Setter(AccessLevel.PACKAGE)
    private Future<T> future;
    public T waitForResult() {
    public void cancel() {
        if (this.getStatus() == Status.QUEUED) {
            this.status = Status.CANCELLED;
        }
        this.cancelledRequested = true;
    }
    /**
     * Waits for and gets the result.
     * @return
     */
    public T getResult() {
        try {
            return future.get();
        } catch (InterruptedException | ExecutionException ex) {
@@ -51,7 +62,7 @@
     * @return true, if the job is done, stopped or failed. Otherwise false (if job is running or queued).
     */
    public boolean isFinished() {
        if (status == Status.DONE || status == Status.STOPPED || status == Status.FAILED) {
        if (status == Status.DONE || status == Status.CANCELLED || status == Status.FAILED) {
            return true;
        }
        return false;
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java
@@ -90,8 +90,8 @@
        @Override
        public T call() throws Exception {
            if (job.isStopRequested()) {
                job.setStatus(AbstractJob.Status.STOPPED);
            if (job.isCancelledRequested()) {
                job.setStatus(AbstractJob.Status.CANCELLED);
                return null;
            }
            try {
borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java
@@ -63,25 +63,35 @@
        TestJob job = (TestJob) queue.getQueuedJob(5);
        assertEquals(AbstractJob.Status.QUEUED, job.getStatus());
        String result = job1.waitForResult();
        String result = job1.getResult();
        assertEquals("10\n", result);
        assertEquals(AbstractJob.Status.DONE, job1.getStatus());
        queue.append(new TestJob(10, file));
        job = (TestJob) queue.getQueuedJob(10);
        assertEquals(AbstractJob.Status.QUEUED, job.getStatus());
        result = job.waitForResult();
        queue.append(new TestJob(100, file));
        job1 = (TestJob) queue.getQueuedJob(10);
        assertEquals(AbstractJob.Status.QUEUED, job1.getStatus());
        job = (TestJob)queue.getQueuedJob(100);
        job.cancel();
        assertEquals(AbstractJob.Status.CANCELLED, job.getStatus());
        result = job1.getResult();
        assertEquals("10\n", result);
        assertEquals(0, queue.getQueueSize());
        List<AbstractJob> doneJobs = queue.getDoneJobs();
        assertEquals(3, doneJobs.size());
        assertEquals(4, doneJobs.size());
        check(((TestJob) doneJobs.get(0)), AbstractJob.Status.DONE, "10");
        check(((TestJob) doneJobs.get(1)), AbstractJob.Status.FAILED, "10");
        check(((TestJob) doneJobs.get(2)), AbstractJob.Status.DONE, "10");
        check(((TestJob) doneJobs.get(1)), AbstractJob.Status.CANCELLED, null);
        check(((TestJob) doneJobs.get(2)), AbstractJob.Status.FAILED, null);
        check(((TestJob) doneJobs.get(3)), AbstractJob.Status.DONE, "10");
    }
    private void check(TestJob job, AbstractJob.Status status, String result) {
        assertEquals(status, job.getStatus());
        if (result != null) {
            assertEquals(result + "\n", job.getResult());
        }
    }
}