From 21cb4a379d4bac7af727f2fcc5b96d660902b0ad Mon Sep 17 00:00:00 2001 From: bobijam Date: Thu, 4 Jun 2009 01:35:12 +0000 Subject: [PATCH] Branch HEAD b=19484 i=johann i=nathan.rutman Make mount.lustre also recognize '-o force' option. --- lustre/tests/conf-sanity.sh | 96 ++++++++++++++++++++++----------------------- lustre/utils/mount_lustre.c | 9 +++-- 2 files changed, 54 insertions(+), 51 deletions(-) diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index 0f89166..6f9ba5d 100644 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -14,7 +14,7 @@ ONLY=${ONLY:-"$*"} # bug number for skipped test: 13739 19280 HEAD_EXCEPT=" 32a 50e 50f" -# bug number for skipped test: +# bug number for skipped test: ALWAYS_EXCEPT=" $CONF_SANITY_EXCEPT $HEAD_EXCEPT" # UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT! @@ -63,7 +63,7 @@ writeconf() { gen_config() { # The MGS must be started before the OSTs for a new fs, so start - # and stop to generate the startup logs. + # and stop to generate the startup logs. start_mds start_ost wait_osc_import_state mds ost FULL @@ -169,17 +169,17 @@ cleanup() { check_mount() { do_facet client "cp /etc/passwd $DIR/a" || return 71 do_facet client "rm $DIR/a" || return 72 - # make sure lustre is actually mounted (touch will block, - # but grep won't, so do it after) + # make sure lustre is actually mounted (touch will block, + # but grep won't, so do it after) do_facet client "grep $MOUNT' ' /proc/mounts > /dev/null" || return 73 echo "setup single mount lustre success" } check_mount2() { - do_facet client "touch $DIR/a" || return 71 - do_facet client "rm $DIR/a" || return 72 - do_facet client "touch $DIR2/a" || return 73 - do_facet client "rm $DIR2/a" || return 74 + do_facet client "touch $DIR/a" || return 71 + do_facet client "rm $DIR/a" || return 72 + do_facet client "touch $DIR2/a" || return 73 + do_facet client "rm $DIR2/a" || return 74 echo "setup double mount lustre success" } @@ -388,7 +388,7 @@ test_9() { CHECK_PTLDEBUG="`do_facet ost1 lctl get_param -n debug`" if [ "$CHECK_PTLDEBUG" ] && { \ [ "$CHECK_PTLDEBUG" = "trace inode warning error emerg console" ] || - [ "$CHECK_PTLDEBUG" = "trace inode" ]; }; then + [ "$CHECK_PTLDEBUG" = "trace inode" ]; }; then echo "lnet.debug success" else echo "lnet.debug: want 'trace inode', have '$CHECK_PTLDEBUG'" @@ -619,7 +619,7 @@ run_test 22 "start a client before osts (should return errs)" test_23a() { # was test_23 setup # fail mds - stop $SINGLEMDS + stop $SINGLEMDS # force down client so that recovering mds waits for reconnect local running=$(grep -c $MOUNT /proc/mounts) || true if [ $running -ne 0 ]; then @@ -692,7 +692,7 @@ cleanup_24a() { } test_24a() { - #set up fs1 + #set up fs1 gen_config #set up fs2 [ -n "$ost1_HOST" ] && fs2ost_HOST=$ost1_HOST @@ -727,11 +727,11 @@ test_24a() { rm $MOUNT2/b || return 4 # 2 is actually mounted grep $MOUNT2' ' /proc/mounts > /dev/null || return 5 - # failover + # failover facet_failover fs2mds facet_failover fs2ost df - umount_client $MOUNT + umount_client $MOUNT # the MDS must remain up until last MDT stop_mds MDS=$(do_facet $SINGLEMDS "lctl get_param -n devices" | awk '($3 ~ "mdt" && $4 ~ "MDT") { print $4 }' | head -1) @@ -749,7 +749,7 @@ test_24b() { local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2} - add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME}2 --mgs --reformat $fs2mdsdev || exit 10 + add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME}2 --mgs --reformat $fs2mdsdev || exit 10 setup start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && return 2 cleanup || return 6 @@ -783,7 +783,7 @@ set_and_check() { local myfacet=$1 local TEST=$2 local PARAM=$3 - local ORIG=$(do_facet $myfacet "$TEST") + local ORIG=$(do_facet $myfacet "$TEST") if [ $# -gt 3 ]; then local FINAL=$4 else @@ -799,8 +799,8 @@ set_and_check() { test_27a() { start_ost || return 1 start_mds || return 2 - echo "Requeue thread should have started: " - ps -e | grep ll_cfg_requeue + echo "Requeue thread should have started: " + ps -e | grep ll_cfg_requeue set_and_check ost1 "lctl get_param -n obdfilter.$FSNAME-OST0000.client_cache_seconds" "$FSNAME-OST0000.ost.client_cache_seconds" || return 3 cleanup_nocli } @@ -864,7 +864,7 @@ test_29() { echo "Live client success: got $RESULT" fi - # check MDT too + # check MDT too local MPROC="osc.$FSNAME-OST0001-osc-[M]*.active" local MAX=30 local WAIT=0 @@ -915,10 +915,10 @@ test_30() { for i in ${LIST[@]}; do set_and_check client "$TEST" "$FSNAME.llite.max_read_ahead_whole_mb" $i || return 3 done - # make sure client restart still works + # make sure client restart still works umount_client $MOUNT mount_client $MOUNT || return 4 - [ "$($TEST)" -ne "$i" ] && return 5 + [ "$($TEST)" -ne "$i" ] && return 5 set_and_check client "$TEST" "$FSNAME.llite.max_read_ahead_whole_mb" $ORIG || return 6 cleanup } @@ -932,7 +932,7 @@ test_31() { # bug 10734 run_test 31 "Connect to non-existent node (shouldn't crash)" # Use these start32/stop32 fn instead of t-f start/stop fn, -# for local devices, to skip global facet vars init +# for local devices, to skip global facet vars init stop32 () { local facet=$1 shift @@ -954,7 +954,7 @@ start32 () { if [ $RC -ne 0 ]; then echo "mount -t lustre $@ ${device} ${MOUNT%/*}/${facet}" echo "Start of ${device} of local ${facet} failed ${RC}" - fi + fi losetup -a return $RC } @@ -994,24 +994,24 @@ test_32a() { # nids are wrong, so client wont work, but server should start start32 mds $tmpdir/mds "-o loop,exclude=lustre-OST0000" && \ trap cleanup_32 EXIT INT || return 3 - + local UUID=$(lctl get_param -n mds.lustre-MDT0000.uuid) echo MDS uuid $UUID - [ "$UUID" == "mdsA_UUID" ] || error "UUID is wrong: $UUID" + [ "$UUID" == "mdsA_UUID" ] || error "UUID is wrong: $UUID" $TUNEFS --mgsnode=`hostname` $tmpdir/ost1 || error "tunefs failed" start32 ost1 $tmpdir/ost1 "-o loop" || return 5 UUID=$(lctl get_param -n obdfilter.lustre-OST0000.uuid) echo OST uuid $UUID - [ "$UUID" == "ost1_UUID" ] || error "UUID is wrong: $UUID" + [ "$UUID" == "ost1_UUID" ] || error "UUID is wrong: $UUID" local NID=$($LCTL list_nids | head -1) - echo "OSC changes should return err:" + echo "OSC changes should return err:" $LCTL conf_param lustre-OST0000.osc.max_dirty_mb=15 && return 7 $LCTL conf_param lustre-OST0000.failover.node=$NID && return 8 echo "ok." - echo "MDC changes should succeed:" + echo "MDC changes should succeed:" $LCTL conf_param lustre-MDT0000.mdc.max_rpcs_in_flight=9 || return 9 $LCTL conf_param lustre-MDT0000.failover.node=$NID || return 10 echo "ok." @@ -1067,7 +1067,7 @@ test_32b() { local UUID=$(lctl get_param -n mdt.${NEWNAME}-MDT0000.uuid) echo MDS uuid $UUID - [ "$UUID" == "${NEWNAME}-MDT0000_UUID" ] || error "UUID is wrong: $UUID" + [ "$UUID" == "${NEWNAME}-MDT0000_UUID" ] || error "UUID is wrong: $UUID" $TUNEFS --mgsnode=`hostname` --writeconf --fsname=$NEWNAME $tmpdir/ost1 || error "tunefs failed" start32 ost1 $tmpdir/ost1 "-o loop" || return 5 @@ -1075,11 +1075,11 @@ test_32b() { echo OST uuid $UUID [ "$UUID" == "${NEWNAME}-OST0000_UUID" ] || error "UUID is wrong: $UUID" - echo "OSC changes should succeed:" + echo "OSC changes should succeed:" $LCTL conf_param ${NEWNAME}-OST0000.osc.max_dirty_mb=15 || return 7 $LCTL conf_param ${NEWNAME}-OST0000.failover.node=$NID || return 8 echo "ok." - echo "MDC changes should succeed:" + echo "MDC changes should succeed:" $LCTL conf_param ${NEWNAME}-MDT0000.mdc.max_rpcs_in_flight=9 || return 9 echo "ok." @@ -1127,7 +1127,7 @@ test_33a() { # bug 12333, was test_33 mount -t lustre $MGSNID:/${FSNAME2} $MOUNT2 || rc=2 echo "ok." - cp /etc/hosts $MOUNT2/ || rc=3 + cp /etc/hosts $MOUNT2/ || rc=3 $LFS getstripe $MOUNT2/hosts umount -d $MOUNT2 @@ -1293,17 +1293,17 @@ test_36() { # 12743 ALLOWANCE=$((64 * $OSTCOUNT)) - if [ $DFTOTAL -lt $(($BKTOTAL - $ALLOWANCE)) ] || + if [ $DFTOTAL -lt $(($BKTOTAL - $ALLOWANCE)) ] || [ $DFTOTAL -gt $(($BKTOTAL + $ALLOWANCE)) ] ; then echo "**** FAIL: df total($DFTOTAL) mismatch OST total($BKTOTAL)" rc=1 fi - if [ $DFFREE -lt $(($BKFREE - $ALLOWANCE)) ] || + if [ $DFFREE -lt $(($BKFREE - $ALLOWANCE)) ] || [ $DFFREE -gt $(($BKFREE + $ALLOWANCE)) ] ; then echo "**** FAIL: df free($DFFREE) mismatch OST free($BKFREE)" rc=2 fi - if [ $DFAVAIL -lt $(($BKAVAIL - $ALLOWANCE)) ] || + if [ $DFAVAIL -lt $(($BKAVAIL - $ALLOWANCE)) ] || [ $DFAVAIL -gt $(($BKAVAIL + $ALLOWANCE)) ] ; then echo "**** FAIL: df avail($DFAVAIL) mismatch OST avail($BKAVAIL)" rc=3 @@ -1408,7 +1408,7 @@ test_39() { PTLDEBUG=+malloc setup cleanup - perl $SRCDIR/leak_finder.pl $TMP/debug 2>&1 | egrep '*** Leak:' && + perl $SRCDIR/leak_finder.pl $TMP/debug 2>&1 | egrep '*** Leak:' && error "memory leak detected" || true } run_test 39 "leak_finder recognizes both LUSTRE and LNET malloc messages" @@ -1429,7 +1429,7 @@ test_41() { #bug 14134 start $SINGLEMDS $MDSDEV $MDS_MOUNT_OPTS -o nosvc -n start ost1 `ostdevname 1` $OST_MOUNT_OPTS - start $SINGLEMDS $MDSDEV $MDS_MOUNT_OPTS -o nomgs + start $SINGLEMDS $MDSDEV $MDS_MOUNT_OPTS -o nomgs,force mkdir -p $MOUNT mount_client $MOUNT || return 1 sleep 5 @@ -1590,7 +1590,7 @@ test_46a() { wait_osc_import_state mds ost FULL #start_client mount_client $MOUNT || return 3 - + start_ost2 || return 4 start ost3 `ostdevname 3` $OST_MOUNT_OPTS || return 5 start ost4 `ostdevname 4` $OST_MOUNT_OPTS || return 6 @@ -1610,7 +1610,7 @@ test_46a() { echo "ok" > $MOUNT2/widestripe $LFS getstripe $MOUNT2/widestripe || return 11 # fill acl buffer for avoid expand lsm to them - awk -F : '{if (FNR < 25) { print "u:"$1":rwx" }}' /etc/passwd | while read acl; do + awk -F : '{if (FNR < 25) { print "u:"$1":rwx" }}' /etc/passwd | while read acl; do setfacl -m $acl $MOUNT2/widestripe done @@ -1644,7 +1644,7 @@ test_47() { #17674 lru_size[count]=$lrs let count=count+1 done - + facet_failover ost1 facet_failover $SINGLEMDS df -h $MOUNT || return 3 @@ -1733,7 +1733,7 @@ test_49() { # bug 17710 stop_mds || return 3 OST_MKFS_OPTS="--ost --fsname=$FSNAME --device-size=$OSTSIZE --mgsnode=$MGSNID --param sys.timeout=$LOCAL_TIMEOUT --param sys.ldlm_timeout=$((LOCAL_TIMEOUT - 1)) $MKFSOPT $OSTOPT" - + reformat start_mds || return 4 start_ost || return 5 @@ -1747,11 +1747,11 @@ test_49() { # bug 17710 if [ $LDLM_MDS -ne $LDLM_OST1 ] || [ $LDLM_MDS -ne $LDLM_CLIENT ]; then error "Different LDLM_TIMEOUT:$LDLM_MDS $LDLM_OST1 $LDLM_CLIENT" fi - + if [ $LDLM_MDS -ne $((LOCAL_TIMEOUT - 1)) ]; then error "LDLM_TIMEOUT($LDLM_MDS) is not correct" fi - + cleanup || return $? MDS_MKFS_OPTS=$OLD_MDS_MKFS_OPTS @@ -1865,7 +1865,7 @@ test_50e() { mount_client $MOUNT || error "Unable to mount client" lctl set_param llite.$FSNAME-*.lazystatfs=0 - + multiop_bg_pause $MOUNT _f RC1=$? pid=$! @@ -1877,12 +1877,12 @@ test_50e() { sleep $(( $TIMEOUT+1 )) kill -0 $pid [ $? -ne 0 ] && error "process isn't sleep" - start_ost || error "Unable to start OST1" + start_ost || error "Unable to start OST1" wait $pid || error "statfs failed" fi umount_client $MOUNT || error "Unable to unmount client" - stop_ost || error "Unable to stop OST1" + stop_ost || error "Unable to stop OST1" stop_mds || error "Unable to stop MDS" } run_test 50e "normal statfs all servers down ==========================" @@ -1906,7 +1906,7 @@ test_50f() { wait_osc_import_state mds ost2 DISCONN mount_client $MOUNT || error "Unable to mount client" lctl set_param llite.$FSNAME-*.lazystatfs=0 - + multiop_bg_pause $MOUNT _f RC1=$? pid=$! @@ -1918,12 +1918,12 @@ test_50f() { sleep $(( $TIMEOUT+1 )) kill -0 $pid [ $? -ne 0 ] && error "process isn't sleep" - start_ost2 || error "Unable to start OST1" + start_ost2 || error "Unable to start OST1" wait $pid || error "statfs failed" fi umount_client $MOUNT || error "Unable to unmount client" - stop_ost || error "Unable to stop OST1" + stop_ost || error "Unable to stop OST1" stop_mds || error "Unable to stop MDS" writeconf } diff --git a/lustre/utils/mount_lustre.c b/lustre/utils/mount_lustre.c index 87543eb..04cbcae 100644 --- a/lustre/utils/mount_lustre.c +++ b/lustre/utils/mount_lustre.c @@ -82,7 +82,7 @@ void usage(FILE *out) "\t: name of the Lustre filesystem (e.g. lustre1)\n" "\t: filesystem mountpoint (e.g. /mnt/lustre)\n" "\t-f|--fake: fake mount (updates /etc/mtab)\n" - "\t--force: force mount even if already in /etc/mtab\n" + "\t-o force|--force: force mount even if already in /etc/mtab\n" "\t-h|--help: print this usage message\n" "\t-n|--nomtab: do not update /etc/mtab after mount\n" "\t-v|--verbose: print verbose config settings\n" @@ -286,8 +286,11 @@ int parse_options(char *orig_options, int *flagp) retry = MAX_RETRIES; else if (retry < 0) retry = 0; - } - else if (parse_one_option(opt, flagp) == 0) { + } else if (strncmp(opt, "force", 5) == 0) { + //XXX special check for 'force' option + ++force; + printf("force: %d\n", force); + } else if (parse_one_option(opt, flagp) == 0) { /* pass this on as an option */ if (*options) strcat(options, ","); -- 1.8.3.1