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