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