]> git.proxmox.com Git - ceph.git/blame - ceph/qa/workunits/rbd/test_lock_fence.sh
import 15.2.0 Octopus source
[ceph.git] / ceph / qa / workunits / rbd / test_lock_fence.sh
CommitLineData
11fdf7f2 1#!/usr/bin/env bash
7c673cae 2# can't use -e because of background process
11fdf7f2 3set -x
7c673cae
FG
4
5IMAGE=rbdrw-image
6LOCKID=rbdrw
7RELPATH=$(dirname $0)/../../../src/test/librbd
8RBDRW=$RELPATH/rbdrw.py
9
10rbd create $IMAGE --size 10 --image-format 2 --image-shared || exit 1
11
12# rbdrw loops doing I/O to $IMAGE after locking with lockid $LOCKID
9f95a23c 13python3 $RBDRW $IMAGE $LOCKID &
7c673cae
FG
14iochild=$!
15
16# give client time to lock and start reading/writing
11fdf7f2
TL
17LOCKS='[]'
18while [ "$LOCKS" == '[]' ]
7c673cae
FG
19do
20 LOCKS=$(rbd lock list $IMAGE --format json)
21 sleep 1
22done
23
24clientaddr=$(rbd lock list $IMAGE | tail -1 | awk '{print $NF;}')
25clientid=$(rbd lock list $IMAGE | tail -1 | awk '{print $1;}')
26echo "clientaddr: $clientaddr"
27echo "clientid: $clientid"
28
29ceph osd blacklist add $clientaddr || exit 1
30
31wait $iochild
32rbdrw_exitcode=$?
33if [ $rbdrw_exitcode != 108 ]
34then
35 echo "wrong exitcode from rbdrw: $rbdrw_exitcode"
36 exit 1
37else
38 echo "rbdrw stopped with ESHUTDOWN"
39fi
40
41set -e
42ceph osd blacklist rm $clientaddr
43rbd lock remove $IMAGE $LOCKID "$clientid"
44# rbdrw will have exited with an existing watch, so, until #3527 is fixed,
45# hang out until the watch expires
46sleep 30
47rbd rm $IMAGE
48echo OK