From 80406d66f759065c0dae7aea332f847c65c77001 Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sat, 05 Jan 2019 21:02:13 +0000
Subject: [PATCH] Job monitor...
---
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractJob.java | 3 +++
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java | 16 ++++++++--------
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java | 4 +++-
3 files changed, 14 insertions(+), 9 deletions(-)
diff --git a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java b/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
index 6e429bf..e4dc1a8 100644
--- a/borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
+++ b/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;
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 54647bf..8b6e8e8 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
@@ -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) {
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 7ce762e..5e5a95c 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
@@ -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>> {
--
Gitblit v1.10.0