From a3becc1092524366e13b3c72d61c6b0ea82709f7 Mon Sep 17 00:00:00 2001 From: Bruno Faccini Date: Fri, 1 Jul 2016 01:11:14 +0200 Subject: [PATCH] LU-8295 tests: comply with OBD_RACE() behavior Have conf-sanity/test_41c better comply with OBD_RACE() internal behavior when creating a racy situation with 2 similar mount cmds being run in parallel. CFS_FAIL_ONCE must be set, and fail_loc must only be reset when it is sure that both mount commands have reached the race rendez-vous, in order to have OBD_RACE() behave as expected. start() function is no longer used to avoid extra tools which surround mount command to interfer due to concurrency. Signed-off-by: Bruno Faccini Change-Id: Ic513c82c4fd1395d88144cf1c590a08dfd3c11e5 Reviewed-on: https://review.whamcloud.com/21117 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: John L. Hammond Reviewed-by: Jian Yu Reviewed-by: Oleg Drokin --- lustre/tests/conf-sanity.sh | 58 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 12 deletions(-) diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index a4be4c1..76934d3 100755 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -2881,24 +2881,45 @@ test_41c() { $server_version -lt $(version_code 2.5.11) ]] || { skip "Need MDS version 2.5.4+ or 2.5.26+ or 2.6.52+"; return; } + # ensure mds1 ost1 have been created even if running sub-test standalone cleanup + setup + cleanup || error "cleanup failed" + + # using directly mount command instead of start() function to avoid + # any side effect of // with others/externals tools/features + # ("zpool import", ...) + # MDT concurrent start LOAD_MODULES_REMOTE=true load_modules do_facet $SINGLEMDS "lsmod | grep -q libcfs" || error "MDT concurrent start: libcfs module not loaded" + local mds1dev=$(mdsdevname 1) + local mds1mnt=$(facet_mntpt mds1) + local mds1fstype=$(facet_fstype mds1) + local mds1opts=$MDS_MOUNT_OPTS + + if [ $mds1fstype == ldiskfs ] && + ! do_facet mds1 test -b $mds1dev; then + mds1opts=$(csa_add "$mds1opts" -o loop) + fi + if [[ $mds1fstype == zfs ]]; then + import_zpool mds1 || return ${PIPESTATUS[0]} + fi + #define OBD_FAIL_TGT_MOUNT_RACE 0x716 - do_facet $SINGLEMDS "$LCTL set_param fail_loc=0x716" - start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS & + do_facet mds1 "$LCTL set_param fail_loc=0x80000716" + + do_facet mds1 mount -t lustre $mds1dev $mds1mnt $mds1opts & local pid=$! - start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS & - do_facet $SINGLEMDS "$LCTL set_param fail_loc=0x0" - local pid2=$! - wait $pid2 + + do_facet mds1 mount -t lustre $mds1dev $mds1mnt $mds1opts local rc2=$? wait $pid local rc=$? + do_facet mds1 "$LCTL set_param fail_loc=0x0" if [ $rc -eq 0 ] && [ $rc2 -ne 0 ]; then echo "1st MDT start succeed" echo "2nd MDT start failed with $rc2" @@ -2921,17 +2942,30 @@ test_41c() { do_rpc_nodes $oss_list "lsmod | grep -q libcfs" || error "OST concurrent start: libcfs module not loaded" + local ost1dev=$(ostdevname 1) + local ost1mnt=$(facet_mntpt ost1) + local ost1fstype=$(facet_fstype ost1) + local ost1opts=$OST_MOUNT_OPTS + + if [ $ost1fstype == ldiskfs ] && + ! do_facet ost1 test -b $ost1dev; then + ost1opts=$(csa_add "$ost1opts" -o loop) + fi + if [[ $ost1fstype == zfs ]]; then + import_zpool ost1 || return ${PIPESTATUS[0]} + fi + #define OBD_FAIL_TGT_MOUNT_RACE 0x716 - do_facet ost1 "$LCTL set_param fail_loc=0x716" - start ost1 $(ostdevname 1) $OST_MOUNT_OPTS & + do_facet ost1 "$LCTL set_param fail_loc=0x80000716" + + do_facet ost1 mount -t lustre $ost1dev $ost1mnt $ost1opts & pid=$! - start ost1 $(ostdevname 1) $OST_MOUNT_OPTS & - do_facet ost1 "$LCTL set_param fail_loc=0x0" - pid2=$! - wait $pid2 + + do_facet ost1 mount -t lustre $ost1dev $ost1mnt $ost1opts rc2=$? wait $pid rc=$? + do_facet ost1 "$LCTL set_param fail_loc=0x0" if [ $rc -eq 0 ] && [ $rc2 -ne 0 ]; then echo "1st OST start succeed" echo "2nd OST start failed with $rc2" -- 1.8.3.1