From: Mykola Golub Date: Tue, 3 Nov 2015 11:24:36 +0000 (+0200) Subject: tests: librbd: admin socket commands to flush and invalidate cache X-Git-Tag: v10.0.1~111^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=d33842d237e6a788f8deac3d39709a4927467370;p=ceph.git tests: librbd: admin socket commands to flush and invalidate cache Signed-off-by: Mykola Golub --- diff --git a/qa/workunits/rbd/test_admin_socket.sh b/qa/workunits/rbd/test_admin_socket.sh new file mode 100755 index 000000000000..aefb9e2c093e --- /dev/null +++ b/qa/workunits/rbd/test_admin_socket.sh @@ -0,0 +1,142 @@ +#!/bin/bash -ex + +TMPDIR=/tmp/rbd_test_admin_socket$$ +mkdir $TMPDIR +trap "rm -fr $TMPDIR" 0 + +. $(dirname $0)/../ceph-helpers.sh + +function expect_false() +{ + set -x + if "$@"; then return 1; else return 0; fi +} + +function rbd_watch_out_file() +{ + echo ${TMPDIR}/rbd_watch_$1.out +} + +function rbd_watch_pid_file() +{ + echo ${TMPDIR}/rbd_watch_$1.pid +} + +function rbd_watch_fifo() +{ + echo ${TMPDIR}/rbd_watch_$1.fifo +} + +function rbd_watch_asok() +{ + echo ${TMPDIR}/rbd_watch_$1.asok +} + +function rbd_get_perfcounter() +{ + local image=$1 + local counter=$2 + + ceph --admin-daemon $(rbd_watch_asok ${image}) perf dump | + sed -ne 's/^.*"'${counter}'": \([0-9]*\).*$/\1/p' +} + +function rbd_check_perfcounter() +{ + local image=$1 + local counter=$2 + local expected_val=$3 + local val= + + val=$(rbd_get_perfcounter ${image} ${counter}) + + test "${val}" -eq "${expected_val}" +} + +function rbd_watch_start() +{ + local image=$1 + + mkfifo $(rbd_watch_fifo ${image}) + (cat $(rbd_watch_fifo ${image}) | + rbd watch ${image} > $(rbd_watch_out_file ${image}) 2>&1)& + + # find pid of the started rbd watch process + local pid + for i in `seq 10`; do + pid=$(ps auxww | awk "/[r]bd watch ${image}/ {print \$2}") + test -n "${pid}" && break + sleep 0.1 + done + test -n "${pid}" + echo ${pid} > $(rbd_watch_pid_file ${image}) + + # find watcher admin socket + local asok=$(ceph-conf admin_socket | sed -E "s/[0-9]+/${pid}/") + test -n "${asok}" + for i in `seq 10`; do + test -S "${asok}" && break + sleep 0.1 + done + test -S "${asok}" + ln -s "${asok}" $(rbd_watch_asok ${image}) + + # configure debug level + ceph --admin-daemon "${asok}" config set debug_rbd 20 + + # check that watcher is registered + rbd status ${image} | expect_false grep "Watchers: none" +} + +function rbd_watch_end() +{ + local image=$1 + local regexp=$2 + + # send 'enter' to watch to exit + echo > $(rbd_watch_fifo ${image}) + # just in case it is not terminated + kill $(cat $(rbd_watch_pid_file ${image})) || : + + # output rbd watch out file for easier troubleshooting + cat $(rbd_watch_out_file ${image}) + + # cleanup + rm -f $(rbd_watch_fifo ${image}) $(rbd_watch_pid_file ${image}) \ + $(rbd_watch_out_file ${image}) $(rbd_watch_asok ${image}) +} + +wait_for_clean + +image=testimg$$ +ceph_admin="ceph --admin-daemon $(rbd_watch_asok ${image})" + +rbd create --size 128 ${image} + +# check rbd cache commands are present in help output +rbd_watch_start ${image} +${ceph_admin} help | fgrep "rbd cache flush ${image}" +${ceph_admin} help | fgrep "rbd cache invalidate ${image}" +rbd_watch_end ${image} + +# test rbd cache commands with disabled and enabled cache +for conf_rbd_cache in false true; do + + rbd image-meta set ${image} conf_rbd_cache ${conf_rbd_cache} + + rbd_watch_start ${image} + + rbd_check_perfcounter ${image} flush 0 + ${ceph_admin} rbd cache flush ${image} + # 'flush' counter should increase regardless if cache is enabled + rbd_check_perfcounter ${image} flush 1 + + rbd_check_perfcounter ${image} invalidate_cache 0 + ${ceph_admin} rbd cache invalidate ${image} + # 'invalidate_cache' counter should increase regardless if cache is enabled + rbd_check_perfcounter ${image} invalidate_cache 1 + + rbd_watch_end ${image} +done + +rbd rm ${image} diff --git a/src/test/run-rbd-tests b/src/test/run-rbd-tests index 3840e769b9ee..7ad28b469959 100755 --- a/src/test/run-rbd-tests +++ b/src/test/run-rbd-tests @@ -28,9 +28,15 @@ run_api_tests() { ceph_test_librbd } +run_admin_socket_tests() { + recreate_pool rbd + $CEPH_SRC/../qa/workunits/rbd/test_admin_socket.sh +} + ceph_test_cls_rbd run_api_tests run_cli_tests +run_admin_socket_tests export RBD_CREATE_ARGS="--format 2" run_cli_tests