Whamcloud - gitweb
LU-1415 tests: Add ZFS support to replay_barrier()
authorLi Wei <liwei@whamcloud.com>
Fri, 18 May 2012 03:09:55 +0000 (11:09 +0800)
committerOleg Drokin <green@whamcloud.com>
Mon, 16 Jul 2012 17:14:57 +0000 (13:14 -0400)
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 <liwei@whamcloud.com>
Reviewed-on: http://review.whamcloud.com/2981
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Reviewed-by: Mike Pershin <tappro@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/tests/replay-single.sh
lustre/tests/test-framework.sh

index a062321..66dabdd 100755 (executable)
@@ -61,6 +61,19 @@ test_0b() {
 }
 run_test 0b "ensure object created after recover exists. (3284)"
 
 }
 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
 test_0d() {
     replay_barrier $SINGLEMDS
     umount $MOUNT
index a7c660a..a081522 100644 (file)
@@ -912,6 +912,28 @@ start() {
     return $RC
 }
 
     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
 stop() {
     local running
     local facet=$1
@@ -1276,12 +1298,13 @@ remount_facet() {
 }
 
 reboot_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() {
 }
 
 boot_node() {
@@ -1921,13 +1944,14 @@ fail_nodf() {
 }
 
 fail_abort() {
 }
 
 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() {
 }
 
 do_lmc() {