]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Cancel storage daemon in all cases where FD reports error. This
authorKern Sibbald <kern@sibbald.com>
Thu, 13 Sep 2007 07:21:47 +0000 (07:21 +0000)
committerKern Sibbald <kern@sibbald.com>
Thu, 13 Sep 2007 07:21:47 +0000 (07:21 +0000)
     should fix virtually all cases of bug #920.
kes  Fix db_escape_string() for MySQL which did not compile.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5539 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/kernstodo
bacula/src/cats/mysql.c
bacula/src/dird/backup.c
bacula/src/dird/restore.c
bacula/src/dird/verify.c
bacula/technotes-2.3

index 8eed47c6b882cc65fcb15e33a988ebedaf87ee5a..aa994f4d837abc57734792556f814dac190b56e5 100644 (file)
@@ -68,8 +68,14 @@ Professional Needs:
    See email of 21Aug2007 for details.
 
 Priority:
+- KIWI
+- Implement wait on multiple objects
+   - Multiple max times
+   - pthread signal
+   - socket input ready
 - Implement SDErrors (must return from SD)
 - Implement USB keyboard support in rescue CD.
+- Implement continue spooling while despooling.
 - Remove all install temp files in Win32 PLUGINSDIR.
 - Audit retention periods to make sure everything is 64 bit.
 - Use E'xxx' to escape PostgreSQL strings.
index a84fd502ef0e258a42f0f1bc27ed2523d5457c45..631e6a474f0d535e0aae9b7d9b2d89d6b59e738d 100644 (file)
@@ -295,9 +295,9 @@ int db_next_index(JCR *jcr, B_DB *mdb, char *table, char *index)
  *         the escaped output.
  */
 void
-db_escape_string(JCR *jcr, B_DB *db, char *snew, char *old, int len)
+db_escape_string(JCR *jcr, B_DB *mdb, char *snew, char *old, int len)
 {
-   mysql_real_escape_string(jcr->db, snew, old, len);
+   mysql_real_escape_string(mdb->db, snew, old, len);
 }
 
 /*
index 161d390c0928779880afe343b6dfb3d68dede193..ba1bdfe00d76a4c7037340b1ba3ec551d3e8b5d1 100644 (file)
@@ -165,7 +165,6 @@ bool do_backup(JCR *jcr)
 
    set_jcr_job_status(jcr, JS_WaitFD);
    if (!connect_to_file_daemon(jcr, 10, FDConnectTimeout, 1)) {
-      cancel_storage_daemon_job(jcr);
       goto bail_out;
    }
 
@@ -246,9 +245,7 @@ bail_out:
    set_jcr_job_status(jcr, JS_ErrorTerminated);
    Dmsg1(400, "wait for sd. use=%d\n", jcr->use_count());
    /* Cancel SD */
-   if (jcr->store_bsock) {
-      jcr->store_bsock->fsend("cancel Job=%s\n", jcr->Job);
-   }
+   cancel_storage_daemon_job(jcr);
    wait_for_storage_daemon_termination(jcr);
    Dmsg1(400, "after wait for sd. use=%d\n", jcr->use_count());
    return false;
@@ -298,6 +295,11 @@ int wait_for_job_termination(JCR *jcr)
    }
    bnet_sig(fd, BNET_TERMINATE);   /* tell Client we are terminating */
 
+   /* Force cancel in SD if failing */
+   if (job_canceled(jcr) || !fd_ok) {
+      cancel_storage_daemon_job(jcr);
+   }
+
    /* Note, the SD stores in jcr->JobFiles/ReadBytes/JobBytes/Errors */
    wait_for_storage_daemon_termination(jcr);
 
index e3a60613b0b2517c39264162afdc55d476a667c1..978f81476a985f3d8d31760b8cd6940719c0015c 100644 (file)
@@ -135,7 +135,6 @@ bool do_restore(JCR *jcr)
     */
    set_jcr_job_status(jcr, JS_WaitFD);
    if (!connect_to_file_daemon(jcr, 10, FDConnectTimeout, 1)) {
-      cancel_storage_daemon_job(jcr);
       restore_cleanup(jcr, JS_ErrorTerminated);
       return false;
    }
@@ -247,6 +246,10 @@ void restore_cleanup(JCR *jcr, int TermCode)
       jcr->unlink_bsr = false;
    }
 
+   if (job_canceled(jcr)) {
+      cancel_storage_daemon_job(jcr);
+   }  
+
    switch (TermCode) {
    case JS_Terminated:
       if (jcr->ExpectedFiles > jcr->jr.JobFiles) {
index 26c8b2f5893b2db5a521ed73861d68018cf5cee5..17e1443c50b1e89bbad60b1b1568d0a87c5ab4c3 100644 (file)
@@ -211,8 +211,7 @@ bool do_verify(JCR *jcr)
     */
    set_jcr_job_status(jcr, JS_Blocked);
    if (!connect_to_file_daemon(jcr, 10, FDConnectTimeout, 1)) {
-      cancel_storage_daemon_job(jcr);
-      return false;
+      goto bail_out;
    }
 
    set_jcr_job_status(jcr, JS_Running);
@@ -221,12 +220,12 @@ bool do_verify(JCR *jcr)
 
    Dmsg0(30, ">filed: Send include list\n");
    if (!send_include_list(jcr)) {
-      return false;
+      goto bail_out;
    }
 
    Dmsg0(30, ">filed: Send exclude list\n");
    if (!send_exclude_list(jcr)) {
-      return false;
+      goto bail_out;
    }
 
    /*
@@ -249,7 +248,7 @@ bool do_verify(JCR *jcr)
       }
       bnet_fsend(fd, storaddr, jcr->rstore->address, jcr->rstore->SDDport);
       if (!response(jcr, fd, OKstore, "Storage", DISPLAY_ERROR)) {
-         return false;
+         goto bail_out;
       }
 
       /*
@@ -257,12 +256,12 @@ bool do_verify(JCR *jcr)
        */
       if (!send_bootstrap_file(jcr, fd) ||
           !response(jcr, fd, OKbootstrap, "Bootstrap", DISPLAY_ERROR)) {
-         return false;
+         goto bail_out;
       }
 
       if (!jcr->RestoreBootstrap) {
          Jmsg0(jcr, M_FATAL, 0, _("Deprecated feature ... use bootstrap.\n"));
-         return false;
+         goto bail_out;
       }
 
       level = "volume";
@@ -276,19 +275,19 @@ bool do_verify(JCR *jcr)
    default:
       Jmsg2(jcr, M_FATAL, 0, _("Unimplemented Verify level %d(%c)\n"), jcr->JobLevel,
          jcr->JobLevel);
-      return false;
+      goto bail_out;
    }
 
    if (!send_runscripts_commands(jcr)) {
-      return false;
+      goto bail_out;
    }
 
    /*
     * Send verify command/level to File daemon
     */
-   bnet_fsend(fd, verifycmd, level);
+   fd->fsend(verifycmd, level);
    if (!response(jcr, fd, OKverify, "Verify", DISPLAY_ERROR)) {
-      return false;
+      goto bail_out;
    }
 
    /*
@@ -329,7 +328,7 @@ bool do_verify(JCR *jcr)
 
    default:
       Jmsg1(jcr, M_FATAL, 0, _("Unimplemented verify level %d\n"), jcr->JobLevel);
-      return false;
+      goto bail_out;
    }
 
    stat = wait_for_job_termination(jcr);
@@ -337,6 +336,9 @@ bool do_verify(JCR *jcr)
       verify_cleanup(jcr, stat);
       return true;
    }
+
+bail_out:
+   verify_cleanup(jcr, JS_ErrorTerminated);
    return false;
 }
 
@@ -374,6 +376,10 @@ void verify_cleanup(JCR *jcr, int TermCode)
 
    update_job_end(jcr, TermCode);
 
+   if (job_canceled(jcr)) {
+      cancel_storage_daemon_job(jcr);
+   }
+
    if (jcr->unlink_bsr && jcr->RestoreBootstrap) {
       unlink(jcr->RestoreBootstrap);
       jcr->unlink_bsr = false;
index 4d1d4e8842cc11af8d3d3e8d3ead3f3abe0b2d14..8154946c41e68d745b6c6ff1cae471a4d76efbd0 100644 (file)
@@ -1,6 +1,10 @@
               Technical notes on version 2.3
 
 General:
+13Sep07
+kes  Cancel storage daemon in all cases where FD reports error. This
+     should fix virtually all cases of bug #920.
+kes  Fix db_escape_string() for MySQL which did not compile.
 12Sep07
 kes  Fix error message that was clobbered when Dir tells SD it does not
      have write permission on Volume.  This should fix a minor point