summaryrefslogtreecommitdiffstats
path: root/src/ceph/qa/workunits/rbd/test_lock_fence.sh
blob: 7ecafd46356865313ae4369a41e3e7e893829f97 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#!/bin/bash  -x
# can't use -e because of background process

IMAGE=rbdrw-image
LOCKID=rbdrw
RELPATH=$(dirname $0)/../../../src/test/librbd
RBDRW=$RELPATH/rbdrw.py

rbd create $IMAGE --size 10 --image-format 2 --image-shared || 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