diff options
Diffstat (limited to 'src/ceph/qa/workunits/rbd/krbd_exclusive_option.sh')
-rwxr-xr-x | src/ceph/qa/workunits/rbd/krbd_exclusive_option.sh | 165 |
1 files changed, 0 insertions, 165 deletions
diff --git a/src/ceph/qa/workunits/rbd/krbd_exclusive_option.sh b/src/ceph/qa/workunits/rbd/krbd_exclusive_option.sh deleted file mode 100755 index 958aecf..0000000 --- a/src/ceph/qa/workunits/rbd/krbd_exclusive_option.sh +++ /dev/null @@ -1,165 +0,0 @@ -#!/bin/bash - -set -ex - -function expect_false() { - if "$@"; then return 1; else return 0; fi -} - -function assert_locked() { - local dev_id="${1#/dev/rbd}" - - local client_addr - client_addr="$(< $SYSFS_DIR/$dev_id/client_addr)" - - local client_id - client_id="$(< $SYSFS_DIR/$dev_id/client_id)" - # client4324 -> client.4324 - client_id="client.${client_id#client}" - - local watch_cookie - watch_cookie="$(rados -p rbd listwatchers rbd_header.$IMAGE_ID | - grep $client_id | cut -d ' ' -f 3 | cut -d '=' -f 2)" - [[ $(echo -n "$watch_cookie" | grep -c '^') -eq 1 ]] - - local actual - actual="$(rados -p rbd --format=json lock info rbd_header.$IMAGE_ID rbd_lock | - python -m json.tool)" - - local expected - expected="$(cat <<EOF | python -m json.tool -{ - "lockers": [ - { - "addr": "$client_addr", - "cookie": "auto $watch_cookie", - "description": "", - "expiration": "0.000000", - "name": "$client_id" - } - ], - "name": "rbd_lock", - "tag": "internal", - "type": "exclusive" -} -EOF - )" - - [ "$actual" = "$expected" ] -} - -function assert_unlocked() { - rados -p rbd --format=json lock info rbd_header.$IMAGE_ID rbd_lock | - grep '"lockers":\[\]' -} - -SYSFS_DIR="/sys/bus/rbd/devices" -IMAGE_NAME="exclusive-option-test" - -rbd create --size 1 --image-feature '' $IMAGE_NAME - -IMAGE_ID="$(rbd info --format=json $IMAGE_NAME | - python -c "import sys, json; print json.load(sys.stdin)['block_name_prefix'].split('.')[1]")" - -DEV=$(sudo rbd map $IMAGE_NAME) -assert_unlocked -sudo rbd unmap $DEV -assert_unlocked - -expect_false sudo rbd map -o exclusive $IMAGE_NAME -assert_unlocked - -rbd feature enable $IMAGE_NAME exclusive-lock -rbd snap create $IMAGE_NAME@snap - -DEV=$(sudo rbd map $IMAGE_NAME) -assert_unlocked -sudo rbd unmap $DEV -assert_unlocked - -DEV=$(sudo rbd map -o exclusive $IMAGE_NAME) -assert_locked $DEV -[[ $(blockdev --getro $DEV) -eq 0 ]] -sudo rbd unmap $DEV -assert_unlocked - -DEV=$(sudo rbd map -o exclusive $IMAGE_NAME@snap) -assert_locked $DEV -[[ $(blockdev --getro $DEV) -eq 1 ]] -sudo rbd unmap $DEV -assert_unlocked - -DEV=$(sudo rbd map -o exclusive,ro $IMAGE_NAME) -assert_locked $DEV -[[ $(blockdev --getro $DEV) -eq 1 ]] -sudo rbd unmap $DEV -assert_unlocked - -# alternate syntax -DEV=$(sudo rbd map --exclusive --read-only $IMAGE_NAME) -assert_locked $DEV -[[ $(blockdev --getro $DEV) -eq 1 ]] -sudo rbd unmap $DEV -assert_unlocked - -DEV=$(sudo rbd map $IMAGE_NAME) -assert_unlocked -dd if=/dev/urandom of=$DEV bs=4k count=10 oflag=direct -assert_locked $DEV -OTHER_DEV=$(sudo rbd map -o noshare,exclusive $IMAGE_NAME) -assert_locked $OTHER_DEV -sudo rbd unmap $DEV -sudo rbd unmap $OTHER_DEV -assert_unlocked - -DEV=$(sudo rbd map -o exclusive $IMAGE_NAME) -assert_locked $DEV -expect_false sudo rbd map -o noshare,exclusive $IMAGE_NAME -assert_locked $DEV -sudo rbd unmap $DEV -assert_unlocked - -DEV=$(sudo rbd map -o exclusive $IMAGE_NAME) -assert_locked $DEV -OTHER_DEV=$(sudo rbd map -o noshare $IMAGE_NAME) -dd if=/dev/urandom of=$OTHER_DEV bs=4k count=10 oflag=direct & -PID=$! -sleep 20 -assert_locked $DEV -[ "$(ps -o stat= $PID)" = "D" ] -sudo rbd unmap $DEV -wait $PID -assert_locked $OTHER_DEV -sudo rbd unmap $OTHER_DEV -assert_unlocked - -DEV=$(sudo rbd map -o exclusive $IMAGE_NAME) -assert_locked $DEV -sudo rbd map -o noshare,lock_on_read $IMAGE_NAME & -SUDO_PID=$! -sleep 20 -assert_locked $DEV -PID="$(ps -o pid= --ppid $SUDO_PID)" -[ "$(ps -o stat= $PID)" = "Dl" ] -sudo rbd unmap $DEV -wait $SUDO_PID -assert_locked $OTHER_DEV -sudo rbd unmap $OTHER_DEV -assert_unlocked - -# induce a watch error after 30 seconds -DEV=$(sudo rbd map -o exclusive,osdkeepalive=60 $IMAGE_NAME) -assert_locked $DEV -OLD_WATCHER="$(rados -p rbd listwatchers rbd_header.$IMAGE_ID)" -sleep 40 -assert_locked $DEV -NEW_WATCHER="$(rados -p rbd listwatchers rbd_header.$IMAGE_ID)" -# same client_id, old cookie < new cookie -[ "$(echo "$OLD_WATCHER" | cut -d ' ' -f 2)" = \ - "$(echo "$NEW_WATCHER" | cut -d ' ' -f 2)" ] -[[ $(echo "$OLD_WATCHER" | cut -d ' ' -f 3 | cut -d '=' -f 2) -lt \ - $(echo "$NEW_WATCHER" | cut -d ' ' -f 3 | cut -d '=' -f 2) ]] -sudo rbd unmap $DEV -assert_unlocked - -echo OK |