]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix bug #1357 Verify jobs fail when job has zero files
authorKern Sibbald <kern@sibbald.com>
Sat, 29 Aug 2009 13:07:02 +0000 (15:07 +0200)
committerKern Sibbald <kern@sibbald.com>
Sat, 29 Aug 2009 13:07:02 +0000 (15:07 +0200)
bacula/src/dird/bsr.c
bacula/src/dird/job.c
bacula/src/dird/migrate.c
bacula/src/dird/protos.h
bacula/src/dird/verify.c
bacula/src/version.h
bacula/technotes

index f8b75989309318bdbeeaa6fe8c076fc1c8272710..96d30c0ca3dd24f6890a6fb78663fb88ad6c8eec 100644 (file)
@@ -176,6 +176,10 @@ bool complete_bsr(UAContext *ua, RBSR *bsr)
       }
       bsr->VolSessionId = jr.VolSessionId;
       bsr->VolSessionTime = jr.VolSessionTime;
+      if (jr.JobFiles == 0) {      /* zero files is OK, not an error, but */
+         bsr->VolCount = 0;        /*   there are no volumes */
+         continue;
+      }
       if ((bsr->VolCount=db_get_job_volume_parameters(ua->jcr, ua->db, bsr->JobId,
            &(bsr->VolParams))) == 0) {
          ua->error_msg(_("Unable to get Job Volume Parameters. ERR=%s\n"), db_strerror(ua->db));
index 6a11f9d389cc8e929bd3527274bf9989981f8282..acb6480d12e7ebeb933cba4a1b19574f6a80f80b 100644 (file)
@@ -1367,17 +1367,22 @@ void create_clones(JCR *jcr)
 /*
  * Given: a JobId in jcr->previous_jr.JobId,
  *  this subroutine writes a bsr file to restore that job.
+ * Returns: -1 on error
+ *           number of files if OK
  */
-bool create_restore_bootstrap_file(JCR *jcr)
+int create_restore_bootstrap_file(JCR *jcr)
 {
    RESTORE_CTX rx;
    UAContext *ua;
+   int files;
+
    memset(&rx, 0, sizeof(rx));
    rx.bsr = new_bsr();
    rx.JobIds = (char *)"";                       
    rx.bsr->JobId = jcr->previous_jr.JobId;
    ua = new_ua_context(jcr);
    if (!complete_bsr(ua, rx.bsr)) {
+      files = -1;
       goto bail_out;
    }
    rx.bsr->fi = new_findex();
@@ -1385,17 +1390,18 @@ bool create_restore_bootstrap_file(JCR *jcr)
    rx.bsr->fi->findex2 = jcr->previous_jr.JobFiles;
    jcr->ExpectedFiles = write_bsr_file(ua, rx);
    if (jcr->ExpectedFiles == 0) {
+      files = 0;
       goto bail_out;
    }
    free_ua_context(ua);
    free_bsr(rx.bsr);
    jcr->needs_sd = true;
-   return true;
+   return jcr->ExpectedFiles;
 
 bail_out:
    free_ua_context(ua);
    free_bsr(rx.bsr);
-   return false;
+   return files;
 }
 
 /* TODO: redirect command ouput to job log */
index b8fb64d89e55e56d104c7d8cf875b2895d5bf285..2ffadb76fc04d502d81d4f33dfee6d96960b9ed8 100644 (file)
@@ -152,7 +152,10 @@ bool do_migration_init(JCR *jcr)
       return true;                    /* no work */
    }
 
-   create_restore_bootstrap_file(jcr);
+   if (create_restore_bootstrap_file(jcr) < 0) {
+      Jmsg(jcr, M_FATAL, 0, _("Create bootstrap file failed.\n"));
+      return false;
+   }
 
    if (jcr->previous_jr.JobId == 0 || jcr->ExpectedFiles == 0) {
       set_jcr_job_status(jcr, JS_Terminated);
index 402c965ac154bdac2f33a70caa6c1a0610a548c9..a19bdded4dd6dc809f93670826c661dbf9f1eede 100644 (file)
@@ -137,7 +137,7 @@ extern void set_rstorage(JCR *jcr, USTORE *store);
 extern void free_rstorage(JCR *jcr);
 extern bool setup_job(JCR *jcr);
 extern void create_clones(JCR *jcr);
-extern bool create_restore_bootstrap_file(JCR *jcr);
+extern int create_restore_bootstrap_file(JCR *jcr);
 extern void dird_free_jcr(JCR *jcr);
 extern void dird_free_jcr_pointers(JCR *jcr);
 extern void cancel_storage_daemon_job(JCR *jcr);
index 4373f23a20721e652400b2b5a0c88ba06e2d3a28..98d0c7afac7883b258fa9bf06d308c8db0397f09 100644 (file)
@@ -181,8 +181,18 @@ bool do_verify(JCR *jcr)
     *   File daemon but not used).
     */
    if (jcr->get_JobLevel() == L_VERIFY_VOLUME_TO_CATALOG) {
-      if (!create_restore_bootstrap_file(jcr)) {
+      int stat;
+      /*
+       * Note: negative status is an error, zero status, means
+       *  no files were backed up, so skip calling SD and
+       *  client.
+       */
+      stat = create_restore_bootstrap_file(jcr);
+      if (stat < 0) {                      /* error */
          return false;
+      } else if (stat == 0) {              /* No files, nothing to do */
+         verify_cleanup(jcr, JS_Terminated); /* clean up */
+         return true;                      /* get out */
       }
    } else {
       jcr->sd_auth_key = bstrdup("dummy");    /* dummy Storage daemon key */
index 411f5d59e8d9d5c27237379bb36fde341e5f258b..2dcac1e48ccb882bf09ce184df3fb24649c9b7df 100644 (file)
@@ -4,8 +4,8 @@
 
 #undef  VERSION
 #define VERSION "3.0.3"
-#define BDATE   "22 August 2009"
-#define LSMDATE "22Aug09"
+#define BDATE   "28 August 2009"
+#define LSMDATE "28Aug09"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2009 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2009"       /* year for copyright messages in progs */
index a762c96650b1b313921cd9876e0059e139d029e5..973821347148dcb4f2bd0bccc5cc9b9fa3e2b86d 100644 (file)
@@ -2,6 +2,8 @@
           
 General:
 
+28Aug09
+kes  Fix bug #1357 Verify jobs fail when job has zero files
 26Aug09
 kes  Fix possible seg fault in db_get_int_handler in accurate code
 kes  Release orphanned buffers in accurate code.