1#!/bin/sh 2# 3# Test for a bug that causes massively parallel virtual full jobs to 4# deadlock. First create a lot of backups, then run 5# virtual fulls on them. 6# 7# FIXME: not working 8# 9TestName="virtualfull-extreme-concurrency-bug-test" 10. scripts/functions 11 12# Setup conf files 13scripts/cleanup 14scripts/copy-test-confs 15cp scripts/virtualfull-extreme-bacula-dir.conf ${conf}/bareos-dir.conf 16#cp scripts/migrate-bacula-sd.conf bin/bacula-sd.conf 17 18# we have 20 distinct jobs. Each of those is run once at full level, 19# then four times incremental, each time adding data so we end up with 20# many used volumes. 21# We should have jobs where several virtual fulls compete for volumes. 22 23 24# Directory to backup. 25# This directory will be created by setup_data(). 26BackupDirectory="${tmp}/data" 27 28# Use a tgz to setup data to be backuped. 29# Data will be placed at "${tmp}/data/". 30setup_data data/small.tgz 31 32# the default fileset FS_TESTJOB backups all file and directories defined in "${tmp}/file-list". 33echo "${BackupDirectory}" >${tmp}/file-list 34 35 36start_test 37 38cat <<END_OF_DATA >${cwd}/tmp/bconcmds 39@output /dev/null 40messages 41@$out ${cwd}/tmp/log1.out 42@# No prelabeled volumes needed since they are automatically created 43@#label storage=File slot=0 drive=0 Pool=Hot1 volume=Vol1 44@#list volumes 45END_OF_DATA 46 47# Start Bacula and do label 48run_bareos 49 50cat <<END_OF_DATA >${cwd}/tmp/bconcmds 51@output /dev/null 52messages 53@$out ${cwd}/tmp/log0.out 54run job=HotV01 level=Full yes 55run job=HotV02 level=Full yes 56run job=HotV03 level=Full yes 57run job=HotV04 level=Full yes 58run job=HotV05 level=Full yes 59run job=HotV06 level=Full yes 60run job=HotV07 level=Full yes 61run job=HotV08 level=Full yes 62run job=HotV09 level=Full yes 63run job=HotV10 level=Full yes 64run job=HotV11 level=Full yes 65run job=HotV12 level=Full yes 66run job=HotV13 level=Full yes 67run job=HotV14 level=Full yes 68run job=HotV15 level=Full yes 69run job=HotV16 level=Full yes 70run job=HotV17 level=Full yes 71run job=HotV18 level=Full yes 72run job=HotV19 level=Full yes 73run job=HotV20 level=Full yes 74wait 75list volumes 76messages 77END_OF_DATA 78 79run_bconsole 80 81cat <<END_OF_DATA >${cwd}/tmp/bconcmds 82@output /dev/null 83messages 84END_OF_DATA 85 86# add more files to backup source, so following incrementals 87# have something to back up 88for a in `seq 11 14`; do 89 change_files 90 #echo ">>> adding ${a} to backup" 91 date > ${BackupDirectory}/run-01-$a.txt 92 #echo "now $(ls ${BackUpDirectory}|wc -l) files to back up" 93 94 cat <<END_OF_DATA >${cwd}/tmp/bconcmds 95@$out ${cwd}/tmp/log1.out a 96time 97run job=HotV01 level=Incremental yes 98run job=HotV02 level=Incremental yes 99run job=HotV03 level=Incremental yes 100run job=HotV04 level=Incremental yes 101run job=HotV05 level=Incremental yes 102run job=HotV06 level=Incremental yes 103run job=HotV07 level=Incremental yes 104run job=HotV08 level=Incremental yes 105run job=HotV09 level=Incremental yes 106run job=HotV10 level=Incremental yes 107run job=HotV11 level=Incremental yes 108run job=HotV12 level=Incremental yes 109run job=HotV13 level=Incremental yes 110run job=HotV14 level=Incremental yes 111run job=HotV15 level=Incremental yes 112run job=HotV16 level=Incremental yes 113run job=HotV17 level=Incremental yes 114run job=HotV18 level=Incremental yes 115run job=HotV19 level=Incremental yes 116run job=HotV20 level=Incremental yes 117wait 118list volumes 119messages 120END_OF_DATA 121# Run Backup Jobs 122 run_bconsole 123done 124 125# now do the final virtual full levels. 126#echo ">>>> Now the 1st VFull" 127 128cat <<END_OF_DATA >${cwd}/tmp/bconcmds 129@output /dev/null 130messages 131@$out ${cwd}/tmp/log1.out a 132@#setdebug level=100 storage 133run job=HotV01 level=VirtualFull yes 134run job=HotV02 level=VirtualFull yes 135run job=HotV03 level=VirtualFull yes 136run job=HotV04 level=VirtualFull yes 137run job=HotV05 level=VirtualFull yes 138run job=HotV06 level=VirtualFull yes 139run job=HotV07 level=VirtualFull yes 140run job=HotV08 level=VirtualFull yes 141run job=HotV09 level=VirtualFull yes 142run job=HotV10 level=VirtualFull yes 143run job=HotV11 level=VirtualFull yes 144run job=HotV12 level=VirtualFull yes 145run job=HotV13 level=VirtualFull yes 146run job=HotV14 level=VirtualFull yes 147run job=HotV15 level=VirtualFull yes 148run job=HotV16 level=VirtualFull yes 149run job=HotV17 level=VirtualFull yes 150run job=HotV18 level=VirtualFull yes 151run job=HotV19 level=VirtualFull yes 152run job=HotV20 level=VirtualFull yes 153wait 154sql 155select pool.name as poolname,volumename,volstatus,volbytes,voljobs,lastwritten from Pool,Media where Pool.PoolId=Media.MediaId order by poolname,volumename; 156 157list jobs 158messages 159END_OF_DATA 160 161# Run Virtual Full Jobs 162run_bconsole 163 164# add more files to backup source, so following incrementals 165# have something to back up 166for a in `seq 1 12` ; do 167 #echo ">>> adding files to backup: ${a}" 168 for b in `seq 1 150` ; do 169 date > "${BackupDirectory}/run${a}-${b}.data" 170 done 171 #echo "now $(ls ${tmpsrc}|wc -l) files to back up" 172 173 cat <<END_OF_DATA >${cwd}/tmp/bconcmds 174@$out ${cwd}/tmp/log1.out a 175time 176run job=HotV01 level=Incremental yes 177run job=HotV02 level=Incremental yes 178run job=HotV03 level=Incremental yes 179run job=HotV04 level=Incremental yes 180run job=HotV05 level=Incremental yes 181run job=HotV06 level=Incremental yes 182run job=HotV07 level=Incremental yes 183run job=HotV08 level=Incremental yes 184run job=HotV09 level=Incremental yes 185run job=HotV10 level=Incremental yes 186run job=HotV11 level=Incremental yes 187run job=HotV12 level=Incremental yes 188run job=HotV13 level=Incremental yes 189run job=HotV14 level=Incremental yes 190run job=HotV15 level=Incremental yes 191run job=HotV16 level=Incremental yes 192run job=HotV17 level=Incremental yes 193run job=HotV18 level=Incremental yes 194run job=HotV19 level=Incremental yes 195run job=HotV20 level=Incremental yes 196wait 197list volumes 198messages 199END_OF_DATA 200# Run Backup Jobs 201 run_bconsole 202done 203 204# now do the final virtual full levels. 205#echo ">>>> Now the 2nd VFull" 206 207cat <<END_OF_DATA >${cwd}/tmp/bconcmds 208@output /dev/null 209messages 210@$out ${cwd}/tmp/log1.out a 211@#setdebug level=100 storage 212run job=HotV01 level=VirtualFull yes 213run job=HotV02 level=VirtualFull yes 214run job=HotV03 level=VirtualFull yes 215run job=HotV04 level=VirtualFull yes 216run job=HotV05 level=VirtualFull yes 217run job=HotV06 level=VirtualFull yes 218run job=HotV07 level=VirtualFull yes 219run job=HotV08 level=VirtualFull yes 220run job=HotV09 level=VirtualFull yes 221run job=HotV10 level=VirtualFull yes 222run job=HotV11 level=VirtualFull yes 223run job=HotV12 level=VirtualFull yes 224run job=HotV13 level=VirtualFull yes 225run job=HotV14 level=VirtualFull yes 226run job=HotV15 level=VirtualFull yes 227run job=HotV16 level=VirtualFull yes 228run job=HotV17 level=VirtualFull yes 229run job=HotV18 level=VirtualFull yes 230run job=HotV19 level=VirtualFull yes 231run job=HotV20 level=VirtualFull yes 232wait 233sql 234select pool.name as poolname,volumename,volstatus,volbytes,voljobs,lastwritten from Pool,Media where Pool.PoolId=Media.MediaId order by poolname,volumename; 235 236list jobs 237messages 238END_OF_DATA 239 240# Run Virtual Full Jobs 241run_bconsole 242cat <<END_OF_DATA >${cwd}/tmp/bconcmds 243@output /dev/null 244messages 245@$out ${cwd}/tmp/log2.out 246restore client=HotV20-fd where=$tmp/bacula-restores select all done yes 247wait 248messages 249END_OF_DATA 250 251# Do restore 252run_bconsole 253sleep 2 254stop_bareos 255 256check_two_logs 257check_restore_diff 258end_test 259