]> git.sur5r.net Git - bacula/bacula/commitdiff
ebl Fix #1175 About update slots that don't reset InChanger flag when
authorEric Bollengier <eric@eb.homelinux.org>
Mon, 27 Oct 2008 19:24:23 +0000 (19:24 +0000)
committerEric Bollengier <eric@eb.homelinux.org>
Mon, 27 Oct 2008 19:24:23 +0000 (19:24 +0000)
     slot is empty.

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

bacula/src/cats/sql_create.c
bacula/src/cats/sql_update.c
bacula/technotes-2.5

index d3ba6f89b4a59d3cfc55e690a5af29aa76c93b2e..998ccc6bf2ff04315ce59f07e8dd8eace9d902f1 100644 (file)
@@ -457,14 +457,13 @@ db_create_media_record(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr)
               "WHERE MediaId=%d", dt, mr->MediaId);
          stat = UPDATE_DB(jcr, mdb, mdb->cmd);
       }
+      /*
+       * Make sure that if InChanger is non-zero any other identical slot
+       *   has InChanger zero.
+       */
+      db_make_inchanger_unique(jcr, mdb, mr);
    }
 
-   /*
-    * Make sure that if InChanger is non-zero any other identical slot
-    *   has InChanger zero.
-    */
-   db_make_inchanger_unique(jcr, mdb, mr);
-
    db_unlock(mdb);
    return stat;
 }
index 521a9cc8adb8d071378c833650664889add51b17..2b4ef29f594bcbeca87de70a94649c44795c835b 100644 (file)
@@ -473,14 +473,28 @@ void
 db_make_inchanger_unique(JCR *jcr, B_DB *mdb, MEDIA_DBR *mr)
 {
    char ed1[50], ed2[50];
-   if (mr->InChanger != 0 && mr->Slot != 0 && mr->StorageId != 0 &&
-       mr->MediaId != 0) {
-      Mmsg(mdb->cmd, "UPDATE Media SET InChanger=0 WHERE "
-           "Slot=%d AND StorageId=%s AND MediaId!=%s",
-            mr->Slot, 
-            edit_int64(mr->StorageId, ed1), edit_int64(mr->MediaId, ed2));
-      Dmsg1(400, "%s\n", mdb->cmd);
-      UPDATE_DB(jcr, mdb, mdb->cmd);
+   if (mr->InChanger != 0 && mr->Slot != 0 && mr->StorageId != 0) {
+
+       if (mr->MediaId != 0) {
+          Mmsg(mdb->cmd, "UPDATE Media SET InChanger=0 WHERE "
+               "Slot=%d AND StorageId=%s AND MediaId!=%s",
+               mr->Slot, 
+               edit_int64(mr->StorageId, ed1), edit_int64(mr->MediaId, ed2));
+
+       } else if (*mr->VolumeName) {
+          Mmsg(mdb->cmd, "UPDATE Media SET InChanger=0 WHERE "
+               "Slot=%d AND StorageId=%s AND VolumeName!='%s'",
+               mr->Slot, 
+               edit_int64(mr->StorageId, ed1), mr->VolumeName);
+
+       } else {  /* used by ua_label to reset all volume with this slot */
+          Mmsg(mdb->cmd, "UPDATE Media SET InChanger=0 WHERE "
+               "Slot=%d AND StorageId=%s",
+               mr->Slot, 
+               edit_int64(mr->StorageId, ed1), mr->VolumeName);          
+       }
+       Dmsg1(100, "%s\n", mdb->cmd);
+       UPDATE_DB(jcr, mdb, mdb->cmd);
    }
 }
 
index 7f16dbf91994098f5afd86b432c2dd493763cd09..40ebfd943f74ad8d7a10175dd7ca213cfc28e8e0 100644 (file)
@@ -11,6 +11,8 @@ mixed priorities
 
 General:
 27Oct08
+ebl  Fix #1175 About update slots that don't reset InChanger flag when 
+     slot is empty.
 ebl  Fix #1173 where prune_volume() returns a volume from the scratch.
 25Oct08
 kes  Remove jobq.c constraint that read and write SD must be