From c8887e8de5c50a2df707234f45d8b898b7251bfb Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Mon, 14 Mar 2016 16:47:04 +0200 Subject: [PATCH] test: fixup and improvements for rbd-mirror test Signed-off-by: Mykola Golub --- qa/workunits/rbd/rbd_mirror.sh | 59 ++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 13 deletions(-) diff --git a/qa/workunits/rbd/rbd_mirror.sh b/qa/workunits/rbd/rbd_mirror.sh index 525806010b98d0..8aaa63dc6c31f4 100755 --- a/qa/workunits/rbd/rbd_mirror.sh +++ b/qa/workunits/rbd/rbd_mirror.sh @@ -17,7 +17,12 @@ setup() local c trap cleanup INT TERM EXIT - TEMPDIR=`mktemp -d` + if [ -n "${RBD_MIRROR_TEMDIR}" ]; then + mkdir "${RBD_MIRROR_TEMDIR}" + TEMPDIR="${RBD_MIRROR_TEMDIR}" + else + TEMPDIR=`mktemp -d` + fi cd ${SRC_DIR} ./mstart.sh ${LOC_CLUSTER} -n @@ -113,26 +118,50 @@ flush() ceph --admin-daemon ${TEMPDIR}/rbd-mirror.asok ${cmd} } -wait_for_image_replay_started() +test_image_replay_state() { - local image=$1 - local image_id s + local image_id=$1 + local test_state=$2 + local current_state=stopped test -n "${RBD_MIRROR_ASOK}" + ceph --admin-daemon ${RBD_MIRROR_ASOK} help | fgrep "${image_id}" && + current_state=started + test "${test_state}" = "${current_state}" +} + +wait_for_image_replay_state() +{ + local image=$1 + local state=$2 + local image_id s + image_id=$(remote_image_id ${image}) test -n "${image_id}" # TODO: add a way to force rbd-mirror to update replayers - for s in 1 2 4 8 8 8 8 8 8 8 8; do sleep ${s} - ceph --admin-daemon ${RBD_MIRROR_ASOK} help | grep "${image_id}" && - return 0 + test_image_replay_state "${image_id}" "${state}" && return 0 done return 1 } +wait_for_image_replay_started() +{ + local image=$1 + + wait_for_image_replay_state ${image} started +} + +wait_for_image_replay_stopped() +{ + local image=$1 + + wait_for_image_replay_state ${image} stopped +} + get_position() { local image=$1 @@ -174,7 +203,7 @@ wait_for_replay_complete() local image=$1 local s master_pos mirror_pos - for s in 0.2 0.4 0.8 1.6 2 2 4 4 8; do + for s in 0.2 0.4 0.8 1.6 2 2 4 4 8 8 16 16; do sleep ${s} flush ${image} master_pos=$(get_master_position ${image}) @@ -260,6 +289,10 @@ compare_images() if [ "$1" = clean ]; then TEMPDIR=$2 + if [ -z "${TEMPDIR}" -a -n "${RBD_MIRROR_TEMDIR}" ]; then + TEMPDIR="${RBD_MIRROR_TEMDIR}" + fi + test -n "${TEMPDIR}" RBD_MIRROR_PID_FILE=${TEMPDIR}/rbd-mirror.pid @@ -274,7 +307,7 @@ set -xe setup -# add image and test replay +echo "TEST: add image and test replay" image=test create_remote_image ${image} wait_for_image_replay_started ${image} @@ -282,19 +315,19 @@ write_image ${image} 100 wait_for_replay_complete ${image} compare_images ${image} -# stop mirror, add image, start mirror and test replay +echo "TEST: stop mirror, add image, start mirror and test replay" stop_mirror image1=test1 create_remote_image ${image1} write_image ${image1} 100 start_mirror wait_for_image_replay_started ${image1} -wait_for_replay_complete ${image} +wait_for_replay_complete ${image1} compare_images ${image1} -# test the first image is replaying after restart +echo "TEST: test the first image is replaying after restart" write_image ${image} 100 -wait_for_image_replay_started ${image} +wait_for_replay_complete ${image} compare_images ${image} echo OK