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>
}
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
+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
- 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
- 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: $?"