From 66bf65a49dba5df6ffbf865bc6cac9afba41ead1 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Fri, 28 Dec 2018 11:55:26 +0000
Subject: [PATCH] Job queueing...
---
borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java | 24 +++++++++++++++++-------
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java | 19 +++++++++++++++----
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java | 4 ++--
3 files changed, 34 insertions(+), 13 deletions(-)
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java
index 5827495..2670b98 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java
+++ b/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;
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java
index 94c8106..1935f0a 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java
+++ b/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 {
diff --git a/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java b/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java
index 74bcf76..6a4e1c2 100644
--- a/borgbutler-core/src/test/java/de/micromata/borgbutler/jobs/JobQueueTest.java
+++ b/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());
+ }
}
}
--
Gitblit v1.10.0