]> git.sur5r.net Git - bacula/bacula/commitdiff
Make new big-virtual-changer test. Test concurrency
authorKern Sibbald <kern@sibbald.com>
Wed, 12 Aug 2009 20:37:25 +0000 (22:37 +0200)
committerKern Sibbald <kern@sibbald.com>
Wed, 12 Aug 2009 20:37:25 +0000 (22:37 +0200)
bacula/src/stored/acquire.c
bacula/technotes
regress/scripts/bacula-dir-tape.conf.in
regress/scripts/bacula-sd-2disk-drive.conf.in
regress/tests/big-virtual-changer-test [new file with mode: 0755]

index b2bf07e29dc1aac11089cb608930d6cf272ebc5f..51cda83e734837496924ff333752d545f11c8a7a 100644 (file)
@@ -405,6 +405,9 @@ DCR *acquire_device_for_append(DCR *dcr)
       jcr->NumWriteVolumes = 1;
    }
    dev->VolCatInfo.VolCatJobs++;              /* increment number of jobs on vol */
+   Dmsg4(100, "=== nwriters=%d nres=%d vcatjob=%d dev=%s\n", 
+      dev->num_writers, dev->num_reserved(), dev->VolCatInfo.VolCatJobs, 
+      dev->print_name());
    dir_update_volume_info(dcr, false, false); /* send Volume info to Director */
    ok = true;
 
index 83c8c00211c1053da3d401f8ebf4c6d7109ef833..e797bf8efc664409018b862f5e03351c83e6d401 100644 (file)
@@ -3,6 +3,7 @@
 General:
 
 12Aug09
+kes  Make new big-virtual-changer test. Test concurrency.
 ebl  Add .lsfiles, .lsdirs, .update command to interface user with bvfs object
 10Aug09
 kes  Pull Philipp Storz' bacula.spec changes for OpenSuSE build service
index 1c47adde25c5bb3f47890417fce1b5d1f82a564e..df9daba16484a5eaf0501c2b3384dad4adc8b973 100644 (file)
@@ -193,6 +193,7 @@ Storage {
   Device = Virtual                    # must be same as Device in Storage daemon
   Media Type = Disk                   # must be same as MediaType in Storage daemon
   Maximum Concurrent Jobs = 100
+  Autochanger = yes
 }
 
 
index 05abe1b2baf740b7eb7e274ffbd9e20eee6e000b..614301dcfe5e727f71fbd7373c2606840b086f34 100644 (file)
@@ -16,6 +16,7 @@ Storage {                             # definition of myself
   WorkingDirectory = "@working_dir@"
   Pid Directory = "@piddir@"
   Subsys Directory = "@subsysdir@"
+  Maximum Concurrent Jobs = 100
 }
 
 #
@@ -68,11 +69,11 @@ Autochanger {
   Name = Virtual
   Changer Device = /dev/null
   Changer Command =""
-  Device = Virtual-1, Virtual-2
+  Device = vDrive-1, vDrive-2
 }
 
 Device {
-  Name = Virtual-1
+  Name = vDrive-1
   Device Type = File
   Media Type = Disk
   Archive Device = @tmpdir@
@@ -81,11 +82,12 @@ Device {
   Drive Index = 0
   AlwaysOpen = yes;
   RemovableMedia = yes;
+  Maximum Concurrent Jobs = 3
 # Maximum File Size = 1000000
 }
 
 Device {
-  Name = Virtual-2
+  Name = vDrive-2
   Device Type = File
   Media Type = Disk
   Archive Device = @tmpdir@
@@ -94,6 +96,7 @@ Device {
   Drive Index = 1
   AlwaysOpen = yes;
   RemovableMedia = yes;
+  Maximum Concurrent Jobs = 3
 # Maximum File Size = 1000000
 }
 
diff --git a/regress/tests/big-virtual-changer-test b/regress/tests/big-virtual-changer-test
new file mode 100755 (executable)
index 0000000..81dfba2
--- /dev/null
@@ -0,0 +1,138 @@
+#!/bin/sh
+#
+# Run a simple backup of the Bacula build directory. Create three
+#   tapes, each in a different pool, then run two jobs both of which
+#   want the disk that is not loaded.  Note, they both have     
+#   prefers non-mounted tapes.  This should expose bug #801
+#
+#  This test the SD Virtual autochanger feature.  It is a disk based
+#    "autochanger", but does not use any changer script.
+#
+# This script uses the Virtual disk autochanger and two drives
+#
+TestName="virtual-changer-disk"
+JobName="virtualchangerdisk"
+. scripts/functions
+
+scripts/cleanup
+scripts/copy-2disk-drive-confs
+scripts/prepare-disk-changer
+
+CLIENT=2drive2disk
+
+echo "${cwd}/build" >${cwd}/tmp/file-list
+echo "${cwd}/build" >>${cwd}/tmp/file-list
+echo "${cwd}/build" >>${cwd}/tmp/file-list
+echo "${cwd}/build" >>${cwd}/tmp/file-list
+echo "${cwd}/build" >>${cwd}/tmp/file-list
+echo "${cwd}/build" >>${cwd}/tmp/file-list
+#change_jobname Virtual $JobName
+start_test
+
+# Turn off Prefer Mounted Volumes so we use 2 drives
+outf="${cwd}/tmp/sed_tmp"
+echo "s%# Prefer Mounted Volumes%  Prefer Mounted Volumes%g" >${outf}
+cp ${cwd}/bin/bacula-dir.conf ${cwd}/tmp/1
+# Comment the next line out to write everything to one drive
+#  otherwise, it writes the two jobs to different drives
+#sed -f ${outf} ${cwd}/tmp/1 >${cwd}/bin/bacula-dir.conf
+
+# Write out bconsole commands
+cat <<END_OF_DATA >${cwd}/tmp/bconcmds
+@output /dev/null
+messages
+@$out ${cwd}/tmp/log1.out
+setdebug level=100 storage=Virtual
+@#setdebug level=200 client=$CLIENT 
+label storage=Virtual volume=TestVolume001 slot=1 Pool=Default drive=0
+label storage=Virtual volume=TestVolume002 slot=2 Pool=Full    drive=0
+label storage=Virtual volume=TestVolume003 slot=3 Pool=Inc     drive=1
+label storage=Virtual volume=TestVolume004 slot=4 Pool=Default drive=0
+status storage=Virtual
+run job=Virtual level=Full Pool=Default yes
+run job=Virtual level=Full Pool=Default yes
+run job=Virtual level=Full Pool=Default yes
+run job=Virtual level=Full Pool=Default yes
+run job=Virtual level=Full Pool=Default yes
+run job=Virtual level=Full Pool=Default yes
+run job=Virtual level=Full Pool=Default yes
+run job=Virtual level=Full Pool=Default yes
+run job=Virtual level=Full Pool=Default yes
+status storage=Virtual
+status client
+@sleep 1
+status storage=Virtual
+status client
+@sleep 1
+status storage=Virtual
+status client
+@sleep 1
+status storage=Virtual
+status client
+@sleep 1
+status storage=Virtual
+status client
+@sleep 1
+status storage=Virtual
+status client
+@sleep 1
+status storage=Virtual
+status client
+@sleep 1
+status storage=Virtual
+status client
+@sleep 1
+status storage=Virtual
+status client
+@sleep 1
+status storage=Virtual
+status client
+@sleep 1
+status storage=Virtual
+status client
+@sleep 1
+status storage=Virtual
+status client
+@sleep 1
+status storage=Virtual
+status client
+@sleep 5
+status storage=Virtual
+status client
+list volumes
+wait
+list volumes
+list jobs
+status storage=Virtual
+status client
+messages
+quit
+END_OF_DATA
+
+# exit
+
+run_bacula
+cat <<END_OF_DATA >${cwd}/tmp/bconcmds
+@$out /dev/null
+messages
+@# 
+@# now do a restore
+@#
+@$out ${cwd}/tmp/log2.out
+restore where=${cwd}/tmp/bacula-restores select all storage=Virtual done
+yes
+wait
+messages
+@$out
+quit
+END_OF_DATA
+
+run_bconsole
+
+check_for_zombie_jobs storage=Virtual
+stop_bacula
+
+check_two_logs
+check_restore_diff
+
+end_test