]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/askdir.c
Start RESTORE_OBJECT code
[bacula/bacula] / bacula / src / stored / askdir.c
index 3deb5bce4615bbc2b908170f9b978b12eca89f66..6e13beaa8f88a1a64b1f775c54a19ec970616982 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2008 Free Software Foundation Europe e.V.
+   Copyright (C) 2000-2010 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.
@@ -31,7 +31,6 @@
  *
  *   Kern Sibbald, December 2000
  *
- *   Version $Id$
  */
 
 #include "bacula.h"                   /* pull in global headers */
@@ -173,6 +172,7 @@ static bool do_get_volume_info(DCR *dcr)
     int n;
     int32_t InChanger;
 
+    dcr->setVolCatInfo(false);
     if (dir->recv() <= 0) {
        Dmsg0(200, "getvolname error bnet_recv\n");
        Mmsg(jcr->errmsg, _("Network error on bnet_recv in req_vol_info.\n"));
@@ -197,6 +197,7 @@ static bool do_get_volume_info(DCR *dcr)
        return false;
     }
     vol.InChanger = InChanger;        /* bool in structure */
+    vol.is_valid = true;
     unbash_spaces(vol.VolCatName);
     bstrncpy(dcr->VolumeName, vol.VolCatName, sizeof(dcr->VolumeName));
     dcr->VolCatInfo = vol;            /* structure assignment */
@@ -223,12 +224,12 @@ bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw writing)
     BSOCK *dir = jcr->dir_bsock;
 
     P(vol_info_mutex);
-    bstrncpy(dcr->VolCatInfo.VolCatName, dcr->VolumeName, sizeof(dcr->VolCatInfo.VolCatName));
-    bash_spaces(dcr->VolCatInfo.VolCatName);
-    dir->fsend(Get_Vol_Info, jcr->Job, dcr->VolCatInfo.VolCatName,
+    dcr->setVolCatName(dcr->VolumeName);
+    bash_spaces(dcr->getVolCatName());
+    dir->fsend(Get_Vol_Info, jcr->Job, dcr->getVolCatName(),
        writing==GET_VOL_INFO_FOR_WRITE?1:0);
     Dmsg1(100, ">dird %s", dir->msg);
-    unbash_spaces(dcr->VolCatInfo.VolCatName);
+    unbash_spaces(dcr->getVolCatName());
     bool ok = do_get_volume_info(dcr);
     V(vol_info_mutex);
     return ok;
@@ -330,7 +331,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;
    }
 
@@ -342,7 +343,7 @@ bool dir_update_volume_info(DCR *dcr, bool label, bool update_LastWritten)
 
    /* Lock during Volume update */
    P(vol_info_mutex);
-   Dmsg1(100, "Update cat VolFiles=%d\n", dev->file);
+   Dmsg1(100, "Update cat VolBytes=%lld\n", vol->VolCatBytes);
    /* Just labeled or relabeled the tape */
    if (label) {
       bstrncpy(vol->VolCatStatus, "Append", sizeof(vol->VolCatStatus));
@@ -394,7 +395,7 @@ bool dir_create_jobmedia_record(DCR *dcr, bool zero)
    char ed1[50];
 
    /* If system job, do not update catalog */
-   if (jcr->get_JobType() == JT_SYSTEM) {
+   if (jcr->getJobType() == JT_SYSTEM) {
       return true;
    }
 
@@ -465,6 +466,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();
 }
 
@@ -494,6 +499,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 ( ;; ) {
@@ -510,8 +518,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"),