From: Eric Bollengier Date: Fri, 22 Apr 2022 16:20:02 +0000 (+0200) Subject: regress: Add test to reproduce migration/copy issue with StorageGroup X-Git-Tag: Beta-15.0.0~592 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c98bd0afeadd57b3c8a580d087211c717d11d9b3;p=thirdparty%2Fbacula.git regress: Add test to reproduce migration/copy issue with StorageGroup --- diff --git a/regress/scripts/bacula-sd-2disk.conf.in b/regress/scripts/bacula-sd-2disk.conf.in index 9c09a0ce3..0021a3bf0 100644 --- a/regress/scripts/bacula-sd-2disk.conf.in +++ b/regress/scripts/bacula-sd-2disk.conf.in @@ -100,7 +100,7 @@ Device { Device { Name = FileStorage - mediatype = FileMedia + Media Type = FileMedia Archive Device = @tmpdir@ LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes; diff --git a/regress/scripts/bacula-sd-4disk.conf.in b/regress/scripts/bacula-sd-4disk.conf.in index aeddea466..7df4077c8 100644 --- a/regress/scripts/bacula-sd-4disk.conf.in +++ b/regress/scripts/bacula-sd-4disk.conf.in @@ -153,7 +153,7 @@ Device { Device { Name = FileStorage - mediatype = FileMedia + Media Type = FileMedia Archive Device = @tmpdir@ LabelMedia = yes; # lets Bacula label unlabeled media Random Access = Yes; diff --git a/regress/tests/multi-storage-copy-test b/regress/tests/multi-storage-copy-test new file mode 100755 index 000000000..4b136d730 --- /dev/null +++ b/regress/tests/multi-storage-copy-test @@ -0,0 +1,181 @@ +#!/bin/sh +# +# Copyright (C) 2000-2021 Kern Sibbald +# Copyright (C) 2021-2022 Bacula Systems SA +# License: BSD 2-Clause; see file LICENSE-FOSS +# + +# +# This script uses the virtual disk autochanger +# We test the copy/migration with multiple +# storage daemon and the storage group feature +# +TestName="multi-storage-copy-test" +JobName=backup +. scripts/functions + +scripts/cleanup +scripts/copy-2disk-confs +scripts/prepare-disk-changer + +# create a new bacula-sd.conf +perl -ne ' +if (/SDPort = /) { $_ =~ s/(\d+)/1$1/;} +if (/Name = .+?-sd/) { $_ =~ s/-sd/-sd2/;} +if (/Media Type = (.+)/) { $_ =~ s/$1/X$1/;} +if (/WorkingDirectory/) { $_ =~ s/"$/2"/; } +print; +' $conf/bacula-sd.conf > $conf/bacula-sd2.conf + +mkdir -p ${working}2 + +sed 's/bacula-sd.conf/bacula-sd2.conf/' $scripts/bacula-ctl-sd \ + > $tmp/bacula-ctl-sd +chmod +x $tmp/bacula-ctl-sd + +disable_plugins + +echo "${cwd}/build/po" >${cwd}/tmp/file-list + +change_jobname $JobName +start_test + +cat <> $conf/bacula-dir.conf +Job { + Name = copy + Type = Copy + Client = "$HOST-fd" + Fileset = "Full Set" + MaximumSpawnedJobs = 300 + Messages = Standard + NextPool = "Special" + Pool = "Default" + SelectionType = "PoolUncopiedJobs" + Storage = "tape", "File" +} +EOF + +# Make sure that we don't have the same mediatype on the two SD +# The first call will set xxx for everything, then we revert to the one we want +$bperl -e 'add_attribute("$conf/bacula-sd2.conf", "Media Type", "xxx", "Device")' +$bperl -e 'add_attribute("$conf/bacula-sd2.conf", "Media Type", "tape", "Device", "Drive-0")' +$bperl -e 'add_attribute("$conf/bacula-sd2.conf", "Media Type", "tape", "Device", "Drive-1")' +$bperl -e 'add_attribute("$conf/bacula-sd2.conf", "LabelMedia", "yes", "Device")' + +#$bperl -e 'add_attribute("$conf/bacula-sd.conf", "Media Type", "Disk", "Device", "Virtual-1")' +#$bperl -e 'add_attribute("$conf/bacula-sd.conf", "Media Type", "Disk", "Device", "Virtual-2")' +#$bperl -e 'add_attribute("$conf/bacula-sd.conf", "Media Type", "FileMedia", "Device", "FileStorage")' +$bperl -e 'add_attribute("$conf/bacula-sd.conf", "LabelMedia", "yes", "Device")' + +$bperl -e 'add_attribute("$conf/bacula-dir.conf", "LabelFormat", "Vol", "Pool")' +$bperl -e 'add_attribute("$conf/bacula-dir.conf", "SDPort", $BASEPORT+10002, "Storage", "tape")' +$bperl -e 'add_attribute("$conf/bacula-dir.conf", "Storage", "tape,File", "Job")' +$bperl -e 'add_attribute("$conf/bacula-dir.conf", "Storage", "Virtual", "Pool", "Special")' +$bperl -e 'add_attribute("$conf/bacula-dir.conf", "NextPool", "Special", "Pool", "Default")' + +# Write out bconsole commands +cat <${cwd}/tmp/bconcmds +@output /dev/null +messages +@$out ${cwd}/tmp/log1.out +run job=$JobName storage=File yes +wait +messages +quit +END_OF_DATA + +$tmp/bacula-ctl-sd start >/dev/null 2>&1 +run_bacula + +echo "ficheriro1.txt" >${cwd}/build/po/ficheriro1.txt +echo "ficheriro2.txt" >${cwd}/build/po/ficheriro2.txt + + +cat <${cwd}/tmp/bconcmds +@output /dev/null +messages +@$out ${cwd}/tmp/log3.out +@# Force Incremental on the second Volume +run level=Incremental storage=tape job=$JobName yes +wait +messages +@# +@# now do a restore +@# +@$out ${cwd}/tmp/log2.out +restore where=${cwd}/tmp/bacula-restores select all done yes +wait +messages +@$out ${cwd}/tmp/log4.out +run job=copy jobid=1 yes +wait +messages +run job=copy jobid=2 yes +wait +messages +run job=copy jobid=1 storage=Virtual yes +wait +messages +@$out ${cwd}/tmp/log7.out +restore where=${cwd}/tmp/bacula-restores2 jobid=5,7 all done yes +wait +messages +restore where=${cwd}/tmp/bacula-restores3 jobid=9,7 all done yes +wait +messages +quit +END_OF_DATA + +run_bconsole + +$bperl -e 'add_attribute("$conf/bacula-dir.conf", "Storage", "File2,File3", "Job", "copy")' + +cat < ${cwd}/tmp/bconcmds +@$out ${cwd}/tmp/log9.out +reload +run job=copy jobid=1 comment="Should fail because of the drives available" yes +wait +messages +quit +EOF + +run_bconsole + +check_for_zombie_jobs storage=File +check_for_zombie_jobs storage=tape +stop_bacula +$tmp/bacula-ctl-sd stop >/dev/null 2>&1 + +check_two_logs + +$rscripts/diff.pl -s ${cwd}/tmp/bacula-restores -d ${cwd}/tmp/bacula-restores2 +if [ $? -ne 0 ]; then + print_debug "ERROR: Second restore in error" + rstat=1 +fi + +$rscripts/diff.pl -s ${cwd}/tmp/bacula-restores -d ${cwd}/tmp/bacula-restores3 +if [ $? -ne 0 ]; then + print_debug "ERROR: Third restore in error" + rstat=1 +fi + +grep "Fatal error" $tmp/log9.out > /dev/null +if [ $? -ne 0 ]; then + print_debug "ERROR: The copy job in $tmp/log9.out should be in error" + estat=1 +fi + +nb=`grep "Restore OK" $tmp/log7.out | wc -l` +if [ "$nb" -ne 2 ]; then + print_debug "ERROR: Should find 2 restore job OK in $tmp/log7.out" + rstat=1 +fi + +nb=`grep "Copying OK" $tmp/log4.out | wc -l` +if [ "$nb" -ne 3 ]; then + print_debug "ERROR: Should find 3 copy job OK in $tmp/log4.out" + rstat=1 +fi + +end_test