]> git.sur5r.net Git - bacula/bacula/commitdiff
ebl update next vol patch
authorEric Bollengier <eric@eb.homelinux.org>
Wed, 29 Oct 2008 14:02:28 +0000 (14:02 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Wed, 29 Oct 2008 14:02:28 +0000 (14:02 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@7938 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/patches/testing/next_vol.patch

index 2717a76094a70c00d952dd6eb87882c4b24b78db..2aa64177637cb14981ff99303d043fd83a938a65 100644 (file)
@@ -1,86 +1,77 @@
-
- This patch fix #1173 about problems during volume selection.
-
- It can be applied to 2.4.3 (not to previous versions) with:
-
-  cd <bacula-source>
-  patch -p0 <2.4.3-next-vol.patch
-  ./configure <your-options>
-  make
-  ...
-  make install
-
 Index: src/dird/next_vol.c
 ===================================================================
---- src/dird/next_vol.c        (revision 7259)
+--- src/dird/next_vol.c        (revision 7929)
 +++ src/dird/next_vol.c        (working copy)
-@@ -94,28 +94,30 @@
+@@ -94,33 +94,31 @@
                  */
                 if (prune) {
                    Dmsg0(150, "Call prune_volumes\n");
--                  prune_volumes(jcr, InChanger, mr);
-+                  ok = prune_volumes(jcr, InChanger, mr);
+-                  ok = prune_volumes(jcr, InChanger, mr);
++                  prune_volumes(jcr, InChanger, mr);
                 }
--               ok = recycle_oldest_purged_volume(jcr, InChanger, mr);
--               if (!ok && create) {
--                  Dmsg4(050, "after prune volumes_vol ok=%d index=%d InChanger=%d Vstat=%s\n",
--                        ok, index, InChanger, mr->VolStatus);
--                  /*
--                   * 5. Try pulling a volume from the Scratch pool
--                   */ 
--                  ok = get_scratch_volume(jcr, InChanger, mr);
--               }
--               /*
--                * If we are using an Autochanger and have not found
--                * a volume, retry looking for any volume. 
--                */
--               if (InChanger) {
--                  InChanger = false;
--                  if (!ok) {
--                     continue;           /* retry again accepting any volume */
--                  }
--               }
--            }
-+             if (!ok) {
-+                ok = recycle_oldest_purged_volume(jcr, InChanger, mr);
-+                if (!ok && create) {
-+                   Dmsg4(050, "after prune volumes_vol ok=%d index=%d InChanger=%d Vstat=%s\n",
-+                         ok, index, InChanger, mr->VolStatus);
-+                   /*
-+                    * 5. Try pulling a volume from the Scratch pool
-+                    */ 
-+                   ok = get_scratch_volume(jcr, InChanger, mr);
-+                   Dmsg4(050, "after get scratch volume ok=%d index=%d InChanger=%d Vstat=%s\n",
-+                         ok, index, InChanger, mr->VolStatus);
-+                }
-+                /*
-+                 * If we are using an Autochanger and have not found
-+                 * a volume, retry looking for any volume. 
-+                 */
-+                if (!ok && InChanger) {
-+                   InChanger = false;
-+                   continue;           /* retry again accepting any volume */
-+                }
-+             }
-+          }
+-             if (!ok) {
+-                ok = recycle_oldest_purged_volume(jcr, InChanger, mr);
+-                if (!ok && create) {
+-                   Dmsg4(050, "after prune volumes_vol ok=%d index=%d InChanger=%d Vstat=%s\n",
+-                         ok, index, InChanger, mr->VolStatus);
+-                   /*
+-                    * 5. Try pulling a volume from the Scratch pool
+-                    */ 
+-                   ok = get_scratch_volume(jcr, InChanger, mr);
+-                   Dmsg4(050, "after get scratch volume ok=%d index=%d InChanger=%d Vstat=%s\n",
+-                         ok, index, InChanger, mr->VolStatus);
+-                }
+-                /*
+-                 * If we are using an Autochanger and have not found
+-                 * a volume, retry looking for any volume. 
+-                 */
+-                if (!ok && InChanger) {
+-                   InChanger = false;
+-                   continue;           /* retry again accepting any volume */
+-                }
+-             }
++
++               ok = recycle_oldest_purged_volume(jcr, InChanger, mr);
++               if (!ok && create) {
++                  Dmsg4(050, "after prune volumes_vol ok=%d index=%d InChanger=%d Vstat=%s\n",
++                        ok, index, InChanger, mr->VolStatus);
++                  /*
++                   * 5. Try pulling a volume from the Scratch pool
++                   */ 
++                  ok = get_scratch_volume(jcr, InChanger, mr);
++                  Dmsg4(050, "after get scratch volume ok=%d index=%d InChanger=%d Vstat=%s\n",
++                        ok, index, InChanger, mr->VolStatus);
++               }
++               /*
++                * If we are using an Autochanger and have not found
++                * a volume, retry looking for any volume. 
++                */
++               if (!ok && InChanger) {
++                  InChanger = false;
++                  continue;           /* retry again accepting any volume */
++               }
+           }
           }
  
+-
+          if (!ok && create) {
+             /*
+              * 6. Try "creating" a new Volume
 Index: src/dird/autoprune.c
 ===================================================================
---- src/dird/autoprune.c       (revision 7895)
+--- src/dird/autoprune.c       (revision 7929)
 +++ src/dird/autoprune.c       (working copy)
-@@ -204,13 +204,6 @@
-             memcpy(mr, &lmr, sizeof(lmr));
-             break;                        /* got a volume */
+@@ -196,6 +196,13 @@
           }
--         /*
--          * We purged something but did not get a volume in the current pool.
--          *  It must be a scratch volume, so try to get it.
--          */
--         if (ok && get_scratch_volume(jcr, InChanger, mr)) {
--            break;                       /* got a volume */
--         }
-          ok = false;                     /* clear OK, in case we fall out */
-       } else {
-          Dmsg2(050, "Nothing pruned MediaId=%d Volume=%s\n", (int)lmr.MediaId, lmr.VolumeName);
+          /*
++          * Continue if this volume is not usable
++          */
++         if (ok && !lmr.Recycle) {
++            ok = false;
++         }
++
++         /*
+           * If purged and not moved to another Pool, 
+           *   then we stop pruning and take this volume.
+           */