]> git.proxmox.com Git - ceph.git/blame - ceph/qa/workunits/rgw/test_rgw_orphan_list.sh
import 15.2.5
[ceph.git] / ceph / qa / workunits / rgw / test_rgw_orphan_list.sh
CommitLineData
e306af50
TL
1#!/usr/bin/env bash
2
3set -ex
4
5# if defined, debug messages will be displayed and prepended with the string
6# debug="DEBUG"
7
8huge_size=2222 # in megabytes
9big_size=6 # in megabytes
10
11huge_obj=/tmp/huge_obj.temp.$$
12big_obj=/tmp/big_obj.temp.$$
13empty_obj=/tmp/empty_obj.temp.$$
14
15fifo=/tmp/orphan-fifo.$$
16awscli_dir=${HOME}/awscli_temp
17export PATH=${PATH}:${awscli_dir}
18
19rgw_host=$(hostname --fqdn)
f6b5b4d7
TL
20if echo "$rgw_host" | grep -q '\.' ; then
21 :
22else
23 host_domain=".front.sepia.ceph.com"
24 echo "WARNING: rgw hostname -- $rgw_host -- does not appear to be fully qualified; PUNTING and appending $host_domain"
25 rgw_host="${rgw_host}${host_domain}"
26fi
e306af50
TL
27rgw_port=80
28
29echo "Fully Qualified Domain Name: $rgw_host"
30
31success() {
32 echo OK.
33 exit 0
34}
35
36########################################################################
37# INSTALL AND CONFIGURE TOOLING
38
39install_awscli() {
40 # NB: this does verify authenticity and integrity of downloaded
41 # file; see
42 # https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html
43 here="$(pwd)"
44 cd "$HOME"
45 curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
46 unzip awscliv2.zip
47 mkdir -p $awscli_dir
48 ./aws/install -i $awscli_dir
49 cd "$here"
50}
51
52uninstall_awscli() {
53 here="$(pwd)"
54 cd "$HOME"
55 rm -rf $awscli_dir ./aws awscliv2.zip
56 cd "$here"
57}
58
59sudo dnf install -y s3cmd
60
61sudo yum install python3-setuptools
62sudo yum -y install python3-pip
63sudo pip3 install --upgrade setuptools
64sudo pip3 install python-swiftclient
65
66# get ready for transition from s3cmd to awscli
67if false ;then
68 install_awscli
69 aws --version
70 uninstall_awscli
71fi
72
73s3config=/tmp/s3config.$$
74
75# do not include the port when it is 80; the host base is used in the
76# v4 signature and it needs to follow this convention for signatures
77# to match
78if [ "$rgw_port" -ne 80 ] ;then
79 s3_host_base="${rgw_host}:${rgw_port}"
80else
81 s3_host_base="$rgw_host"
82fi
83
84cat >${s3config} <<EOF
85[default]
86host_base = $s3_host_base
87access_key = 0555b35654ad1656d804
88secret_key = h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q==
89bucket_location = us-east-1
90check_ssl_certificate = True
91check_ssl_hostname = True
92default_mime_type = binary/octet-stream
93delete_removed = False
94dry_run = False
95enable_multipart = True
96encoding = UTF-8
97encrypt = False
98follow_symlinks = False
99force = False
100guess_mime_type = True
101host_bucket = anything.with.three.dots
102multipart_chunk_size_mb = 15
103multipart_max_chunks = 10000
104recursive = False
105recv_chunk = 65536
106send_chunk = 65536
107signature_v2 = False
108socket_timeout = 300
109use_https = False
110use_mime_magic = True
111verbosity = WARNING
112EOF
113
114
115# set up swift authentication
116export ST_AUTH=http://${rgw_host}:${rgw_port}/auth/v1.0
117export ST_USER=test:tester
118export ST_KEY=testing
119
120create_users() {
121 # Create S3 user
122 local akey='0555b35654ad1656d804'
123 local skey='h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=='
124 radosgw-admin user create --uid testid \
125 --access-key $akey --secret $skey \
126 --display-name 'M. Tester' --email tester@ceph.com
127
128 # Create Swift user
129 radosgw-admin user create --subuser=test:tester \
130 --display-name=Tester-Subuser --key-type=swift \
131 --secret=testing --access=full
132}
133
134myswift() {
135 if [ -n "$debug" ] ;then
136 echo "${debug}: swift --verbose --debug $@"
137 fi
138 swift --verbose --debug "$@"
139 local code=$?
140 if [ $code -ne 0 ] ;then
141 echo "ERROR: code = $code ; command = s3cmd --config=${s3config} --verbose --debug "$@""
142 exit $code
143 fi
144}
145
146mys3cmd() {
147 if [ -n "$debug" ] ;then
148 echo "${debug}: s3cmd --config=${s3config} --verbose --debug $@"
149 fi
150 s3cmd --config=${s3config} --verbose --debug "$@"
151 local code=$?
152 if [ $code -ne 0 ] ;then
153 echo "ERROR: code = $code ; command = s3cmd --config=${s3config} --verbose --debug "$@""
154 exit $code
155 fi
156}
157
158mys3uploadkill() {
159 if [ $# -ne 5 ] ;then
160 echo "$0: error expecting 5 arguments"
161 exit 1
162 fi
163
164 set -v
165 local_file="$1"
166 remote_bkt="$2"
167 remote_obj="$3"
168 fifo="$4"
169 stop_part="$5"
170
171 mkfifo $fifo
172
173 s3cmd --config=${s3config} put $local_file \
174 s3://${remote_bkt}/${remote_obj} \
175 --progress \
176 --multipart-chunk-size-mb=5 >$fifo &
177 set +e # don't allow errors to stop script
178 while read line ;do
179 echo "$line" | grep --quiet "part $stop_part "
180 if [ ${PIPESTATUS[1]} -eq 0 ] ;then
181 kill -9 $(jobs -p)
182 break
183 fi
184 done <$fifo
185 set -e
186
187 rm -f $fifo
188}
189
190mys3upload() {
191 obj=$1
192 bucket=$2
193 dest_obj=$3
194
195 mys3cmd put -q $obj s3://${bucket}/$dest_obj
196}
197
198########################################################################
199# PREP
200
201create_users
202dd if=/dev/urandom of=$big_obj bs=1M count=${big_size}
203dd if=/dev/urandom of=$huge_obj bs=1M count=${huge_size}
204touch $empty_obj
205
206quick_tests() {
207 echo TRY A SWIFT COMMAND
208 myswift upload swift-plain-ctr $big_obj --object-name swift-obj-test
209 myswift list
210 myswift list swift-plain-ctr
211
212 echo TRY A RADOSGW-ADMIN COMMAND
213 radosgw-admin bucket list # make sure rgw is up and running
214}
215
216########################################################################
217# S3 TESTS
218
219####################################
220# regular multipart test
221
222mys3cmd mb s3://multipart-bkt
223mys3upload $huge_obj multipart-bkt multipart-obj
224mys3cmd ls
225mys3cmd ls s3://multipart-bkt
226
227####################################
228# multipart test with incomplete uploads
229
230bkt="incomplete-mp-bkt-1"
231
232mys3cmd mb s3://$bkt
233mys3uploadkill $huge_obj $bkt incomplete-mp-obj-1 $fifo 20
234mys3uploadkill $huge_obj $bkt incomplete-mp-obj-2 $fifo 100
235
236####################################
237# resharded bucket
238
239bkt=resharded-bkt-1
240
241mys3cmd mb s3://$bkt
242
243for f in $(seq 8) ; do
244 dest_obj="reshard-obj-${f}"
245 mys3cmd put -q $big_obj s3://${bkt}/$dest_obj
246done
247
248radosgw-admin bucket reshard --num-shards 3 --bucket=$bkt --yes-i-really-mean-it
249radosgw-admin bucket reshard --num-shards 5 --bucket=$bkt --yes-i-really-mean-it
250
251####################################
252# versioned bucket
253
254if true ;then
255 echo "WARNING: versioned bucket test currently turned off"
256else
257 bkt=versioned-bkt-1
258
259 mys3cmd mb s3://$bkt
260
261 # bucket-enable-versioning $bkt
262
263 for f in $(seq 3) ;do
264 for g in $(seq 10) ;do
265 dest_obj="versioned-obj-${g}"
266 mys3cmd put -q $big_obj s3://${bkt}/$dest_obj
267 done
268 done
269
270 for g in $(seq 1 2 10) ;do
271 dest_obj="versioned-obj-${g}"
272 mys3cmd rm s3://${bkt}/$dest_obj
273 done
274fi
275
276############################################################
277# copy small objects
278
279o_bkt="orig-bkt-1"
280d_bkt="copy-bkt-1"
281mys3cmd mb s3://$o_bkt
282
283for f in $(seq 4) ;do
284 dest_obj="orig-obj-$f"
285 mys3cmd put -q $big_obj s3://${o_bkt}/$dest_obj
286done
287
288mys3cmd mb s3://$d_bkt
289
290mys3cmd cp s3://${o_bkt}/orig-obj-1 s3://${d_bkt}/copied-obj-1
291mys3cmd cp s3://${o_bkt}/orig-obj-3 s3://${d_bkt}/copied-obj-3
292
293for f in $(seq 5 6) ;do
294 dest_obj="orig-obj-$f"
295 mys3cmd put -q $big_obj s3://${d_bkt}/$dest_obj
296done
297
298############################################################
299# copy small objects and delete original
300
301o_bkt="orig-bkt-2"
302d_bkt="copy-bkt-2"
303
304mys3cmd mb s3://$o_bkt
305
306for f in $(seq 4) ;do
307 dest_obj="orig-obj-$f"
308 mys3cmd put -q $big_obj s3://${o_bkt}/$dest_obj
309done
310
311mys3cmd mb s3://$d_bkt
312
313mys3cmd cp s3://${o_bkt}/orig-obj-1 s3://${d_bkt}/copied-obj-1
314mys3cmd cp s3://${o_bkt}/orig-obj-3 s3://${d_bkt}/copied-obj-3
315
316for f in $(seq 5 6) ;do
317 dest_obj="orig-obj-$f"
318 mys3cmd put -q $big_obj s3://${d_bkt}/$dest_obj
319done
320
321mys3cmd rb --recursive s3://${o_bkt}
322
323############################################################
324# copy multipart objects
325
326o_bkt="orig-mp-bkt-3"
327d_bkt="copy-mp-bkt-3"
328
329mys3cmd mb s3://$o_bkt
330
331for f in $(seq 2) ;do
332 dest_obj="orig-multipart-obj-$f"
333 mys3cmd put -q $huge_obj s3://${o_bkt}/$dest_obj
334done
335
336mys3cmd mb s3://$d_bkt
337
338mys3cmd cp s3://${o_bkt}/orig-multipart-obj-1 \
339 s3://${d_bkt}/copied-multipart-obj-1
340
341for f in $(seq 5 5) ;do
342 dest_obj="orig-multipart-obj-$f"
343 mys3cmd put -q $huge_obj s3://${d_bkt}/$dest_obj
344done
345
346
347############################################################
348# copy multipart objects and delete original
349
350o_bkt="orig-mp-bkt-4"
351d_bkt="copy-mp-bkt-4"
352
353mys3cmd mb s3://$o_bkt
354
355for f in $(seq 2) ;do
356 dest_obj="orig-multipart-obj-$f"
357 mys3cmd put -q $huge_obj s3://${o_bkt}/$dest_obj
358done
359
360mys3cmd mb s3://$d_bkt
361
362mys3cmd cp s3://${o_bkt}/orig-multipart-obj-1 \
363 s3://${d_bkt}/copied-multipart-obj-1
364
365for f in $(seq 5 5) ;do
366 dest_obj="orig-multipart-obj-$f"
367 mys3cmd put -q $huge_obj s3://${d_bkt}/$dest_obj
368done
369
370mys3cmd rb --recursive s3://$o_bkt
371
372########################################################################
373# SWIFT TESTS
374
375# 600MB
376segment_size=629145600
377
378############################################################
379# plain test
380
381for f in $(seq 4) ;do
382 myswift upload swift-plain-ctr $big_obj --object-name swift-obj-$f
383done
384
385############################################################
386# zero-len test
387
388myswift upload swift-zerolen-ctr $empty_obj --object-name subdir/
389myswift upload swift-zerolen-ctr $big_obj --object-name subdir/abc1
390myswift upload swift-zerolen-ctr $empty_obj --object-name subdir/empty1
391myswift upload swift-zerolen-ctr $big_obj --object-name subdir/xyz1
392
393############################################################
394# dlo test
395
396# upload in 300MB segments
397myswift upload swift-dlo-ctr $huge_obj --object-name dlo-obj-1 \
398 -S $segment_size
399
400############################################################
401# slo test
402
403# upload in 300MB segments
404myswift upload swift-slo-ctr $huge_obj --object-name slo-obj-1 \
405 -S $segment_size --use-slo
406
407############################################################
408# large object copy test
409
410# upload in 300MB segments
411o_ctr=swift-orig-ctr
412o_obj=slo-orig-obj-1
413d_ctr=swift-copy-ctr
414d_obj=slo-copy-obj-1
415myswift upload $o_ctr $big_obj --object-name $o_obj
416
417myswift copy --destination /${d_ctr}/${d_obj} \
418 $o_ctr $o_obj
419
420myswift delete $o_ctr $o_obj
421
422############################################################
423# huge dlo object copy test
424
425o_ctr=swift-orig-dlo-ctr-1
426o_obj=dlo-orig-dlo-obj-1
427d_ctr=swift-copy-dlo-ctr-1
428d_obj=dlo-copy-dlo-obj-1
429
430myswift upload $o_ctr $huge_obj --object-name $o_obj \
431 -S $segment_size
432
433myswift copy --destination /${d_ctr}/${d_obj} \
434 $o_ctr $o_obj
435
436############################################################
437# huge dlo object copy and orig delete
438
439o_ctr=swift-orig-dlo-ctr-2
440o_obj=dlo-orig-dlo-obj-2
441d_ctr=swift-copy-dlo-ctr-2
442d_obj=dlo-copy-dlo-obj-2
443
444myswift upload $o_ctr $huge_obj --object-name $o_obj \
445 -S $segment_size
446
447myswift copy --destination /${d_ctr}/${d_obj} \
448 $o_ctr $o_obj
449
450myswift delete $o_ctr $o_obj
451
452############################################################
453# huge slo object copy test
454
455o_ctr=swift-orig-slo-ctr-1
456o_obj=slo-orig-slo-obj-1
457d_ctr=swift-copy-slo-ctr-1
458d_obj=slo-copy-slo-obj-1
459myswift upload $o_ctr $huge_obj --object-name $o_obj \
460 -S $segment_size --use-slo
461
462myswift copy --destination /${d_ctr}/${d_obj} $o_ctr $o_obj
463
464############################################################
465# huge slo object copy test and orig delete
466
467o_ctr=swift-orig-slo-ctr-2
468o_obj=slo-orig-slo-obj-2
469d_ctr=swift-copy-slo-ctr-2
470d_obj=slo-copy-slo-obj-2
471myswift upload $o_ctr $huge_obj --object-name $o_obj \
472 -S $segment_size --use-slo
473
474myswift copy --destination /${d_ctr}/${d_obj} $o_ctr $o_obj
475
476myswift delete $o_ctr $o_obj
477
478########################################################################
479# FORCE GARBAGE COLLECTION
480
481sleep 6 # since for testing age at which gc can happen is 5 secs
482radosgw-admin gc process --include-all
483
484
485########################################
486# DO ORPHAN LIST
487
488pool="default.rgw.buckets.data"
489
490rgw-orphan-list $pool
491
492# we only expect there to be one output file, but loop just in case
493ol_error=""
494for f in orphan-list-*.out ; do
495 if [ -s "$f" ] ;then # if file non-empty
496 ol_error="${ol_error}:$f"
497 echo "One ore more orphans found in $f:"
498 cat "$f"
499 fi
500done
501
502if [ -n "$ol_error" ] ;then
503 echo "ERROR: orphans found when none expected"
504 exit 1
505fi
506
507########################################################################
508# CLEAN UP
509
510rm -f $empty_obj $big_obj $huge_obj $s3config
511
512success