]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix bug #1208
authorKern Sibbald <kern@sibbald.com>
Tue, 23 Dec 2008 13:28:03 +0000 (13:28 +0000)
committerKern Sibbald <kern@sibbald.com>
Tue, 23 Dec 2008 13:28:03 +0000 (13:28 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@8235 91ce42f0-d328-0410-95d8-f526ca767f89

13 files changed:
bacula/src/stored/acquire.c
bacula/src/stored/askdir.c
bacula/src/stored/bcopy.c
bacula/src/stored/bextract.c
bacula/src/stored/block.c
bacula/src/stored/bls.c
bacula/src/stored/bscan.c
bacula/src/stored/btape.c
bacula/src/stored/label.c
bacula/src/stored/protos.h
bacula/src/stored/spool.c
bacula/src/version.h
bacula/technotes-2.5

index f4203cd3956f9f6ca5dd2ff5296d176f76bbb14d..06c280efd8087189b289c070de27be7b733fc8c1 100644 (file)
@@ -452,7 +452,7 @@ bool release_device(DCR *dcr)
          Dmsg2(200, "dir_create_jobmedia. Release vol=%s dev=%s\n", 
                dev->VolCatInfo.VolCatName, dev->print_name());
          if (!dev->at_weot() && !dir_create_jobmedia_record(dcr)) {
-            Jmsg(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
+            Jmsg2(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
                dcr->VolCatInfo.VolCatName, jcr->Job);
          }
          /* If no more writers, and no errors, and wrote something, write an EOF */
index 276a5020cfe818a4ae64f4fe2614574e673b492e..9b492c22e4c3ca4fb1c5803f14068753b51198c7 100644 (file)
@@ -387,7 +387,7 @@ bail_out:
 /*
  * After writing a Volume, create the JobMedia record.
  */
-bool dir_create_jobmedia_record(DCR *dcr)
+bool dir_create_jobmedia_record(DCR *dcr, bool zero)
 {
    JCR *jcr = dcr->jcr;
    BSOCK *dir = jcr->dir_bsock;
@@ -398,17 +398,30 @@ bool dir_create_jobmedia_record(DCR *dcr)
       return true;
    }
 
+   /* Throw out records where FI is zero -- i.e. nothing done */
+   if (!zero && dcr->VolFirstIndex == 0 && 
+        (dcr->StartBlock != 0 || dcr->EndBlock != 0)) {
+      Dmsg0(000, "JobMedia problem FI=0 StartBlock!=0\n");
+      return true;
+   }
+
    if (!dcr->WroteVol) {
       return true;                    /* nothing written to tape */
    }
 
    dcr->WroteVol = false;
-   dir->fsend(Create_job_media, jcr->Job,
-      dcr->VolFirstIndex, dcr->VolLastIndex,
-      dcr->StartFile, dcr->EndFile,
-      dcr->StartBlock, dcr->EndBlock, 
-      dcr->Copy, dcr->Stripe, 
-      edit_uint64(dcr->VolMediaId, ed1));
+   if (zero) {
+      /* Send dummy place holder to avoid purging */
+      dir->fsend(Create_job_media, jcr->Job,
+         0 , 0, 0, 0, 0, 0, 0, 0, edit_uint64(dcr->VolMediaId, ed1));
+   } else {
+      dir->fsend(Create_job_media, jcr->Job,
+         dcr->VolFirstIndex, dcr->VolLastIndex,
+         dcr->StartFile, dcr->EndFile,
+         dcr->StartBlock, dcr->EndBlock, 
+         dcr->Copy, dcr->Stripe, 
+         edit_uint64(dcr->VolMediaId, ed1));
+   }
    Dmsg1(100, ">dird %s", dir->msg);
    if (dir->recv() <= 0) {
       Dmsg0(190, "create_jobmedia error bnet_recv\n");
index fbb35120e5ca5ce803ce88a5feba8bf3d2726ba1..c249c6e136baae07d4d5803ef88e23cb2ef5f6cc 100644 (file)
@@ -362,7 +362,7 @@ static void get_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sess
 /* Dummies to replace askdir.c */
 bool    dir_find_next_appendable_volume(DCR *dcr) { return 1;}
 bool    dir_update_volume_info(DCR *dcr, bool relabel, bool update_LastWritten) { return 1; }
-bool    dir_create_jobmedia_record(DCR *dcr) { return 1; }
+bool    dir_create_jobmedia_record(DCR *dcr, bool zero) { return 1; }
 bool    dir_ask_sysop_to_create_appendable_volume(DCR *dcr) { return 1; }
 bool    dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;}
 bool    dir_send_job_status(JCR *jcr) {return 1;}
index c3a86d15805686eb5b2f83a68173531664981c1a..1a8c67f542fdc861f9c84c87a9cfbd6bb9de001b 100644 (file)
@@ -501,7 +501,7 @@ static bool record_cb(DCR *dcr, DEV_RECORD *rec)
 /* Dummies to replace askdir.c */
 bool    dir_find_next_appendable_volume(DCR *dcr) { return 1;}
 bool    dir_update_volume_info(DCR *dcr, bool relabel, bool update_LastWritten) { return 1; }
-bool    dir_create_jobmedia_record(DCR *dcr) { return 1; }
+bool    dir_create_jobmedia_record(DCR *dcr, bool zero) { return 1; }
 bool    dir_ask_sysop_to_create_appendable_volume(DCR *dcr) { return 1; }
 bool    dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;}
 bool    dir_send_job_status(JCR *jcr) {return 1;}
index fef281595cd2cec1fc41dedbeaad8cabbeae7d8e..97dac7ca57fe60f55f34899254a77b0e5df8aef3 100644 (file)
@@ -365,7 +365,7 @@ bool write_block_to_device(DCR *dcr)
       /* Create a jobmedia record for this job */
       if (!dir_create_jobmedia_record(dcr)) {
          dev->dev_errno = EIO;
-         Jmsg(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
+         Jmsg2(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
             dcr->VolCatInfo.VolCatName, jcr->Job);
          set_new_volume_parameters(dcr);
          stat = false;
@@ -724,7 +724,7 @@ static bool terminate_writing_volume(DCR *dcr)
    if (!dir_create_jobmedia_record(dcr)) {
       Dmsg0(190, "Error from create JobMedia\n");
       dev->dev_errno = EIO;
-       Jmsg(dcr->jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
+       Jmsg2(dcr->jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
             dcr->VolCatInfo.VolCatName, dcr->jcr->Job);
        ok = false;
    }
@@ -798,7 +798,7 @@ static bool do_new_file_bookkeeping(DCR *dcr)
    if (!dir_create_jobmedia_record(dcr)) {
       Dmsg0(190, "Error from create_job_media.\n");
       dev->dev_errno = EIO;
-      Jmsg(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
+      Jmsg2(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
            dcr->VolCatInfo.VolCatName, jcr->Job);
       terminate_writing_volume(dcr);
       dev->dev_errno = EIO;
index a86c09943cfd20de6a316e65a95185e079b4e831..b5b936b0ea596c4d17ac7a7bd6c73141f9713850 100644 (file)
@@ -453,7 +453,7 @@ static void get_session_record(DEVICE *dev, DEV_RECORD *rec, SESSION_LABEL *sess
 /* Dummies to replace askdir.c */
 bool    dir_find_next_appendable_volume(DCR *dcr) { return 1;}
 bool    dir_update_volume_info(DCR *dcr, bool relabel, bool update_LastWritten) { return 1; }
-bool    dir_create_jobmedia_record(DCR *dcr) { return 1; }
+bool    dir_create_jobmedia_record(DCR *dcr, bool zero) { return 1; }
 bool    dir_ask_sysop_to_create_appendable_volume(DCR *dcr) { return 1; }
 bool    dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;}
 bool    dir_send_job_status(JCR *jcr) {return 1;}
index 9aca445fa6c9d1073465b61b23c0da7d2bda15f9..7d6b546ee798ee9e75df71059d0f5acc48739313 100644 (file)
@@ -1312,7 +1312,7 @@ static JCR *create_jcr(JOB_DBR *jr, DEV_RECORD *rec, uint32_t JobId)
 /* Dummies to replace askdir.c */
 bool    dir_find_next_appendable_volume(DCR *dcr) { return 1;}
 bool    dir_update_volume_info(DCR *dcr, bool relabel, bool update_LastWritten) { return 1; }
-bool    dir_create_jobmedia_record(DCR *dcr) { return 1; }
+bool    dir_create_jobmedia_record(DCR *dcr, bool zero) { return 1; }
 bool    dir_ask_sysop_to_create_appendable_volume(DCR *dcr) { return 1; }
 bool    dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec) { return 1;}
 bool    dir_send_job_status(JCR *jcr) {return 1;}
index 1908cbda0515d4f45378c3d87ebe87a620641c19..d6f77f0f34feb607ce6f9014148b9c674328c07b 100644 (file)
@@ -2668,7 +2668,7 @@ bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw  writing)
    return 1;
 }
 
-bool dir_create_jobmedia_record(DCR *dcr)
+bool dir_create_jobmedia_record(DCR *dcr, bool zero)
 {
    dcr->WroteVol = false;
    return 1;
index 881bf9509679b0a0d246539e464ecca78f6bd2a2..b4274059bd90d069ffa8615cd8d4f6487f95e25e 100644 (file)
@@ -414,7 +414,8 @@ bail_out:
 
 /*
  * Write a volume label. This is ONLY called if we have a valid Bacula
- *   label of type PRE_LABEL;
+ *   label of type PRE_LABEL or we are recyling an existing Volume.
+ *
  *  Returns: true if OK
  *           false if unable to write it
  */
@@ -501,6 +502,7 @@ bool rewrite_volume_label(DCR *dcr, bool recycle)
    if (recycle) {
       dev->VolCatInfo.VolCatMounts++;
       dev->VolCatInfo.VolCatRecycles++;
+      dir_create_jobmedia_record(dcr, true);
    } else {
       dev->VolCatInfo.VolCatMounts = 1;
       dev->VolCatInfo.VolCatRecycles = 0;
index ac2ab67461e1abffdfe987634213e87add6a5b08..b511bea0ccd9e81c8e173b10b9c469d974824d1e 100644 (file)
@@ -55,7 +55,7 @@ bool    dir_ask_sysop_to_create_appendable_volume(DCR *dcr);
 bool    dir_ask_sysop_to_mount_volume(DCR *dcr, int mode);
 bool    dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec);
 bool    dir_send_job_status(JCR *jcr);
-bool    dir_create_jobmedia_record(DCR *dcr);
+bool    dir_create_jobmedia_record(DCR *dcr, bool zero=false);
 bool    dir_update_device(JCR *jcr, DEVICE *dev);
 bool    dir_update_changer(JCR *jcr, AUTOCHANGER *changer);
 
index bbd2f8601fe53305718db47cef4123a2b45c90f2..7e6246a0fb39830a66aadeaf79573d1a9eaee3da 100644 (file)
@@ -303,7 +303,7 @@ static bool despool_data(DCR *dcr, bool commit)
    }
 
    if (!dir_create_jobmedia_record(dcr)) {
-      Jmsg(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
+      Jmsg2(jcr, M_FATAL, 0, _("Could not create JobMedia record for Volume=\"%s\" Job=%s\n"),
          dcr->VolCatInfo.VolCatName, jcr->Job);
    }
    /* Set new file/block parameters for current dcr */
index 672ea20f3da5b72aa71d0cb0e2da5bdbc8dd331b..3caa71de7f97e7be83b1d4c8d2efa32033f09449 100644 (file)
@@ -4,8 +4,8 @@
 
 #undef  VERSION
 #define VERSION "2.5.26"
-#define BDATE   "21 December 2008"
-#define LSMDATE "21Dec08"
+#define BDATE   "23 December 2008"
+#define LSMDATE "23Dec08"
 
 #define PROG_COPYRIGHT "Copyright (C) %d-2008 Free Software Foundation Europe e.V.\n"
 #define BYEAR "2008"       /* year for copyright messages in progs */
index f6cf7f6ecd1a261be65ecd390f062274d7587e64..2c7450697d8078159d9755fdfec2411587a5e9be 100644 (file)
@@ -10,6 +10,8 @@ filepattern (restore with regex in bsr)
 mixed priorities
 
 General:
+23Dec08
+kes  Fix bug #1208
 20Dec08
 ebl  Work on copy jobs
      - Add "list copies" command