]> git.sur5r.net Git - bacula/bacula/blobdiff - bacula/src/stored/askdir.c
Add V: to bextract and bscan
[bacula/bacula] / bacula / src / stored / askdir.c
index c73dc580c5e5754a6d5335eb896322cceae9dbde..a48dc5de7cdc43b5cfb49b068fa354f472357a44 100644 (file)
@@ -111,14 +111,15 @@ static int do_request_volume_info(JCR *jcr)
  *
  *         Volume information returned in jcr
  */
-int dir_get_volume_info(JCR *jcr, int writing)
+int dir_get_volume_info(JCR *jcr, enum get_vol_info_rw writing)
 {
     BSOCK *dir = jcr->dir_bsock;
 
-    strcpy(jcr->VolCatInfo.VolCatName, jcr->VolumeName);
+    bstrncpy(jcr->VolCatInfo.VolCatName, jcr->VolumeName, sizeof(jcr->VolCatInfo.VolCatName));
     Dmsg1(200, "dir_get_volume_info=%s\n", jcr->VolCatInfo.VolCatName);
     bash_spaces(jcr->VolCatInfo.VolCatName);
-    bnet_fsend(dir, Get_Vol_Info, jcr->Job, jcr->VolCatInfo.VolCatName, writing);
+    bnet_fsend(dir, Get_Vol_Info, jcr->Job, jcr->VolCatInfo.VolCatName, 
+       writing==GET_VOL_INFO_FOR_WRITE?1:0);
     return do_request_volume_info(jcr);
 }
 
@@ -188,8 +189,13 @@ int dir_create_jobmedia_record(JCR *jcr)
 {
    BSOCK *dir = jcr->dir_bsock;
 
+   if (!jcr->WroteVol) {
+      return 1;                      /* nothing written to tape */
+   }
+
+   jcr->WroteVol = false;
    bnet_fsend(dir, Create_job_media, jcr->Job, 
-      jcr->VolFirstFile, jcr->JobFiles,
+      jcr->VolFirstIndex, jcr->VolLastIndex,
       jcr->StartFile, jcr->EndFile,
       jcr->StartBlock, jcr->EndBlock);
    Dmsg1(100, "create_jobmedia(): %s", dir->msg);
@@ -267,7 +273,7 @@ int dir_ask_sysop_to_mount_next_volume(JCR *jcr, DEVICE *dev)
       if (job_canceled(jcr)) {
          Mmsg(&dev->errmsg, _("Job %s canceled while waiting for mount on Storage Device \"%s\".\n"), 
              jcr->Job, jcr->dev_name);
-         Jmsg(jcr, M_FATAL, 0, "%s", dev->errmsg);
+         Jmsg(jcr, M_INFO, 0, "%s", dev->errmsg);
         return 0;
       }
       if (dir_find_next_appendable_volume(jcr)) {    /* get suggested volume */
@@ -316,7 +322,7 @@ Please use the \"label\"  command to create a new Volume for:\n\
             Mmsg(&dev->errmsg, _("Gave up waiting to mount Storage Device \"%s\" for Job %s\n"), 
                 jcr->dev_name, jcr->Job);
             Jmsg(jcr, M_FATAL, 0, "%s", dev->errmsg);
-            Dmsg1(190, "Gave up waiting on device %s\n", dev->dev_name);
+            Dmsg1(190, "Gave up waiting on device %s\n", dev_name(dev));
            return 0;                 /* exceeded maximum waits */
         }
         continue;
@@ -331,14 +337,14 @@ Please use the \"label\"  command to create a new Volume for:\n\
          Jmsg(jcr, M_WARNING, 0, _("pthread error in mount_next_volume stat=%d ERR=%s\n"), stat,
            strerror(stat));
       }
-      Dmsg1(190, "Someone woke me for device %s\n", dev->dev_name);
+      Dmsg1(190, "Someone woke me for device %s\n", dev_name(dev));
 
       /* Restart wait counters */
       wait_sec = min_wait;
       num_wait = 0;
       /* If no VolumeName, and cannot get one, try again */
       if (jcr->VolumeName[0] == 0 && 
-         !dir_find_next_appendable_volume(jcr)) {
+         !dir_find_next_appendable_volume(jcr) && !job_canceled(jcr)) {
         Jmsg(jcr, M_MOUNT, 0, _(
 "Someone woke me up, but I cannot find any appendable\n\
 volumes for Job=%s.\n"), jcr->Job);
@@ -408,7 +414,7 @@ int dir_ask_sysop_to_mount_volume(JCR *jcr, DEVICE *dev)
             Mmsg(&dev->errmsg, _("Gave up waiting to mount Storage Device \"%s\" for Job %s\n"), 
                 jcr->dev_name, jcr->Job);
             Jmsg(jcr, M_FATAL, 0, "%s", dev->errmsg);
-            Dmsg1(190, "Gave up waiting on device %s\n", dev->dev_name);
+            Dmsg1(190, "Gave up waiting on device %s\n", dev_name(dev));
            return 0;                 /* exceeded maximum waits */
         }
         continue;
@@ -423,7 +429,7 @@ int dir_ask_sysop_to_mount_volume(JCR *jcr, DEVICE *dev)
          Jmsg(jcr, M_ERROR, 0, _("pthread error in mount_next_volume stat=%d ERR=%s\n"), stat,
            strerror(stat));
       }
-      Dmsg1(190, "Someone woke me for device %s\n", dev->dev_name);
+      Dmsg1(190, "Someone woke me for device %s\n", dev_name(dev));
 
       /* Restart wait counters */
       wait_sec = min_wait;
@@ -471,7 +477,7 @@ static int wait_for_sysop(JCR *jcr, DEVICE *dev, int wait_sec)
    for ( ; !job_canceled(jcr); ) {
       time_t now;
 
-      Dmsg3(100, "I'm going to sleep on device %s. HB=%d wait=%d\n", dev->dev_name,
+      Dmsg3(100, "I'm going to sleep on device %s. HB=%d wait=%d\n", dev_name(dev),
         (int)me->heartbeat_interval, wait_sec);
       stat = pthread_cond_timedwait(&dev->wait_next_vol, &dev->mutex, &timeout);
       Dmsg1(100, "Wokeup from sleep on device stat=%d\n", stat);