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

Kai Reinhard
06.03.2019 bf7101f797e8f2a6c3b966762afb1ec063c4428e
Job monitor: Cancellation of jobs modified.
3 files modified
39 ■■■■■ changed files
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java 23 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java 1 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java 15 ●●●● patch | view | raw | blame | history
borgbutler-core/src/main/java/de/micromata/borgbutler/BorgQueueExecutor.java
@@ -36,23 +36,22 @@
    }
    public void cancelJob(long uniqueJobNumber) {
        AbstractJob<?> job = getQueuedJobByUniqueJobNumber(uniqueJobNumber);
        AbstractJob<?> job = null;
        JobQueue<?> queue = null;
        Iterator<JobQueue<String>> it = queueMap.values().iterator();
        while (it.hasNext()) {
            queue = it.next();
            job = queue.getQueuedJobByUniqueJobNumber(uniqueJobNumber);
            if (job != null) {
                break;
            }
        }
        if (job == null) {
            log.info("Can't cancel job #" + uniqueJobNumber + ". Not found as queued job (may-be already cancelled or finished). Nothing to do.");
            return;
        }
        job.cancel();
    }
    private AbstractJob<?> getQueuedJobByUniqueJobNumber(long uniqueJobNumber) {
        Iterator<JobQueue<String>> it = queueMap.values().iterator();
        while (it.hasNext()) {
            AbstractJob<?> job = it.next().getQueuedJobByUniqueJobNumber(uniqueJobNumber);
            if (job != null) {
                return job;
            }
        }
        return null;
        queue.refreshQueue();
    }
    /**
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/AbstractCommandLineJob.java
@@ -127,7 +127,6 @@
            log.info("Cancelling job #" + getUniqueJobNumber() + ": " + getId());
            watchdog.destroyProcess();
            watchdog = null;
            setCancelled();
        }
    }
borgbutler-core/src/main/java/de/micromata/borgbutler/jobs/JobQueue.java
@@ -30,6 +30,7 @@
    /**
     * Searches only for queued jobs (not done jobs).
     *
     * @param uniqueJobNumber
     * @return The job if any job with the given unique job number is queued, otherwise null.
     */
@@ -76,7 +77,13 @@
        return null;
    }
    private void organizeQueue() {
    /**
     * Removes all finished or cancelled jobs from the queued list and adds them to the list of done jobs.
     * Will be called automatically after finishing a job.
     * <br>
     * You should call this method after cancelling a job.
     */
    public void refreshQueue() {
        synchronized (queue) {
            if (queue.isEmpty()) {
                return;
@@ -120,7 +127,11 @@
                    // Don't overwrite status failed set by job.
                    job.setStatus(AbstractJob.Status.DONE);
                }
                organizeQueue();
                if (job.isCancellationRequested() && job.getStatus() != AbstractJob.Status.CANCELLED) {
                    log.info("Job #" + job.getUniqueJobNumber() + " cancelled: " + job.getId());
                    job.setCancelled();
                }
                refreshQueue();
                return result;
            } catch (Exception ex) {
                log.error("Error while executing job '" + job.getId() + "': " + ex.getMessage(), ex);