5 # if defined, debug messages will be displayed and prepended with the string
8 huge_size
=2222 # in megabytes
9 big_size
=6 # in megabytes
11 huge_obj
=/tmp
/huge_obj.temp.$$
12 big_obj
=/tmp
/big_obj.temp.$$
13 empty_obj
=/tmp
/empty_obj.temp.$$
15 fifo
=/tmp
/orphan-fifo.$$
16 awscli_dir
=${HOME}/awscli_temp
17 export PATH
=${PATH}:${awscli_dir}
19 rgw_host
=$
(hostname
--fqdn)
22 echo "Fully Qualified Domain Name: $rgw_host"
29 ########################################################################
30 # INSTALL AND CONFIGURE TOOLING
33 # NB: this does verify authenticity and integrity of downloaded
35 # https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html
38 curl
"https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
41 .
/aws
/install -i $awscli_dir
48 rm -rf $awscli_dir .
/aws awscliv2.
zip
52 sudo dnf
install -y s3cmd
54 sudo yum
install python3-setuptools
55 sudo yum
-y install python3-pip
56 sudo pip3
install --upgrade setuptools
57 sudo pip3
install python-swiftclient
59 # get ready for transition from s3cmd to awscli
66 s3config
=/tmp
/s3config.$$
68 # do not include the port when it is 80; the host base is used in the
69 # v4 signature and it needs to follow this convention for signatures
71 if [ "$rgw_port" -ne 80 ] ;then
72 s3_host_base
="${rgw_host}:${rgw_port}"
74 s3_host_base
="$rgw_host"
77 cat >${s3config} <<EOF
79 host_base = $s3_host_base
80 access_key = 0555b35654ad1656d804
81 secret_key = h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q==
82 bucket_location = us-east-1
83 check_ssl_certificate = True
84 check_ssl_hostname = True
85 default_mime_type = binary/octet-stream
86 delete_removed = False
88 enable_multipart = True
91 follow_symlinks = False
93 guess_mime_type = True
94 host_bucket = anything.with.three.dots
95 multipart_chunk_size_mb = 15
96 multipart_max_chunks = 10000
103 use_mime_magic = True
108 # set up swift authentication
109 export ST_AUTH
=http
://${rgw_host}:${rgw_port}/auth
/v1.0
110 export ST_USER
=test:tester
111 export ST_KEY
=testing
115 local akey
='0555b35654ad1656d804'
116 local skey
='h7GhxuBLTrlhVUyxSPUKUV8r/2EI4ngqJxD7iBdBYLhwluN30JaT3Q=='
117 radosgw-admin user create
--uid testid \
118 --access-key $akey --secret $skey \
119 --display-name 'M. Tester' --email tester@ceph.com
122 radosgw-admin user create
--subuser=test:tester \
123 --display-name=Tester-Subuser
--key-type=swift \
124 --secret=testing
--access=full
128 if [ -n "$debug" ] ;then
129 echo "${debug}: swift --verbose --debug $@"
131 swift
--verbose --debug "$@"
133 if [ $code -ne 0 ] ;then
134 echo "ERROR: code = $code ; command = s3cmd --config=${s3config} --verbose --debug "$@
""
140 if [ -n "$debug" ] ;then
141 echo "${debug}: s3cmd --config=${s3config} --verbose --debug $@"
143 s3cmd
--config=${s3config} --verbose --debug "$@"
145 if [ $code -ne 0 ] ;then
146 echo "ERROR: code = $code ; command = s3cmd --config=${s3config} --verbose --debug "$@
""
152 if [ $# -ne 5 ] ;then
153 echo "$0: error expecting 5 arguments"
166 s3cmd
--config=${s3config} put
$local_file \
167 s3
://${remote_bkt}/${remote_obj} \
169 --multipart-chunk-size-mb=5 >$fifo &
170 set +e
# don't allow errors to stop script
172 echo "$line" |
grep --quiet "part $stop_part "
173 if [ ${PIPESTATUS[1]} -eq 0 ] ;then
188 mys3cmd put
-q $obj s3
://${bucket}/$dest_obj
191 ########################################################################
195 dd if=/dev
/urandom of
=$big_obj bs
=1M count
=${big_size}
196 dd if=/dev
/urandom of
=$huge_obj bs
=1M count
=${huge_size}
200 echo TRY A SWIFT COMMAND
201 myswift upload swift-plain-ctr
$big_obj --object-name swift-obj-test
203 myswift list swift-plain-ctr
205 echo TRY A RADOSGW-ADMIN COMMAND
206 radosgw-admin bucket list
# make sure rgw is up and running
209 ########################################################################
212 ####################################
213 # regular multipart test
215 mys3cmd mb s3
://multipart-bkt
216 mys3upload
$huge_obj multipart-bkt multipart-obj
218 mys3cmd
ls s3
://multipart-bkt
220 ####################################
221 # multipart test with incomplete uploads
223 bkt
="incomplete-mp-bkt-1"
226 mys3uploadkill
$huge_obj $bkt incomplete-mp-obj-1
$fifo 20
227 mys3uploadkill
$huge_obj $bkt incomplete-mp-obj-2
$fifo 100
229 ####################################
236 for f
in $
(seq 8) ; do
237 dest_obj
="reshard-obj-${f}"
238 mys3cmd put
-q $big_obj s3
://${bkt}/$dest_obj
241 radosgw-admin bucket reshard
--num-shards 3 --bucket=$bkt --yes-i-really-mean-it
242 radosgw-admin bucket reshard
--num-shards 5 --bucket=$bkt --yes-i-really-mean-it
244 ####################################
248 echo "WARNING: versioned bucket test currently turned off"
254 # bucket-enable-versioning $bkt
256 for f
in $
(seq 3) ;do
257 for g
in $
(seq 10) ;do
258 dest_obj
="versioned-obj-${g}"
259 mys3cmd put
-q $big_obj s3
://${bkt}/$dest_obj
263 for g
in $
(seq 1 2 10) ;do
264 dest_obj
="versioned-obj-${g}"
265 mys3cmd
rm s3
://${bkt}/$dest_obj
269 ############################################################
274 mys3cmd mb s3
://$o_bkt
276 for f
in $
(seq 4) ;do
277 dest_obj
="orig-obj-$f"
278 mys3cmd put
-q $big_obj s3
://${o_bkt}/$dest_obj
281 mys3cmd mb s3
://$d_bkt
283 mys3cmd
cp s3
://${o_bkt}/orig-obj-1 s3
://${d_bkt}/copied-obj-1
284 mys3cmd
cp s3
://${o_bkt}/orig-obj-3 s3
://${d_bkt}/copied-obj-3
286 for f
in $
(seq 5 6) ;do
287 dest_obj
="orig-obj-$f"
288 mys3cmd put
-q $big_obj s3
://${d_bkt}/$dest_obj
291 ############################################################
292 # copy small objects and delete original
297 mys3cmd mb s3
://$o_bkt
299 for f
in $
(seq 4) ;do
300 dest_obj
="orig-obj-$f"
301 mys3cmd put
-q $big_obj s3
://${o_bkt}/$dest_obj
304 mys3cmd mb s3
://$d_bkt
306 mys3cmd
cp s3
://${o_bkt}/orig-obj-1 s3
://${d_bkt}/copied-obj-1
307 mys3cmd
cp s3
://${o_bkt}/orig-obj-3 s3
://${d_bkt}/copied-obj-3
309 for f
in $
(seq 5 6) ;do
310 dest_obj
="orig-obj-$f"
311 mys3cmd put
-q $big_obj s3
://${d_bkt}/$dest_obj
314 mys3cmd rb
--recursive s3
://${o_bkt}
316 ############################################################
317 # copy multipart objects
319 o_bkt
="orig-mp-bkt-3"
320 d_bkt
="copy-mp-bkt-3"
322 mys3cmd mb s3
://$o_bkt
324 for f
in $
(seq 2) ;do
325 dest_obj
="orig-multipart-obj-$f"
326 mys3cmd put
-q $huge_obj s3
://${o_bkt}/$dest_obj
329 mys3cmd mb s3
://$d_bkt
331 mys3cmd
cp s3
://${o_bkt}/orig-multipart-obj-1 \
332 s3
://${d_bkt}/copied-multipart-obj-1
334 for f
in $
(seq 5 5) ;do
335 dest_obj
="orig-multipart-obj-$f"
336 mys3cmd put
-q $huge_obj s3
://${d_bkt}/$dest_obj
340 ############################################################
341 # copy multipart objects and delete original
343 o_bkt
="orig-mp-bkt-4"
344 d_bkt
="copy-mp-bkt-4"
346 mys3cmd mb s3
://$o_bkt
348 for f
in $
(seq 2) ;do
349 dest_obj
="orig-multipart-obj-$f"
350 mys3cmd put
-q $huge_obj s3
://${o_bkt}/$dest_obj
353 mys3cmd mb s3
://$d_bkt
355 mys3cmd
cp s3
://${o_bkt}/orig-multipart-obj-1 \
356 s3
://${d_bkt}/copied-multipart-obj-1
358 for f
in $
(seq 5 5) ;do
359 dest_obj
="orig-multipart-obj-$f"
360 mys3cmd put
-q $huge_obj s3
://${d_bkt}/$dest_obj
363 mys3cmd rb
--recursive s3
://$o_bkt
365 ########################################################################
369 segment_size
=629145600
371 ############################################################
374 for f
in $
(seq 4) ;do
375 myswift upload swift-plain-ctr
$big_obj --object-name swift-obj-
$f
378 ############################################################
381 myswift upload swift-zerolen-ctr
$empty_obj --object-name subdir
/
382 myswift upload swift-zerolen-ctr
$big_obj --object-name subdir
/abc1
383 myswift upload swift-zerolen-ctr
$empty_obj --object-name subdir
/empty1
384 myswift upload swift-zerolen-ctr
$big_obj --object-name subdir
/xyz1
386 ############################################################
389 # upload in 300MB segments
390 myswift upload swift-dlo-ctr
$huge_obj --object-name dlo-obj-1 \
393 ############################################################
396 # upload in 300MB segments
397 myswift upload swift-slo-ctr
$huge_obj --object-name slo-obj-1 \
398 -S $segment_size --use-slo
400 ############################################################
401 # large object copy test
403 # upload in 300MB segments
408 myswift upload
$o_ctr $big_obj --object-name $o_obj
410 myswift copy
--destination /${d_ctr}/${d_obj} \
413 myswift delete
$o_ctr $o_obj
415 ############################################################
416 # huge dlo object copy test
418 o_ctr
=swift-orig-dlo-ctr-1
419 o_obj
=dlo-orig-dlo-obj-1
420 d_ctr
=swift-copy-dlo-ctr-1
421 d_obj
=dlo-copy-dlo-obj-1
423 myswift upload
$o_ctr $huge_obj --object-name $o_obj \
426 myswift copy
--destination /${d_ctr}/${d_obj} \
429 ############################################################
430 # huge dlo object copy and orig delete
432 o_ctr
=swift-orig-dlo-ctr-2
433 o_obj
=dlo-orig-dlo-obj-2
434 d_ctr
=swift-copy-dlo-ctr-2
435 d_obj
=dlo-copy-dlo-obj-2
437 myswift upload
$o_ctr $huge_obj --object-name $o_obj \
440 myswift copy
--destination /${d_ctr}/${d_obj} \
443 myswift delete
$o_ctr $o_obj
445 ############################################################
446 # huge slo object copy test
448 o_ctr
=swift-orig-slo-ctr-1
449 o_obj
=slo-orig-slo-obj-1
450 d_ctr
=swift-copy-slo-ctr-1
451 d_obj
=slo-copy-slo-obj-1
452 myswift upload
$o_ctr $huge_obj --object-name $o_obj \
453 -S $segment_size --use-slo
455 myswift copy
--destination /${d_ctr}/${d_obj} $o_ctr $o_obj
457 ############################################################
458 # huge slo object copy test and orig delete
460 o_ctr
=swift-orig-slo-ctr-2
461 o_obj
=slo-orig-slo-obj-2
462 d_ctr
=swift-copy-slo-ctr-2
463 d_obj
=slo-copy-slo-obj-2
464 myswift upload
$o_ctr $huge_obj --object-name $o_obj \
465 -S $segment_size --use-slo
467 myswift copy
--destination /${d_ctr}/${d_obj} $o_ctr $o_obj
469 myswift delete
$o_ctr $o_obj
471 ########################################################################
472 # FORCE GARBAGE COLLECTION
474 sleep 6 # since for testing age at which gc can happen is 5 secs
475 radosgw-admin gc process
--include-all
478 ########################################
481 pool
="default.rgw.buckets.data"
483 rgw-orphan-list
$pool
485 # we only expect there to be one output file, but loop just in case
487 for f
in orphan-list-
*.out
; do
488 if [ -s "$f" ] ;then # if file non-empty
489 ol_error
="${ol_error}:$f"
490 echo "One ore more orphans found in $f:"
495 if [ -n "$ol_error" ] ;then
496 echo "ERROR: orphans found when none expected"
500 ########################################################################
503 rm -f $empty_obj $big_obj $huge_obj $s3config