Whamcloud - gitweb
LU-387 mmp.sh test_9 failed
authorNiu Yawei <niu@whamcloud.com>
Wed, 22 Jun 2011 02:00:52 +0000 (19:00 -0700)
committerJohann Lombardi <johann@whamcloud.com>
Fri, 15 Jul 2011 06:16:22 +0000 (23:16 -0700)
The mmp.sh test_9 often fail for the script killing the e2fsck process
on wrong timing, so we use some tricky way to make sure the MMP block
stay in 'e2fsck' state before mounting the device.

Signed-off-by: Niu Yawei <niu@whamcloud.com>
Change-Id: I35a2f9708fa7dd3ea0cad246b767578209feeee3
Reviewed-on: http://review.whamcloud.com/991
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Hudson
Reviewed-by: Johann Lombardi <johann@whamcloud.com>
lustre/tests/Makefile.am
lustre/tests/mmp.sh
lustre/tests/mmp_mark.sh [new file with mode: 0755]

index 98d7398..c2e4bd0 100644 (file)
@@ -22,7 +22,7 @@ noinst_SCRIPTS += lockorder.sh socketclient socketserver runmultiop_bg_pause
 noinst_SCRIPTS += recovery-mds-scale.sh run_dd.sh run_tar.sh run_iozone.sh
 noinst_SCRIPTS += run_dbench.sh run_IOR.sh recovery-double-scale.sh
 noinst_SCRIPTS += recovery-random-scale.sh parallel-scale.sh metadata-updates.sh
-noinst_SCRIPTS += ost-pools.sh rpc.sh lnet-selftest.sh obdfilter-survey.sh mmp.sh
+noinst_SCRIPTS += ost-pools.sh rpc.sh lnet-selftest.sh obdfilter-survey.sh mmp.sh mmp_mark.sh
 noinst_SCRIPTS += sgpdd-survey.sh auster.sh yaml.sh maloo_upload.sh
 nobase_noinst_SCRIPTS = cfg/local.sh
 nobase_noinst_SCRIPTS += test-groups/regression test-groups/regression-mpi
index 4eca25c..4424a0b 100755 (executable)
@@ -105,6 +105,15 @@ disable_mmp() {
     return ${PIPESTATUS[0]}
 }
 
+# Set the MMP block to 'fsck' state
+mark_mmp_block() {
+    local facet=$1
+    local device=$2
+
+    do_facet $facet "$LUSTRE/tests/mmp_mark.sh $device"
+    return ${PIPESTATUS[0]}
+}
+
 # Reset the MMP block (if any) back to the clean state.
 reset_mmp_block() {
     local facet=$1
@@ -538,10 +547,6 @@ run_test 8 "mount during e2fsck"
 
 # Test 9 - mount after aborted e2fsck (should never succeed).
 test_9() {
-    local e2fsck_pid
-    local mdt_mmp_check_interval
-    local ost_mmp_check_interval
-
     start $MMP_MDS $MMP_MDSDEV $MDS_MOUNT_OPTS || return ${PIPESTATUS[0]}
     if ! start $MMP_OSS $MMP_OSTDEV $OST_MOUNT_OPTS; then
         local rc=${PIPESTATUS[0]}
@@ -550,12 +555,8 @@ test_9() {
     fi
     stop_services primary || return ${PIPESTATUS[0]}
 
-    mdt_mmp_check_interval=$(get_mmp_check_interval $MMP_MDS $MMP_MDSDEV)
-    run_e2fsck $MMP_MDS_FAILOVER $MMP_MDSDEV "-fy" &
-    e2fsck_pid=$!
-    sleep $((2 * $mdt_mmp_check_interval))
-    kill -s ABRT $e2fsck_pid
-
+    mark_mmp_block $MMP_MDS $MMP_MDSDEV || return ${PIPESTATUS[0]}
+    
     log "Mounting $MMP_MDSDEV on $MMP_MDS..."
     if start $MMP_MDS $MMP_MDSDEV $MDS_MOUNT_OPTS; then
         error_noexit "mount $MMP_MDSDEV on $MMP_MDS should fail"
@@ -565,12 +566,7 @@ test_9() {
 
     reset_mmp_block $MMP_MDS $MMP_MDSDEV || return ${PIPESTATUS[0]}
 
-    echo
-    ost_mmp_check_interval=$(get_mmp_check_interval $MMP_OSS $MMP_OSTDEV)
-    run_e2fsck $MMP_OSS_FAILOVER $MMP_OSTDEV "-fy" &
-    e2fsck_pid=$!
-    sleep $((2 * $ost_mmp_check_interval))
-    kill -s ABRT $e2fsck_pid
+    mark_mmp_block $MMP_OSS $MMP_OSTDEV || return ${PIPESTATUS[0]}
 
     log "Mounting $MMP_OSTDEV on $MMP_OSS..."
     if start $MMP_OSS $MMP_OSTDEV $OST_MOUNT_OPTS; then
diff --git a/lustre/tests/mmp_mark.sh b/lustre/tests/mmp_mark.sh
new file mode 100755 (executable)
index 0000000..0f196ae
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/bash
+# this will cause debugfs to create the /tmp/debugfs.mark file once it has
+# passed the MMP startup, then continue reading input until it is killed
+MARKFILE=$(mktemp)
+DEBUGFS=${DEBUGFS:-debugfs}
+DEVICE=$1
+
+rm -f $MARKFILE
+echo "$DEBUGFS -w $DEVICE"
+{ echo "dump_inode <2> $MARKFILE"; cat /dev/zero; } | $DEBUGFS -w $DEVICE &
+debugfspid=$!
+while [ ! -e $MARKFILE ]; do
+        sleep 1
+done
+rm -f $MARKFILE
+kill -9 $debugfspid