From 01ef1c8c269ad4f7d66c4bc7e334df5db90f1cae Mon Sep 17 00:00:00 2001 From: Li Wei Date: Fri, 18 May 2012 11:09:55 +0800 Subject: [PATCH] LU-1415 tests: Add ZFS support to replay_barrier() This patch makes sure that ZFS pool states changed by replay_barrier() calls are restored upon subsequent failovers. This was originally developed by Mikhail Pershin under ORI-156. See http://review.whamcloud.com/1490. Change-Id: Ie8d26bc8a6d6103be3c504e0af80e8499096df58 Whamcloud-bug-id: ORI-156 Signed-off-by: Li Wei Reviewed-on: http://review.whamcloud.com/2981 Tested-by: Hudson Tested-by: Maloo Reviewed-by: Brian Behlendorf Reviewed-by: Mike Pershin Reviewed-by: Oleg Drokin --- lustre/tests/replay-single.sh | 13 +++++++++++ lustre/tests/test-framework.sh | 50 +++++++++++++++++++++++++++++++----------- 2 files changed, 50 insertions(+), 13 deletions(-) diff --git a/lustre/tests/replay-single.sh b/lustre/tests/replay-single.sh index a062321..66dabdd 100755 --- a/lustre/tests/replay-single.sh +++ b/lustre/tests/replay-single.sh @@ -61,6 +61,19 @@ test_0b() { } run_test 0b "ensure object created after recover exists. (3284)" +test_0c() { + replay_barrier $SINGLEMDS + mcreate $DIR/$tfile + umount $MOUNT + facet_failover $SINGLEMDS + zconf_mount `hostname` $MOUNT || error "mount fails" + client_up || error "post-failover df failed" + # file shouldn't exist if replay-barrier works as expected + rm $DIR/$tfile && return 1 + return 0 +} +run_test 0c "check replay-barrier" + test_0d() { replay_barrier $SINGLEMDS umount $MOUNT diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh index a7c660a..a081522 100644 --- a/lustre/tests/test-framework.sh +++ b/lustre/tests/test-framework.sh @@ -912,6 +912,28 @@ start() { return $RC } +refresh_disk() { + local facet=$1 + local fstype=$(facet_fstype $facet) + local _dev + local dev + local poolname + + if [ "${fstype}" == "zfs" ]; then + _dev=$(facet_active $facet)_dev + dev=${!_dev} # expand _dev to its value, e.g. ${mds1_dev} + poolname="${dev%%/*}" # poolname is string before "/" + + if [ "${poolname}" == "" ]; then + echo "invalid dataset name: $dev" + return + fi + do_facet $facet "cp /etc/zfs/zpool.cache /tmp/zpool.cache.back" + do_facet $facet "$ZPOOL export ${poolname}" + do_facet $facet "$ZPOOL import -f -c /tmp/zpool.cache.back ${poolname}" + fi +} + stop() { local running local facet=$1 @@ -1276,12 +1298,13 @@ remount_facet() { } reboot_facet() { - local facet=$1 - if [ "$FAILURE_MODE" = HARD ]; then - reboot_node $(facet_active_host $facet) - else - sleep 10 - fi + local facet=$1 + if [ "$FAILURE_MODE" = HARD ]; then + reboot_node $(facet_active_host $facet) + else + refresh_disk ${facet} + sleep 10 + fi } boot_node() { @@ -1921,13 +1944,14 @@ fail_nodf() { } fail_abort() { - local facet=$1 - stop $facet - change_active $facet - wait_for_facet $facet - mount_facet $facet -o abort_recovery - clients_up || echo "first df failed: $?" - clients_up || error "post-failover df: $?" + local facet=$1 + stop $facet + refresh_disk ${facet} + change_active $facet + wait_for_facet $facet + mount_facet $facet -o abort_recovery + clients_up || echo "first df failed: $?" + clients_up || error "post-failover df: $?" } do_lmc() { -- 1.8.3.1