mirror of
https://github.com/ceph/ceph
synced 2024-12-28 14:34:13 +00:00
ccdafa067a
qa/workunits/rbd/test_lock_fence.sh runs using test/rbdrw.py rbdrw.py creates an image, locks it, and runs an I/O loop; test_lock_fence.sh runs it, waits, and then blacklists that client, which causes rbdrw.py to get ESHUTDOWN on operations thereafter. Currently doesn't work with rbd caching enabled. rbd.py gets new exception type for ESHUTDOWN Fixes: #3190 Signed-off-by: Dan Mick <dan.mick@inktank.com> Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
50 lines
1.2 KiB
Bash
Executable File
50 lines
1.2 KiB
Bash
Executable File
#!/bin/bash -x
|
|
# can't use -e because of background process
|
|
|
|
IMAGE=rbdrw-image
|
|
LOCKID=rbdrw
|
|
RBDRW=rbdrw.py
|
|
CEPH_REF=${CEPH_REF:-master}
|
|
|
|
wget -O $RBDRW "https://ceph.com/git/?p=ceph.git;a=blob_plain;hb=$CEPH_REF;f=src/test/librbd/rbdrw.py"
|
|
|
|
rbd create $IMAGE --size 10 --image-format 2 || exit 1
|
|
|
|
# rbdrw loops doing I/O to $IMAGE after locking with lockid $LOCKID
|
|
python $RBDRW $IMAGE $LOCKID &
|
|
iochild=$!
|
|
|
|
# give client time to lock and start reading/writing
|
|
LOCKS='{}'
|
|
while [ "$LOCKS" == "{}" ]
|
|
do
|
|
LOCKS=$(rbd lock list $IMAGE --format json)
|
|
sleep 1
|
|
done
|
|
|
|
clientaddr=$(rbd lock list $IMAGE | tail -1 | awk '{print $NF;}')
|
|
clientid=$(rbd lock list $IMAGE | tail -1 | awk '{print $1;}')
|
|
echo "clientaddr: $clientaddr"
|
|
echo "clientid: $clientid"
|
|
|
|
ceph osd blacklist add $clientaddr || exit 1
|
|
|
|
wait $iochild
|
|
rbdrw_exitcode=$?
|
|
if [ $rbdrw_exitcode != 108 ]
|
|
then
|
|
echo "wrong exitcode from rbdrw: $rbdrw_exitcode"
|
|
exit 1
|
|
else
|
|
echo "rbdrw stopped with ESHUTDOWN"
|
|
fi
|
|
|
|
set -e
|
|
ceph osd blacklist rm $clientaddr
|
|
rbd lock remove $IMAGE $LOCKID "$clientid"
|
|
# rbdrw will have exited with an existing watch, so, until #3527 is fixed,
|
|
# hang out until the watch expires
|
|
sleep 30
|
|
rbd rm $IMAGE
|
|
echo OK
|