]> git.sur5r.net Git - bacula/bacula/commitdiff
Cleanup attribute catalog insert errors + cancel SD only once
authorKern Sibbald <kern@sibbald.com>
Tue, 3 Nov 2009 12:14:38 +0000 (13:14 +0100)
committerKern Sibbald <kern@sibbald.com>
Tue, 3 Nov 2009 12:14:38 +0000 (13:14 +0100)
bacula/src/dird/catreq.c
bacula/src/dird/job.c
bacula/src/jcr.h
bacula/src/lib/bsock.c

index aac92cf8faa9ef95a41da7e5a5d96b743e2aac0d..dc5d03d3c3ef006fc8fbf0decfc0224cf0ad40e8 100644 (file)
@@ -504,21 +504,20 @@ static void update_attribute(JCR *jcr, char *msg, int32_t msglen)
  */
 void catalog_update(JCR *jcr, BSOCK *bs)
 {
-   POOLMEM *omsg;
-
-   if (job_canceled(jcr) || !jcr->pool->catalog_files) {
-      goto bail_out;                  /* user disabled cataloging */
+   if (!jcr->pool->catalog_files) {
+      return;                         /* user disabled cataloging */
+   }
+   if (job_canceled(jcr)) {
+      goto bail_out;
    }
    if (!jcr->db) {
-      omsg = get_memory(bs->msglen+1);
+      POOLMEM *omsg = get_memory(bs->msglen+1);
       pm_strcpy(omsg, bs->msg);
       bs->fsend(_("1994 Invalid Catalog Update: %s"), omsg);    
       Jmsg1(jcr, M_FATAL, 0, _("Invalid Catalog Update; DB not open: %s"), omsg);
       free_memory(omsg);
       goto bail_out;
-
    }
-
    update_attribute(jcr, bs->msg, bs->msglen);
 
 bail_out:
@@ -580,7 +579,12 @@ bool despool_attributes_from_file(JCR *jcr, const char *file)
             last = size;
          }
       }
-      update_attribute(jcr, msg, msglen);
+      if (!job_canceled(jcr)) {
+         update_attribute(jcr, msg, msglen);
+         if (job_canceled(jcr)) {
+            goto bail_out;
+         }
+      }
    }
    if (ferror(spool_fd)) {
       berrno be;
index 05597a6994d4332d757cc41b8b221ec5a4be827c..181a411c49bb0080073544a2cd72826a07ca7e2b 100644 (file)
@@ -454,6 +454,10 @@ bool cancel_job(UAContext *ua, JCR *jcr)
 
 void cancel_storage_daemon_job(JCR *jcr)
 {
+   if (jcr->sd_canceled) { 
+      return;                   /* cancel only once */
+   }
+
    UAContext *ua = new_ua_context(jcr);
    JCR *control_jcr = new_control_jcr("*JobCancel*", JT_SYSTEM);
    BSOCK *sd;
@@ -487,6 +491,7 @@ void cancel_storage_daemon_job(JCR *jcr)
       sd->signal(BNET_TERMINATE);
       sd->close();
       ua->jcr->store_bsock = NULL;
+      jcr->sd_canceled = true;
    }
 bail_out:
    free_jcr(control_jcr);
index 58ae568437cd1424d67cdf68ee713f9b9ddf2be7..52abd898782e509f2091d6b789732dba9c1995b8 100644 (file)
@@ -298,6 +298,7 @@ public:
    bool run_full_pool_override;
    bool run_inc_pool_override;
    bool run_diff_pool_override;
+   bool sd_canceled;                  /* set if SD canceled */
    FILESET *fileset;                  /* FileSet resource */
    CAT *catalog;                      /* Catalog resource */
    MSGS *messages;                    /* Default message handler */
index cf3a68cbfd91630217352e5439aacc90848963b6..d35da86409a243290e8288652bc7cc565579dc4b 100644 (file)
@@ -564,6 +564,7 @@ bool BSOCK::despool(void update_attr_spool_size(ssize_t size), ssize_t tsize)
    size_t nbytes;
    ssize_t last = 0, size = 0;
    int count = 0;
+   JCR *jcr = get_jcr();
 
    rewind(m_spool_fd);
 
@@ -595,11 +596,15 @@ bool BSOCK::despool(void update_attr_spool_size(ssize_t size), ssize_t tsize)
          }
       }
       send();
+      if (jcr && job_canceled(jcr)) {
+         return false;
+      }
+      send();
    }
    update_attr_spool_size(tsize - last);
    if (ferror(m_spool_fd)) {
       berrno be;
-      Qmsg1(get_jcr(), M_FATAL, 0, _("fread attr spool error. ERR=%s\n"),
+      Qmsg1(jcr, M_FATAL, 0, _("fread attr spool error. ERR=%s\n"),
             be.bstrerror());
       return false;
    }