]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix #2925 Do not try to stop non backup jobs (virtualfull, copy, migration, restore...
authorEric Bollengier <eric@baculasystems.com>
Mon, 28 Aug 2017 12:47:48 +0000 (14:47 +0200)
committerKern Sibbald <kern@sibbald.com>
Mon, 28 Aug 2017 15:49:06 +0000 (17:49 +0200)
The code to handle restart incomplete restore/copy/migration jobs is not implemented.

bacula/src/dird/job.c
bacula/src/jcr.h
bacula/src/lib/jcr.c

index 1939aecefc837ab0711803b1dffe0a07d7f1b6f9..b5b39c7d5a512650ca2ae32d8336ff6884ed8707 100644 (file)
@@ -680,8 +680,14 @@ cancel_job(UAContext *ua, JCR *jcr, int wait,  bool cancel)
    int status;
    const char *reason, *cmd;
 
-   Dmsg3(10, "cancel_job jcr=%p jobid=%d use_count\n", jcr, jcr->JobId, jcr->use_count());
-
+   if (!cancel) {               /* stop the job */
+      if (!jcr->can_be_stopped()) {
+         ua->error_msg(_("Cannot stop JobId %s, Job %s is not a regular Backup Job\n"),
+                       edit_uint64(jcr->JobId, ed1), jcr->Job);
+         return true;
+      }
+   }
+   
    if (cancel) {
       status = JS_Canceled;
       reason = _("canceled");
index a4d2fb070a3be6c5afa4eefc151d7f1ebe4e9d0a..dae83c06e844e9994408db39097d336c001ed1f5 100644 (file)
@@ -214,6 +214,7 @@ public:
    bool no_client_used() const {
       return (m_JobLevel == L_VIRTUAL_FULL);
    };
+   bool can_be_stopped();                 /* in lib/jcr.c */
    const char *get_OperationName();       /* in lib/jcr.c */
    const char *get_ActionName(bool past); /* in lib/jcr.c */
    void setJobStatus(int JobStatus);      /* in lib/jcr.c */
index 3f76cf5e81117c18f6320a018a6ea83a0f6dd1e1..8aafd522d61aadd9aa2a70af44be3bc794c32603 100644 (file)
@@ -280,6 +280,23 @@ bool JCR::JobReads()
    return false;
 }
 
+/* We can stop only Backup jobs connected to a client. It doesn't make sens at
+ * this time to stop a copy, migraton, restore or a verify job. The specific
+ * code should be implemented first.
+ */
+bool JCR::can_be_stopped()
+{
+   bool ok=true;
+   if (getJobType() == JT_BACKUP) {          /* Is a Backup */
+      if (getJobLevel() == L_VIRTUAL_FULL) { /* Is a VirtualFull */
+         ok = false;
+      }
+   } else {   /* Is not a backup (so, copy, migration, admin, verify, ... */
+      ok = false;
+   }
+   return ok;
+}
+
 /*
  * Push a subroutine address into the job end callback stack
  */