]> git.sur5r.net Git - bacula/bacula/commitdiff
Fix moving from one Pool to another
authorKern Sibbald <kern@sibbald.com>
Tue, 8 Jun 2004 08:44:05 +0000 (08:44 +0000)
committerKern Sibbald <kern@sibbald.com>
Tue, 8 Jun 2004 08:44:05 +0000 (08:44 +0000)
git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1388 91ce42f0-d328-0410-95d8-f526ca767f89

bacula/examples/autochangers/locking-mtx-changer
bacula/examples/autochangers/mtx-changer.Adic-Scalar-24
bacula/kernstodo
bacula/src/dird/ua_cmds.c
bacula/src/win32/README.win32

index 451a36de982a651ee4c5842a1b2721bbdfc4adb2..8c43621b92b9d0ad0c5d110c8fcfe536bb5d98fb 100644 (file)
@@ -10,7 +10,7 @@
 #    you will have the following input to this script:
 #
 #  mtx-changer "changer-device" "command" "slot" "archive-device" "drive-index"
-#                 $1              $2       $3        $4               $5
+#                  $1              $2       $3        $4               $5
 #
 #  for example:
 #
@@ -51,8 +51,8 @@ fi
 
 wait_for_drive() {
     while ! mt -f $1 status >/dev/null 2>/dev/null; do
-#      echo "Device $1 - not ready, retrying..."
-       sleep 5
+#       echo "Device $1 - not ready, retrying..."
+        sleep 5
     done
 }
 
@@ -72,9 +72,10 @@ changer_lock() {
 changer_unlock() {
     LOCKPID="`cat $LOCKFILE 2>/dev/null`"
     if [ "$LOCKPID" != $$ ]; then
-       echo "$0: Invalid lock file (${LOCKFILE}) - not owned by us!"
-       exit 1
+        echo "$0: Invalid lock file (${LOCKFILE}) - not owned by us!"
+        exit 1
     fi
+    rm -f $LOCKFILE
 }
 
 
@@ -93,10 +94,10 @@ case $cmd in
      ;;
    *)
      if test $# -lt 3; then
-       echo "usage: mtx-changer ctl-device command slot archive-device drive"
-       echo "  Insufficient number of arguments arguments given."
-       echo "  Mimimum usage is first three arguments ..."
-       exit 1
+        echo "usage: mtx-changer ctl-device command slot archive-device drive"
+        echo "  Insufficient number of arguments arguments given."
+        echo "  Mimimum usage is first three arguments ..."
+        exit 1
      fi
      ;;
 esac
@@ -110,11 +111,11 @@ case $cmd in
 # enable the following line if you need to eject the cartridge
       mt -f $device offline
       if test x$slot = x; then
-        ${MTX} -f $ctl unload
-        rtn=$?
+         ${MTX} -f $ctl unload
+         rtn=$?
       else
-        ${MTX} -f $ctl unload $slot $drive
-        rtn=$?
+         ${MTX} -f $ctl unload $slot $drive
+         rtn=$?
       fi
       ;;
 
index 16577cd6059fb516b8d6cadbb53b27876e07b098..8f0dc9d5803dfa7cd5eddc34344783da3e6e691f 100755 (executable)
 #
 # Bacula interface to mtx autoloader
 #
-#  mtx-changer "changer-device" "command" "slot"
+#  $Id$
 #
-#   Modified for Adic Scalar 24 with one LTO drive by
-#      M. Ludovic Strappozon
+#  If you set in your Device resource
 #
-case "$2" in 
+#  Changer Command = "path-to-this-script/mtx-changer" %c %o %S %a %d
+#    you will have the following input to this script:
+#
+#  mtx-changer "changer-device" "command" "slot" "archive-device" "drive-index"
+#                  $1              $2       $3        $4               $5
+#
+#  for example:
+#
+#  mtx-changer /dev/sg0 load 1 /dev/nst0 0 (on a Linux system)
+#
+#  If you need to an offline, refer to the drive as $4
+#    e.g.   mt -f $4 offline
+#
+#  Many changers need an offline after the unload. Also many
+#   changers need a sleep 60 after the mtx load.
+#
+#  N.B. If you change the script, take care to return either
+#   the mtx exit code or a 0. If the script exits with a non-zero
+#   exit code, Bacula will assume the request failed.
+#
+
+MTX=/usr/sbin/mtx
+
+if test $# -lt 2 ; then
+  echo "usage: mtx-changer ctl-device command slot archive-device drive"
+  echo "  Insufficient number of arguments arguments given."
+  echo "  Mimimum usage is first two arguments ..."
+  exit 1
+fi
+
+# Setup arguments
+ctl=$1
+cmd="$2"
+slot=$3
+device=$4
+# If drive not given, default to 0
+if test $# = 5 ; then
+  drive=$5
+else
+  drive=0
+fi
+
+${MTX} -f $1 inventory
+
+#
+# Check for special cases where only 2 arguments are needed,
+#  all others are a minimum of 3
+case $cmd in
+   loaded)
+     ;;
+   unload)
+     ;;
+   list)
+     ;;
+   slots)
+     ;;
+   *)
+     if test $# -lt 3; then
+        echo "usage: mtx-changer ctl-device command slot archive-device drive"
+        echo "  Insufficient number of arguments arguments given."
+        echo "  Mimimum usage is first three arguments ..."
+        exit 1
+     fi
+     ;;
+esac
+
+
+case $cmd in
    unload)
-#     echo "Doing mtx -f $1 $2"
-      mtx -f $1 $2
+#     echo "Doing mtx -f $ctl unload $slot $drive"
+#
+# enable the following line if you need to eject the cartridge
+#     mt -f $device offline
+      if test x$slot = x; then
+         ${MTX} -f $ctl unload
+      else
+         ${MTX} -f $ctl unload $slot $drive
+      fi
       ;;
 
    load)
-#     echo "Doing mtx -f $1 $2 $3"
-      mtx -f $1 $2 $3
-      sleep 20
+#     echo "Doing mtx -f $ctl load $slot $drive"
+      ${MTX} -f $ctl load $slot $drive
+      rtn=$?
+#
+# Increase the sleep time if you have a slow device
+      sleep 15
+      exit $rtn
       ;;
 
-   list) 
+   list)
 #     echo "Requested list"
-#     mtx -f $1 status | grep " *Storage Element [0-9]*:.*Full" | awk "{print \$3}" | sed "s/:.*$/ /g" | tr -d "[\r\n]"
-      mtx -f $1 status | grep " *Storage Element [0-9]*:.*Full" | awk "{print \$3 \$4}" | sed "s/Full *\(:VolumeTag=\)*//"
+      ${MTX} -f $ctl status | grep " *Storage Element [0-9]*:.*Full" | awk '{print $3 $4}' | sed "s/Full *\(:VolumeTag=\)*//"
       ;;
 
    loaded)
-#     echo "Request loaded"
-      mtx -f $1 status >/tmp/mtx.$$
-      cat /tmp/mtx.$$ | grep "^Data Transfer Element 0:Full" | awk "{print \$7}"
-      cat /tmp/mtx.$$ | grep "^Data Transfer Element 0:Empty" | awk "{print 0}"
+      ${MTX} -f $ctl status >/tmp/mtx.$$
+      rtn=$?
+      cat /tmp/mtx.$$ | grep "^Data Transfer Element $drive:Full" | awk '{print $7}'
+      cat /tmp/mtx.$$ | grep "^Data Transfer Element $drive:Empty" | awk '{print 0}'
       rm -f /tmp/mtx.$$
+      exit $rtn
       ;;
 
    slots)
 #     echo "Request slots"
-      mtx -f $1 status | grep " *Storage Changer" | awk "{print \$5}"
+      ${MTX} -f $ctl status | grep " *Storage Changer" | awk '{print $5}'
       ;;
 esac
index b4b21134380a5c4fd6a03cb604a6a4ace1619fd1..521c9cf2db01969f99aea7ae715d86302bbad2f9 100644 (file)
@@ -42,6 +42,8 @@ For 1.33 Testing/Documentation:
 1.34 Cleanup
 - Add multiple-media-types.txt
 - look at mxt-changer.html
+- Document a get out of jail procedure if everything breaks if you lost/broke
+  the Catalog.
 
 1.34.3 Items:
 - Document dbcheck conf changes.
@@ -51,6 +53,8 @@ For 1.33 Testing/Documentation:
 - Document vendor database repair.
 
 For version 1.35:
+- Implement "label slots=1,2... pool=yyy barcodes"
+- Make ? do a help command (no return needed).
 - Do tape alerts -- see tapealert.txt
 - Implement restore directory.
 - Add All Local Partitions = yes to new style saves.
index bf654b3e670c593d5c4a58952d1d63b3ed47e60a..2baa3438e3d8a62facca795c3cee1639ab0c0315 100644 (file)
@@ -796,6 +796,7 @@ static void update_volrecycle(UAContext *ua, char *val, MEDIA_DBR *mr)
 static void update_volpool(UAContext *ua, char *val, MEDIA_DBR *mr)
 {
    POOL_DBR pr;
+   POOLMEM *query;
 
    memset(&pr, 0, sizeof(pr));
    bstrncpy(pr.Name, val, sizeof(pr.Name));
@@ -804,14 +805,19 @@ static void update_volpool(UAContext *ua, char *val, MEDIA_DBR *mr)
    }
    mr->PoolId = pr.PoolId;           /* set new PoolId */
    /*
-    * Make sure to use db_update... rather than doing this directly,
-    *  so that any Slot is handled correctly. 
     */
-   if (!db_update_media_record(ua->jcr, ua->db, mr)) {
-      bsendmsg(ua, _("Error updating media record Pool: ERR=%s"), db_strerror(ua->db));
-   } else {
+   query = get_pool_memory(PM_MESSAGE);
+   db_lock(ua->db);
+   Mmsg(&query, "UPDATE Media SET PoolId=%d WHERE MediaId=%u",
+      mr->PoolId, mr->MediaId);
+   if (!db_sql_query(ua->db, query, NULL, NULL)) {  
+      bsendmsg(ua, "%s", db_strerror(ua->db));
+   } else {      
       bsendmsg(ua, _("New Pool is: %s\n"), pr.Name);
    }
+   db_make_inchanger_unique(ua->jcr, ua->db, mr);
+   db_unlock(ua->db);
+   free_pool_memory(query);
 }
 
 static void update_volfrompool(UAContext *ua, MEDIA_DBR *mr)
index 23e2098b4b824fb29c500ce76ae19f34f0f3ad7e..599666f5a9aabe73fc00003560123503f90d0d70 100644 (file)
@@ -91,3 +91,6 @@ Instructions if you want to build wx-console :
 
 - Additional information on using the free Micrsosoft C++ see
   http://sapdb.2scale.net/moin.cgi/MS_20C_2b_2b_20Toolkit
+
+NOTE! I (Kern) cannot build wxWindows with the Makefile -- I had to use                
+VC Studio directly to do so following their instructions.