From f31a03da232af405b393e766514f297db236effb Mon Sep 17 00:00:00 2001 From: Kern Sibbald Date: Wed, 12 Aug 2009 22:37:25 +0200 Subject: [PATCH] Make new big-virtual-changer test. Test concurrency --- bacula/src/stored/acquire.c | 3 + bacula/technotes | 1 + regress/scripts/bacula-dir-tape.conf.in | 1 + regress/scripts/bacula-sd-2disk-drive.conf.in | 9 +- regress/tests/big-virtual-changer-test | 138 ++++++++++++++++++ 5 files changed, 149 insertions(+), 3 deletions(-) create mode 100755 regress/tests/big-virtual-changer-test diff --git a/bacula/src/stored/acquire.c b/bacula/src/stored/acquire.c index b2bf07e29d..51cda83e73 100644 --- a/bacula/src/stored/acquire.c +++ b/bacula/src/stored/acquire.c @@ -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; diff --git a/bacula/technotes b/bacula/technotes index 83c8c00211..e797bf8efc 100644 --- a/bacula/technotes +++ b/bacula/technotes @@ -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 diff --git a/regress/scripts/bacula-dir-tape.conf.in b/regress/scripts/bacula-dir-tape.conf.in index 1c47adde25..df9daba164 100644 --- a/regress/scripts/bacula-dir-tape.conf.in +++ b/regress/scripts/bacula-dir-tape.conf.in @@ -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 } diff --git a/regress/scripts/bacula-sd-2disk-drive.conf.in b/regress/scripts/bacula-sd-2disk-drive.conf.in index 05abe1b2ba..614301dcfe 100644 --- a/regress/scripts/bacula-sd-2disk-drive.conf.in +++ b/regress/scripts/bacula-sd-2disk-drive.conf.in @@ -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 index 0000000000..81dfba2929 --- /dev/null +++ b/regress/tests/big-virtual-changer-test @@ -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 <${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 <${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 -- 2.39.5