From 8310a44373b8f7b56980603d29fcde16f1e75a2a Mon Sep 17 00:00:00 2001 From: Yu Jian Date: Wed, 22 Aug 2012 12:04:44 +0800 Subject: [PATCH] LU-1762 tests: get correct MMP update and check intervals This patch fixes the get_mmp_update_interval() and get_mmp_check_interval() in mmp.sh to get the correct MMP update and check intervals from both the old and new outputs of debugfs. The patch also improves test_8() to increase the running time of e2fsck to allow mount operation to be started before e2fsck operation stops. Test-Parameters: testlist=mmp Signed-off-by: Yu Jian Change-Id: I47a8759c97bf09a73a6bc4ed7a03ff0929c7127f Reviewed-on: http://review.whamcloud.com/3743 Reviewed-by: Andreas Dilger Tested-by: Hudson Tested-by: Maloo Reviewed-by: Minh Diep --- lustre/tests/Makefile.am | 2 +- lustre/tests/e2fsck.exp | 28 ---------------- lustre/tests/mmp.sh | 86 +++++++++++++++++++++++++++++------------------- 3 files changed, 53 insertions(+), 63 deletions(-) delete mode 100755 lustre/tests/e2fsck.exp diff --git a/lustre/tests/Makefile.am b/lustre/tests/Makefile.am index 00b32fa..c8dd697 100644 --- a/lustre/tests/Makefile.am +++ b/lustre/tests/Makefile.am @@ -28,7 +28,7 @@ noinst_SCRIPTS += lnet-selftest.sh obdfilter-survey.sh mmp.sh mmp_mark.sh noinst_SCRIPTS += sgpdd-survey.sh maloo_upload.sh auster setup-nfs.sh noinst_SCRIPTS += mds-survey.sh parallel-scale-nfs.sh noinst_SCRIPTS += parallel-scale-nfsv3.sh parallel-scale-nfsv4.sh -noinst_SCRIPTS += posix.sh sanity-scrub.sh scrub-performance.sh e2fsck.exp +noinst_SCRIPTS += posix.sh sanity-scrub.sh scrub-performance.sh nobase_noinst_SCRIPTS = cfg/local.sh nobase_noinst_SCRIPTS += test-groups/regression test-groups/regression-mpi nobase_noinst_SCRIPTS += acl/make-tree acl/run cfg/ncli.sh diff --git a/lustre/tests/e2fsck.exp b/lustre/tests/e2fsck.exp deleted file mode 100755 index 6a41a6c..0000000 --- a/lustre/tests/e2fsck.exp +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/expect -f -# -# This expect script invokes e2fsck to check the filesystem -# on a device and allows e2fsck to be run interactively. -# -set env(PATH) "/usr/bin:/bin:/usr/sbin:/sbin" - -log_user 1 - -if {$argc == 1} { - set dev [lindex $argv 0] -} else { - set prog [lindex [split $argv0 "/"] end] - send_user "Usage: $prog \r\n" - exit 1 -} - -spawn e2fsck -f $dev -expect { - -gl "? " { - sleep 30 - send "yes\r" - exp_continue - } - -gl "FILE SYSTEM WAS MODIFIED" { - exit 0 - } -} diff --git a/lustre/tests/mmp.sh b/lustre/tests/mmp.sh index 3128691..1da9830 100755 --- a/lustre/tests/mmp.sh +++ b/lustre/tests/mmp.sh @@ -136,28 +136,41 @@ mmp_is_enabled() { # Get MMP update interval (in seconds) from the Lustre server target. get_mmp_update_interval() { - local facet=$1 - local device=$2 - local interval + local facet=$1 + local device=$2 + local interval - interval=$(do_facet $facet "$DEBUGFS -c -R dump_mmp $device 2>/dev/null \ - | grep 'MMP Update Interval' | cut -d' ' -f4") - [ -z "$interval" ] && interval=1 + interval=$(do_facet $facet \ + "$DEBUGFS -c -R dump_mmp $device 2>/dev/null" | + awk 'tolower($0) ~ /update.interval/ { print $NF }') + [ -z "$interval" ] && interval=5 - echo $interval + echo $interval } # Get MMP check interval (in seconds) from the Lustre server target. get_mmp_check_interval() { - local facet=$1 - local device=$2 - local interval + local facet=$1 + local device=$2 + local interval - interval=$(do_facet $facet "$DEBUGFS -c -R dump_mmp $device 2>/dev/null \ - | grep 'MMP Check Interval' | cut -d' ' -f4") - [ -z "$interval" ] && interval=5 + interval=$(do_facet $facet \ + "$DEBUGFS -c -R dump_mmp $device 2>/dev/null" | + awk 'tolower($0) ~ /check.interval/ { print $NF }') + [ -z "$interval" ] && interval=5 - echo $interval + echo $interval +} + +# Adjust the MMP update interval (in seconds) on the Lustre server target. +# Specifying an interval of 0 means to use the default interval. +set_mmp_update_interval() { + local facet=$1 + local device=$2 + local interval=${3:-0} + + do_facet $facet "$TUNE2FS -E mmp_update_interval=$interval $device" + return ${PIPESTATUS[0]} } # Enable the MMP feature on the Lustre server targets. @@ -391,24 +404,14 @@ mount_after_reboot() { # Run e2fsck on the Lustre server target. run_e2fsck() { - local facet=$1 - shift - local device=$1 - shift - local opts="$@" - - log "Running e2fsck on the device $device on $facet..." - do_facet $facet "$E2FSCK $opts $device" - return ${PIPESTATUS[0]} -} - -# Run delayed e2fsck on the Lustre server target. -run_delay_e2fsck() { local facet=$1 shift local device=$1 + shift + local opts="$@" - do_facet $facet "$LUSTRE/tests/e2fsck.exp $device" + echo "Running e2fsck on the device $device on $facet..." + do_facet $facet "$E2FSCK $opts $device" return ${PIPESTATUS[0]} } @@ -538,10 +541,19 @@ run_test 7 "mount after reboot" # Test 8 - mount during e2fsck (should never succeed). test_8() { local e2fsck_pid + local saved_interval + local new_interval - log "Force e2fsck checking on device $MMP_MDSDEV on $MMP_MDS" - do_facet $MMP_MDS "$DEBUGFS -w -R 'ssv free_blocks_count 0' $MMP_MDSDEV" - run_delay_e2fsck $MMP_MDS $MMP_MDSDEV & + # After writing a new sequence number into the MMP block, e2fsck will + # sleep at least (2 * new_interval + 1) seconds before it goes into + # e2fsck passes. + new_interval=30 + + # MDT + saved_interval=$(get_mmp_update_interval $MMP_MDS $MMP_MDSDEV) + set_mmp_update_interval $MMP_MDS $MMP_MDSDEV $new_interval + + run_e2fsck $MMP_MDS $MMP_MDSDEV "-fy" & e2fsck_pid=$! sleep 5 @@ -549,15 +561,19 @@ test_8() { error_noexit \ "mount $MMP_MDSDEV on $MMP_MDS_FAILOVER should fail" stop $MMP_MDS_FAILOVER || return ${PIPESTATUS[0]} + set_mmp_update_interval $MMP_MDS $MMP_MDSDEV $saved_interval return 1 fi wait $e2fsck_pid + set_mmp_update_interval $MMP_MDS $MMP_MDSDEV $saved_interval + # OST echo - log "Force e2fsck checking on device $MMP_OSTDEV on $MMP_OSS" - do_facet $MMP_OSS "$DEBUGFS -w -R 'ssv free_blocks_count 0' $MMP_OSTDEV" - run_delay_e2fsck $MMP_OSS $MMP_OSTDEV & + saved_interval=$(get_mmp_update_interval $MMP_OSS $MMP_OSTDEV) + set_mmp_update_interval $MMP_OSS $MMP_OSTDEV $new_interval + + run_e2fsck $MMP_OSS $MMP_OSTDEV "-fy" & e2fsck_pid=$! sleep 5 @@ -565,10 +581,12 @@ test_8() { error_noexit \ "mount $MMP_OSTDEV on $MMP_OSS_FAILOVER should fail" stop $MMP_OSS_FAILOVER || return ${PIPESTATUS[0]} + set_mmp_update_interval $MMP_OSS $MMP_OSTDEV $saved_interval return 2 fi wait $e2fsck_pid + set_mmp_update_interval $MMP_OSS $MMP_OSTDEV $saved_interval return 0 } run_test 8 "mount during e2fsck" -- 1.8.3.1