]> git.sur5r.net Git - bacula/bacula/commitdiff
kes Simplify search of autochanger for in-use Volume.
authorKern Sibbald <kern@sibbald.com>
Tue, 19 Jun 2007 21:48:53 +0000 (21:48 +0000)
committerKern Sibbald <kern@sibbald.com>
Tue, 19 Jun 2007 21:48:53 +0000 (21:48 +0000)
kes  Fix exit condition of check for in-use volume.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@5046 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/src/stored/askdir.c
bacula/src/stored/reserve.c
bacula/technotes-2.1

index 0966d9c19d404cbdfea34763bdb2a508766ea3cb..f6fd066898c59fcd93fd5c8695d61ae7e53f8be2 100644 (file)
@@ -179,7 +179,7 @@ static bool do_get_volume_info(DCR *dcr)
        return false;
     }
     memset(&vol, 0, sizeof(vol));
-    Dmsg1(100, "<dird %s", dir->msg);
+    Dmsg1(100, "<dird %s\n", dir->msg);
     n = sscanf(dir->msg, OK_media, vol.VolCatName,
                &vol.VolCatJobs, &vol.VolCatFiles,
                &vol.VolCatBlocks, &vol.VolCatBytes,
@@ -191,7 +191,7 @@ static bool do_get_volume_info(DCR *dcr)
                &vol.EndFile, &vol.EndBlock, &vol.VolCatParts,
                &vol.LabelType, &vol.VolMediaId);
     if (n != 22) {
-       Dmsg2(100, "Bad response from Dir fields=%d: %s", n, dir->msg);
+       Dmsg3(100, "Bad response from Dir fields=%d, len=%d: %s", n, dir->msglen, dir->msg);
        Mmsg(jcr->errmsg, _("Error getting Volume info: %s"), dir->msg);
        return false;
     }
@@ -226,7 +226,7 @@ bool dir_get_volume_info(DCR *dcr, enum get_vol_info_rw writing)
     bash_spaces(dcr->VolCatInfo.VolCatName);
     dir->fsend(Get_Vol_Info, jcr->Job, dcr->VolCatInfo.VolCatName,
        writing==GET_VOL_INFO_FOR_WRITE?1:0);
-    Dmsg1(100, ">dird: %s", dir->msg);
+    Dmsg1(100, ">dird: %s\n", dir->msg);
     unbash_spaces(dcr->VolCatInfo.VolCatName);
     bool ok = do_get_volume_info(dcr);
     V(vol_info_mutex);
index 091668f3414bda0b1b81c4100cd67f6046a03ab2..787ad34316049226b50b855f1ebacde816b197bf 100644 (file)
@@ -814,30 +814,16 @@ void release_msgs(JCR *jcr)
  */
 static bool is_vol_in_autochanger(RCTX &rctx, VOLRES *vol)
 {
-   AUTOCHANGER *changer;
-
-   return false;
+   AUTOCHANGER *changer = vol->dev->device->changer_res;
 
-   Dmsg2(dbglvl, "jid=%u search changers for %s\n", (int)rctx.jcr->JobId, 
-         rctx.device_name);
-   foreach_res(changer, R_AUTOCHANGER) {
-      Dmsg3(dbglvl, "jid=%u Try match changer res=%s device=%s\n", 
-            (int)rctx.jcr->JobId, changer->hdr.name, rctx.device_name);
-      /* Find resource, and make sure we were able to open it */
-      if (fnmatch(rctx.device_name, changer->hdr.name, 0) == 0) {
-         DEVRES *device;
-         /* Try each device in this AutoChanger */
-         foreach_alist(device, changer->device) {
-            if (device->dev == vol->dev) {
-               Dmsg2(dbglvl, "jid=%u Found changer device %s\n",
-                     (int)rctx.jcr->JobId, device->hdr.name);
-               return true;
-            }
-            Dmsg2(dbglvl, "jid=%u Incorrect changer device %s\n", 
-                  (int)rctx.jcr->JobId, device->hdr.name);
-         }
-      }
-   }
+   /* Find resource, and make sure we were able to open it */
+   if (fnmatch(rctx.device_name, changer->hdr.name, 0) == 0) {
+      Dmsg2(dbglvl, "jid=%u Found changer device %s\n",
+                     (int)rctx.jcr->JobId, vol->dev->device->hdr.name);
+      return true;
+   }  
+   Dmsg2(dbglvl, "jid=%u Incorrect changer device %s\n", 
+                  (int)rctx.jcr->JobId, changer->hdr.name);
    return false;
 }
 
@@ -913,7 +899,7 @@ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx)
             continue;
          }
 
-         Dmsg2(dbglvl, "jid=%u vol=%s\n", (int)rctx.jcr->JobId, vol->vol_name);
+         Dmsg2(dbglvl, "jid=%u vol=%s OK for this job\n", (int)rctx.jcr->JobId, vol->vol_name);
          foreach_alist(store, dirstore) {
             int stat;
             rctx.store = store;
@@ -958,6 +944,9 @@ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx)
                break;
             }
          }
+         if (ok) {
+            break;
+         }
       } /* end for loop over reserved volumes */
 
       lock_volumes();
@@ -969,7 +958,7 @@ bool find_suitable_device_for_job(JCR *jcr, RCTX &rctx)
       unlock_volumes();
    }
    if (ok) {
-      Dmsg2(dbglvl, "jid=%u got vol %s in reserved volums list\n", (int)rctx.jcr->JobId,
+      Dmsg2(dbglvl, "jid=%u got vol %s from in-use vols list\n", (int)rctx.jcr->JobId,
             rctx.VolumeName);
       return true;
    }
index 84df401a5d7acedd66f002e73d2b875e171770b5..79e6879094e16f1906468f5e61ab5595b98ef5fd 100644 (file)
@@ -2,6 +2,8 @@
 
 General:
 19Jun07
+kes  Simplify search of autochanger for in-use Volume.
+kes  Fix exit condition of check for in-use volume.
 kes  Remove inappropriate my_postgresql_free_result() in db_close()
      routine.
 kes  Fix bad return in FD when encryption signature not found.