]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/askdir.c
Convert restore object to use STREAM_RESTORE_OBJECT; cleaner code
[bacula/bacula] / bacula / src / stored / askdir.c
index b85d78e6ebbba8b90cac1caebc0f4eb8037b7053..5326e308a47ad4e5a32942740e7cb57ec33fd7b4 100644 (file)
@@ -1,7 +1,7 @@
 /*
    Bacula® - The Network Backup Solution
 
-   Copyright (C) 2000-2009 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 */
@@ -74,7 +73,7 @@ static char Device_update[] = "DevUpd Job=%s device=%s "
    "changer_name=%s media_type=%s volume_name=%s\n";
 
 
-/* Send update information about a device to Director */
+/** Send update information about a device to Director */
 bool dir_update_device(JCR *jcr, DEVICE *dev)
 {
    BSOCK *dir = jcr->dir_bsock;
@@ -143,7 +142,7 @@ bool dir_update_changer(JCR *jcr, AUTOCHANGER *changer)
 #endif
 
 
-/*
+/**
  * Send current JobStatus to Director
  */
 bool dir_send_job_status(JCR *jcr)
@@ -151,7 +150,7 @@ bool dir_send_job_status(JCR *jcr)
    return jcr->dir_bsock->fsend(Job_status, jcr->Job, jcr->JobStatus);
 }
 
-/*
+/**
  * Common routine for:
  *   dir_get_volume_info()
  * and
@@ -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 */
@@ -207,7 +208,7 @@ static bool do_get_volume_info(DCR *dcr)
 }
 
 
-/*
+/**
  * Get Volume info for a specific volume from the Director's Database
  *
  * Returns: true  on success   (Director guarantees that Pool and MediaType
@@ -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;
@@ -236,7 +237,7 @@ bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw writing)
 
 
 
-/*
+/**
  * Get info on the next appendable volume in the Director's database
  *
  * Returns: true  on success dcr->VolumeName is volume
@@ -313,7 +314,7 @@ get_out:
 }
 
 
-/*
+/**
  * After writing a Volume, send the updated statistics
  * back to the director. The information comes from the
  * dev record.
@@ -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));
@@ -384,7 +385,7 @@ bail_out:
    return ok;
 }
 
-/*
+/**
  * After writing a Volume, create the JobMedia record.
  */
 bool dir_create_jobmedia_record(DCR *dcr, bool zero)
@@ -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;
    }
 
@@ -439,8 +440,21 @@ bool dir_create_jobmedia_record(DCR *dcr, bool zero)
 }
 
 
-/*
+/**
  * Update File Attribute data
+ * We do the following:
+ *  1. expand the bsock buffer to be large enough 
+ *  2. Write a "header" into the buffer with serialized data
+ *    VolSessionId
+ *    VolSeesionTime
+ *    FileIndex
+ *    Stream
+ *    data length that follows
+ *    start of raw byte data from the Device record.
+ * Note, this is primarily for Attribute data, but can
+ *   also handle any device record. The Director must know
+ *   the raw byte data format that is defined for each Stream.
+ * Now Restore Objects pass through here STREAM_RESTORE_OBJECT
  */
 bool dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec)
 {
@@ -473,7 +487,7 @@ bool dir_update_file_attributes(DCR *dcr, DEV_RECORD *rec)
 }
 
 
-/*
+/**
  *   Request the sysop to create an appendable volume
  *
  *   Entered with device blocked.
@@ -517,8 +531,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"),
@@ -567,7 +581,7 @@ get_out:
    return true;
 }
 
-/*
+/**
  *   Request to mount specific Volume
  *
  *   Entered with device blocked and dcr->VolumeName is desired