]> git.sur5r.net Git - bacula/bacula/commitdiff
es Fix error message that was clobbered when Dir tells SD it does not
authorKern Sibbald <kern@sibbald.com>
Wed, 12 Sep 2007 21:31:57 +0000 (21:31 +0000)
committerKern Sibbald <kern@sibbald.com>
Wed, 12 Sep 2007 21:31:57 +0000 (21:31 +0000)
     have write permission on Volume.  This should fix a minor point
     in bug #942, but not the main problem.
kes  Add code to cancel job in SD if FD connection fails. This should
     fix bug #920.
kes  Add code in FD exit to prevent loops and a crash on FreeBSD.

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

bacula/src/dird/backup.c
bacula/src/dird/job.c
bacula/src/dird/protos.h
bacula/src/dird/restore.c
bacula/src/dird/verify.c
bacula/src/filed/filed.c
bacula/src/stored/dircmd.c
bacula/src/stored/mount.c
bacula/src/version.h
bacula/technotes-2.3

index a6a0b0aeedf1b720b841a6db8646160fd76cb9ea..161d390c0928779880afe343b6dfb3d68dede193 100644 (file)
@@ -165,6 +165,7 @@ 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;
    }
 
index 70be904b25069ab1c3dd83bcf47294726a3eae40..406a43e3bb054e0107e15e56c547e224dd7c6250 100644 (file)
@@ -427,6 +427,46 @@ bool cancel_job(UAContext *ua, JCR *jcr)
    return true;
 }
 
+void cancel_storage_daemon_job(JCR *jcr)
+{
+   UAContext *ua = new_ua_context(jcr);
+   JCR *control_jcr = new_control_jcr("*JobCancel*", JT_SYSTEM);
+   BSOCK *sd;
+
+   ua->jcr = control_jcr;
+   if (jcr->store_bsock) {
+      if (!ua->jcr->wstorage) {
+         if (jcr->rstorage) {
+            copy_wstorage(ua->jcr, jcr->rstorage, _("Job resource")); 
+         } else {
+            copy_wstorage(ua->jcr, jcr->wstorage, _("Job resource")); 
+         }
+      } else {
+         USTORE store;
+         if (jcr->rstorage) {
+            store.store = jcr->rstore;
+         } else {
+            store.store = jcr->wstore;
+         }
+         set_wstorage(ua->jcr, &store);
+      }
+
+      if (!connect_to_storage_daemon(ua->jcr, 10, SDConnectTimeout, 1)) {
+         goto bail_out;
+      }
+      Dmsg0(200, "Connected to storage daemon\n");
+      sd = ua->jcr->store_bsock;
+      sd->fsend("cancel Job=%s\n", jcr->Job);
+      while (sd->recv() >= 0) {
+      }
+      sd->signal(BNET_TERMINATE);
+      sd->close();
+      ua->jcr->store_bsock = NULL;
+   }
+bail_out:
+   free_jcr(control_jcr);
+   free_ua_context(ua);
+}
 
 static void job_monitor_destructor(watchdog_t *self)
 {
index 10d27e31eb900526adbf4880fc3139c6305d3ecc..c0ad0d5e46ad4ccf2c6ba478278ad72e3a8d7416 100644 (file)
@@ -128,6 +128,7 @@ extern void create_clones(JCR *jcr);
 extern bool 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);
 
 /* migration.c */
 extern bool do_migration(JCR *jcr);
index 446aac6881def13ac00122b27169f393e67462d2..e3a60613b0b2517c39264162afdc55d476a667c1 100644 (file)
@@ -135,6 +135,7 @@ 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;
    }
index b5418d11add204a06c8508198cbee3012bcac975..26c8b2f5893b2db5a521ed73861d68018cf5cee5 100644 (file)
@@ -211,6 +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;
    }
 
index 3f96b0d913807e2f258b4515ef6ad11b60ee6d9e..6852b0ccef43621ca476b66a198f2fadce424d01 100644 (file)
@@ -232,6 +232,14 @@ int main (int argc, char *argv[])
 
 void terminate_filed(int sig)
 {
+   static bool already_here = false;
+
+   if (already_here) {
+      exit(1);                        /* prevent loops */
+   }
+   already_here = true;
+   stop_watchdog();
+
    bnet_stop_thread_server(server_tid);
    generate_daemon_event(NULL, "Exit");
    write_state_file(me->working_directory, "bacula-fd", get_first_port_host_order(me->FDaddrs));
@@ -240,12 +248,12 @@ void terminate_filed(int sig)
    if (configfile != NULL) {
       free(configfile);
    }
+
    if (debug_level > 0) {
       print_memory_pool_stats();
    }
-   free_config_resources();
    term_msg();
-   stop_watchdog();
+   free_config_resources();
    cleanup_crypto();
    close_memory_pool();               /* release free memory in pool */
    sm_dump(false);                    /* dump orphaned buffers */
index 205fe140df3566000f74e09f5e30d77ebe67efa3..dad767bfc082be72825e4a1c0bbb40fba3d39091 100644 (file)
@@ -294,13 +294,11 @@ static bool cancel_cmd(JCR *cjcr)
       if (!(jcr=get_jcr_by_full_name(Job))) {
          bnet_fsend(dir, _("3904 Job %s not found.\n"), Job);
       } else {
-         jcr->lock();
          oldStatus = jcr->JobStatus;
          set_jcr_job_status(jcr, JS_Canceled);
          if (!jcr->authenticated && oldStatus == JS_WaitFD) {
             pthread_cond_signal(&jcr->job_start_wait); /* wake waiting thread */
          }
-         jcr->unlock();
          if (jcr->file_bsock) {
             bnet_sig(jcr->file_bsock, BNET_TERMINATE);
          } else {
index 102ef85c4b92ae427e75b47bff649008bdc4ed7f..0b91ce6b7432d6a35c81dc52b320851d9c213f8d 100644 (file)
@@ -276,6 +276,8 @@ read_volume:
       bstrncpy(VolumeName, dcr->VolumeName, sizeof(VolumeName));
       bstrncpy(dcr->VolumeName, dev->VolHdr.VolumeName, sizeof(dcr->VolumeName));
       if (!dir_get_volume_info(dcr, GET_VOL_INFO_FOR_WRITE)) {
+         POOL_MEM vol_info_msg;
+         pm_strcpy(vol_info_msg, jcr->dir_bsock->msg);  /* save error message */
          /* Restore desired volume name, note device info out of sync */
          /* This gets the info regardless of the Pool */
          bstrncpy(dcr->VolumeName, dev->VolHdr.VolumeName, sizeof(dcr->VolumeName));
@@ -293,7 +295,7 @@ read_volume:
               "    Current Volume \"%s\" not acceptable because:\n"
               "    %s"),
              dcrVolCatInfo.VolCatName, dev->VolHdr.VolumeName,
-             jcr->dir_bsock->msg);
+             vol_info_msg.c_str());
          ask = true;
          /* Restore saved DCR before continuing */
          bstrncpy(dcr->VolumeName, VolumeName, sizeof(dcr->VolumeName));
index 7adafd96f28fdce2e2742962e844be13ea43b47f..4cf4e1e2aad5514f3936b3463f5dc2befa57ec79 100644 (file)
@@ -3,9 +3,9 @@
  */
 
 #undef  VERSION
-#define VERSION "2.3.3"
-#define BDATE   "06 September 2007"
-#define LSMDATE "06Sep07"
+#define VERSION "2.3.4"
+#define BDATE   "12 September 2007"
+#define LSMDATE "12Sep07"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2007 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2007"       /* year for copyright messages in progs */
index f23b5be0169645b042ddd1d9e8542c6821945008..4d1d4e8842cc11af8d3d3e8d3ead3f3abe0b2d14 100644 (file)
@@ -2,6 +2,12 @@
 
 General:
 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
+     in bug #942, but not the main problem.
+kes  Add code to cancel job in SD if FD connection fails. This should
+     fix bug #920.
+kes  Add code in FD exit to prevent loops and a crash on FreeBSD.
 dvl  Pass jcr and db into db_escape_string() to enable better escaping
      of strings
 kes  Fix migration code to get correct Volume name with multiple volumes 
@@ -12,7 +18,7 @@ kes  Note, you need GTK >= 2.10 to be able to link the Tray Monitor
      program.
 kes  Move patches into patches directory.
 11Sep07 
-ebl  Fix bug #946 about "bacula-dir -t" witch doesn't works
+ebl  Fix bug #946 about "bacula-dir -t" which doesn't works
      as expected.
 09Sep07 
 ebl  Using "m" in bconsole will show messages like before,
@@ -24,7 +30,7 @@ kes  Fix bug #935, and probably also bug #903 where files were not
 kes  Suppress chown and chmod error messages if the FD is not running
      as root.
 07Sep07
-kes  Apply Martin Simmons patch that should turn off the new API usage
+kes  Apply Martin Simmons' patch that should turn off the new API usage
      when batch insert is turned off allowing building on older
      PostgreSQLs.
 kes  Add ./configure search in qwt-qt4 for qwt package
@@ -35,7 +41,8 @@ kes  Add guid_to_name.c/h which replace idcache.
 kes  Remove enh_fnmatch.c.  Make code that references it use fnmatch.c
 04Sep07
 ebl  Detect if new PosgreSQL batch insert API is present.
-kes  Correct incorrect mempool call causing Director crash.
+kes  Correct incorrect mempool call causing Director crash. Occurs on
+     systems without va_copy().
 sb   Update spec files for 2.2.1 release
 03Sep07
 kes  Fix memory pool call in ua_output.c. bug #934.