]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/askdir.c
Fix typo
[bacula/bacula] / bacula / src / stored / askdir.c
index 276a5020cfe818a4ae64f4fe2614574e673b492e..e3a3394ec41fd9f226d18ffe7cfb24b117b81034 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2009 Free Software Foundation Europe e.V.
 
    The main author of Bacula is Kern Sibbald, with contributions from
    many others, a complete list can be found in the file AUTHORS.
@@ -330,7 +330,7 @@ bool dir_update_volume_info(DCR *dcr, bool label, bool update_LastWritten)
    POOL_MEM VolumeName;
 
    /* If system job, do not update catalog */
-   if (jcr->get_JobType() == JT_SYSTEM) {
+   if (jcr->getJobType() == JT_SYSTEM) {
       return true;
    }
 
@@ -387,14 +387,21 @@ 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;
    char ed1[50];
 
    /* If system job, do not update catalog */
-   if (jcr->get_JobType() == JT_SYSTEM) {
+   if (jcr->getJobType() == JT_SYSTEM) {
+      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(100, "JobMedia FI=0 StartBlock!=0 record suppressed\n");
       return true;
    }
 
@@ -403,12 +410,18 @@ bool dir_create_jobmedia_record(DCR *dcr)
    }
 
    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");
@@ -452,6 +465,10 @@ bool dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec)
    ser_bytes(rec->data, rec->data_len);
    dir->msglen = ser_length(dir->msg);
    Dmsg1(1800, ">dird %s\n", dir->msg);    /* Attributes */
+   if (rec->Stream == STREAM_UNIX_ATTRIBUTES || 
+       rec->Stream == STREAM_UNIX_ATTRIBUTES_EX) {
+      dir->set_data_end();                 /* set offset of last valid data */
+   }
    return dir->send();
 }
 
@@ -481,6 +498,9 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr)
    JCR *jcr = dcr->jcr;
    bool got_vol = false;
 
+   if (job_canceled(jcr)) {
+      return false;
+   }
    Dmsg0(400, "enter dir_ask_sysop_to_create_appendable_volume\n");
    ASSERT(dev->blocked());
    for ( ;; ) {
@@ -497,8 +517,8 @@ bool dir_ask_sysop_to_create_appendable_volume(DCR *dcr)
       } else {
          if (stat == W_TIMEOUT || stat == W_MOUNT) {
             Mmsg(dev->errmsg, _(
-"Job %s waiting. Cannot find any appendable volumes.\n"
-"Please use the \"label\"  command to create a new Volume for:\n"
+"Job %s is waiting. Cannot find any appendable volumes.\n"
+"Please use the \"label\" command to create a new Volume for:\n"
 "    Storage:      %s\n"
 "    Pool:         %s\n"
 "    Media type:   %s\n"),