From ea69c28b8aa40b0de84e3ec52941d08ae9ef6cef Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Fri, 28 Dec 2018 10:42:03 +0000
Subject: [PATCH] Job queueing...

---
 borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

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 4c6717f..3107c56 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
@@ -9,6 +9,7 @@
 import java.util.concurrent.Executors;
 
 public class JobQueue {
+    private static final int MAX_DONE_JOBS_SIZE = 50;
     private Logger log = LoggerFactory.getLogger(JobQueue.class);
     private List<AbstractJob> queue = new ArrayList<>();
     private List<AbstractJob> doneJobs = new LinkedList<>();
@@ -19,6 +20,10 @@
         return queue.size();
     }
 
+    public List<AbstractJob> getDoneJobs() {
+        return Collections.unmodifiableList(doneJobs);
+    }
+
     /**
      * Appends the job if not alread in the queue. Starts the execution if no execution thread is already running.
      *
@@ -79,6 +84,9 @@
                     it.remove();
                     doneJobs.add(0, job);
                 }
+                while (doneJobs.size() > MAX_DONE_JOBS_SIZE) {
+                    doneJobs.remove(doneJobs.size() - 1);
+                }
             }
         }
     }
@@ -112,7 +120,10 @@
                     log.info("Starting job: " + job.getId());
                     job.setStatus(AbstractJob.Status.RUNNING);
                     job.execute();
-                    job.setStatus(AbstractJob.Status.DONE);
+                    if (!job.isFinished()) {
+                        // Don't overwrite status failed set by job.
+                        job.setStatus(AbstractJob.Status.DONE);
+                    }
                 } catch (Exception ex) {
                     log.error("Error while executing job '" + job.getId() + "': " + ex.getMessage(), ex);
                     job.setStatus(AbstractJob.Status.FAILED);

--
Gitblit v1.10.0