X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fconf-sanity.sh;h=ffd5b3033999062d3510fa6993fa75341989de0a;hb=4ecae3cd5af60e389eba1e6eff2913b09f557203;hp=9380a2db6b5b539490bde5153d81189ba9c77b11;hpb=e0576be940d7af30b2ba6e219891a4413670325d;p=fs%2Flustre-release.git diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index 9380a2d..ffd5b30 100644 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -14,6 +14,7 @@ PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH LUSTRE=${LUSTRE:-`dirname $0`/..} RLUSTRE=${RLUSTRE:-$LUSTRE} +MOUNTLUSTRE=${MOUNTLUSTRE:-/sbin/mount.lustre} . $LUSTRE/tests/test-framework.sh @@ -24,11 +25,11 @@ init_test_env $@ gen_config() { rm -f $XMLCONFIG - add_mds mds --dev $MDSDEV --size $MDSSIZE - add_lov lov1 mds --stripe_sz $STRIPE_BYTES\ + add_mds mds1 --dev $MDSDEV --size $MDSSIZE + add_lov lov1 mds1 --stripe_sz $STRIPE_BYTES\ --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0 add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE - add_client client mds --lov lov1 --path $MOUNT + add_client client mds1 --lov lov1 --path $MOUNT } gen_second_config() { @@ -38,16 +39,17 @@ gen_second_config() { add_lov lov2 mds2 --stripe_sz $STRIPE_BYTES\ --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0 add_ost ost2 --lov lov2 --dev $OSTDEV --size $OSTSIZE - add_client client mds2 --lov lov2 --path $MOUNT2 + add_client client --mds mds2 --lov lov2 --path $MOUNT2 } start_mds() { - echo "start mds service on `facet_active_host mds`" - start mds --reformat $MDSLCONFARGS || return 94 + echo "start mds1 service on `facet_active_host mds1`" + start mds1 --reformat $MDSLCONFARGS || return 94 } + stop_mds() { - echo "stop mds service on `facet_active_host mds`" - stop mds $@ || return 97 + echo "stop mds1 service on `facet_active_host mds1`" + stop mds1 $@ || return 97 } start_ost() { @@ -57,7 +59,7 @@ start_ost() { stop_ost() { echo "stop ost service on `facet_active_host ost`" - stop ost $@ || return 98 + stop ost $@ || return 98 } mount_client() { @@ -80,15 +82,15 @@ manual_umount_client(){ setup() { start_ost start_mds - mount_client $MOUNT + mount_client $MOUNT } cleanup() { umount_client $MOUNT || return 200 - stop_mds || return 201 + stop_mds || return 201 stop_ost || return 202 # catch case where these return just fine, but modules are still not unloaded - /sbin/lsmod | grep -q portals + /sbin/lsmod | grep -q portals if [ 1 -ne $? ]; then echo "modules still loaded..." return 203 @@ -114,12 +116,14 @@ build_test_filter #create single point mountpoint gen_config - +start_krb5_kdc || exit 1 +start_lsvcgssd || return 2 +start_lgssd || return 3 test_0() { start_ost start_mds - mount_client $MOUNT + mount_client $MOUNT check_mount || return 41 cleanup || return $? } @@ -128,7 +132,7 @@ run_test 0 "single mount setup" test_1() { start_ost echo "start ost second time..." - start ost --reformat $OSTLCONFARGS + start ost --reformat $OSTLCONFARGS start_mds mount_client $MOUNT check_mount || return 42 @@ -140,16 +144,16 @@ test_2() { start_ost start_mds echo "start mds second time.." - start mds --reformat $MDSLCONFARGS + start mds1 --reformat $MDSLCONFARGS - mount_client $MOUNT + mount_client $MOUNT check_mount || return 43 cleanup || return $? } run_test 2 "start up mds twice" test_3() { - setup + setup mount_client $MOUNT check_mount || return 44 @@ -163,7 +167,7 @@ test_4() { setup touch $DIR/$tfile || return 85 stop_ost --force - cleanup + cleanup eno=$? # ok for ost to fail shutdown if [ 202 -ne $eno ]; then @@ -178,28 +182,43 @@ test_5() { touch $DIR/$tfile || return 1 stop_mds --force || return 2 - # cleanup may return an error from the failed - # disconnects; for now I'll consider this successful + # cleanup may return an error from the failed + # disconnects; for now I'll consider this successful # if all the modules have unloaded. - umount $MOUNT & + + # as MDS is down, umount without -f may cause blocking + # and this test will never finish. Blocking is possible + # as umount may want to cancel locks with RPC's and these + # RPC's will wait forever, as pinger thread will try to + # recover failed import endlessly. + # + # Thus, main point is: nobody should expect umount finish + # quickly and cleanly without -f flag when MDS or OST is + # down for sure. --umka + umount -f $MOUNT & UMOUNT_PID=$! sleep 2 echo "killing umount" kill -TERM $UMOUNT_PID echo "waiting for umount to finish" - wait $UMOUNT_PID + wait $UMOUNT_PID # cleanup client modules - $LCONF --cleanup --nosetup --node client_facet $XMLCONFIG > /dev/null + $LCONF --force --cleanup --nosetup --node client_facet $XMLCONFIG > /dev/null # stop_mds is a no-op here, and should not fail - stop_mds || return 4 - stop_ost || return 5 + stop_mds || return 4 + + # this should have --force flag specified, as umount -f + # will skip disconnect phase and thus OST will have one + # extra refcount what will cause class_cleanup() failure + # if --force is not specified. --umka + stop_ost --force || return 5 lsmod | grep -q portals && return 6 return 0 } -run_test 5 "force cleanup mds, then cleanup" +run_test 5 "force cleanup mds, then cleanup --force" test_5b() { start_ost @@ -207,17 +226,17 @@ test_5b() { stop_mds [ -d $MOUNT ] || mkdir -p $MOUNT - $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null - llmount $mds_HOST://mds_svc/client_facet $MOUNT && exit 1 + $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null + llmount -o nettype=$NETTYPE $mds_HOST://mds_svc/client_facet $MOUNT && exit 2 # cleanup client modules - $LCONF --cleanup --nosetup --node client_facet $XMLCONFIG > /dev/null + $LCONF --cleanup --nosetup --node client_facet $XMLCONFIG > /dev/null # stop_mds is a no-op here, and should not fail - stop_mds || return 2 - stop_ost || return 3 + stop_mds || return 3 + stop_ost || return 4 - lsmod | grep -q portals && return 3 + lsmod | grep -q portals && return 5 return 0 } @@ -228,21 +247,42 @@ test_5c() { start_mds [ -d $MOUNT ] || mkdir -p $MOUNT - $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null - llmount $mds_HOST://wrong_mds_svc/client_facet $MOUNT && exit 1 + $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null + llmount -o nettype=$NETTYPE $mds_HOST://wrong_mds_svc/client_facet $MOUNT && return 2 # cleanup client modules - $LCONF --cleanup --nosetup --node client_facet $XMLCONFIG > /dev/null + $LCONF --cleanup --nosetup --node client_facet $XMLCONFIG > /dev/null - stop_mds || return 2 - stop_ost || return 3 + stop_mds || return 3 + stop_ost || return 4 - lsmod | grep -q portals && return 3 + lsmod | grep -q portals && return 5 return 0 } run_test 5c "cleanup after failed mount (bug 2712)" +test_5d() { + start_ost + start_mds + stop_ost --force + + [ -d $MOUNT ] || mkdir -p $MOUNT + $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null + llmount -o nettype=$NETTYPE $mds_HOST://mds1_svc/client_facet $MOUNT || return 1 + + umount $MOUNT || return 2 + # cleanup client modules + $LCONF --cleanup --nosetup --node client_facet $XMLCONFIG > /dev/null + + stop_mds || return 3 + + lsmod | grep -q portals && return 4 + return 0 + +} +run_test 5d "ost down, don't crash during mount attempt" + test_6() { setup manual_umount_client @@ -263,12 +303,12 @@ test_8() { start_ost start_mds - mount_client $MOUNT - mount_client $MOUNT2 + mount_client $MOUNT + mount_client $MOUNT2 check_mount2 || return 45 umount $MOUNT - umount_client $MOUNT2 + umount_client $MOUNT2 stop_mds stop_ost @@ -279,7 +319,7 @@ test_9() { # backup the old values of PTLDEBUG and SUBSYSTEM OLDPTLDEBUG=$PTLDEBUG OLDSUBSYSTEM=$SUBSYSTEM - + # generate new configuration file with lmc --ptldebug and --subsystem PTLDEBUG="trace" SUBSYSTEM="mdc" @@ -313,18 +353,18 @@ test_9() { # check lconf --ptldebug/subsystem overriding lmc --ptldebug/subsystem start_ost start_mds - CHECK_PTLDEBUG="`do_facet mds cat /proc/sys/portals/debug`" + CHECK_PTLDEBUG="`do_facet mds1 sysctl portals.debug | cut -d= -f2`" if [ $CHECK_PTLDEBUG = "3" ]; then echo "lconf --debug success" else echo "lconf --debug: want 3, have $CHECK_PTLDEBUG" return 1 fi - CHECK_SUBSYSTEM="`do_facet mds cat /proc/sys/portals/subsystem_debug`" - if [ $CHECK_SUBSYSTEM = "20" ]; then + CHECK_SUBSYS="`do_facet mds1 sysctl portals.subsystem_debug|cut -d= -f2`" + if [ $CHECK_SUBSYS = "20" ]; then echo "lconf --subsystem success" else - echo "lconf --subsystem: want 20, have $CHECK_SUBSYSTEM" + echo "lconf --subsystem: want 20, have $CHECK_SUBSYS" return 1 fi mount_client $MOUNT @@ -340,35 +380,51 @@ test_9() { run_test 9 "test --ptldebug and --subsystem for lmc and lconf" test_10() { + echo "generate configuration with the same name for node and mds" OLDXMLCONFIG=$XMLCONFIG XMLCONFIG="broken.xml" [ -f "$XMLCONFIG" ] && rm -f $XMLCONFIG - SAMENAME="mds1" - do_lmc --add node --node $SAMENAME - do_lmc --add net --node $SAMENAME --nid $SAMENAME --nettype tcp - do_lmc --add mds --node $SAMENAME --mds $SAMENAME --nid $SAMENAME \ - --fstype ext3 --dev /dev/mds1 || return $? - do_lmc --add lov --lov lov1 --mds $SAMENAME --stripe_sz 65536 \ - --stripe_cnt 1 --stripe_pattern 0 || return $? + facet="mds1" + rm -f ${facet}active + add_facet $facet + echo "the name for node and mds is the same" + do_lmc --add mds --node ${facet}_facet --mds ${facet}_facet \ + --dev $MDSDEV --size $MDSSIZE || return $? + do_lmc --add lov --mds ${facet}_facet --lov lov1 --stripe_sz \ + $STRIPE_BYTES --stripe_cnt $STRIPES_PER_OBJ \ + --stripe_pattern 0 || return $? + add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE + facet="client" + add_facet $facet --lustre_upcall $UPCALL + do_lmc --add mtpt --node ${facet}_facet --mds mds1_facet \ + --lov lov1 --path $MOUNT + + echo "mount lustre" + start_ost + start_mds + mount_client $MOUNT + check_mount || return 41 + cleanup || return $? + echo "Success!" XMLCONFIG=$OLDXMLCONFIG } -run_test 10 "use lmc with the same name for node and mds" +run_test 10 "mount lustre with the same name for node and mds" test_11() { OLDXMLCONFIG=$XMLCONFIG XMLCONFIG="conf11.xml" [ -f "$XMLCONFIG" ] && rm -f $XMLCONFIG - add_mds mds --dev $MDSDEV --size $MDSSIZE + add_mds mds1 --dev $MDSDEV --size $MDSSIZE add_ost ost --dev $OSTDEV --size $OSTSIZE - add_client client mds --path $MOUNT --ost ost_svc || return $? + add_client client mds1 --path $MOUNT --ost ost_svc || return $? echo "Default lov config success!" - + [ -f "$XMLCONFIG" ] && rm -f $XMLCONFIG - add_mds mds --dev $MDSDEV --size $MDSSIZE + add_mds mds1 --dev $MDSDEV --size $MDSSIZE add_ost ost --dev $OSTDEV --size $OSTSIZE - add_client client mds --path $MOUNT && return $? + add_client client mds1 --path $MOUNT && return $? echo "--add mtpt with neither --lov nor --ost will return error" echo "" @@ -394,7 +450,7 @@ test_12() { else echo "matched double quote fail" return 1 - fi + fi rm -f $XMLCONFIG rm -f $BATCHFILE echo "--add net --node localhost --nid localhost.localdomain --nettype tcp" > $BATCHFILE @@ -465,17 +521,18 @@ test_13() { fi EXPECTEDMDS1UUID="e_longer_than_31characters_UUID" EXPECTEDMDS2UUID="longer_than_31characters_UUID_2" - FOUNDMDS1UUID=`awk -F"'" '//{print $2}' $XMLCONFIG` - EXPECTEDSTRING="mkfsoptions>-Llabel_conf_15" + EXPECTEDSTRING="mkfsoptions>-Llabel_conf_14" if [ $EXPECTEDSTRING != $FOUNDSTRING ]; then echo "Error: expected: $EXPECTEDSTRING; found: $FOUNDSTRING" return 1 @@ -523,7 +580,7 @@ test_14() { start_ost start_mds mount_client $MOUNT || return $? - if [ -z "`dumpe2fs -h $OSTDEV | grep label_conf_15`" ]; then + if [ -z "`dumpe2fs -h $OSTDEV | grep label_conf_14`" ]; then echo "Error: the mkoptions not applied to mke2fs of ost." return 1 fi @@ -534,4 +591,187 @@ test_14() { } run_test 14 "test mkfsoptions of ost for lmc and lconf" +cleanup_15() { + trap 0 + [ -f $MOUNTLUSTRE ] && echo "remove $MOUNTLUSTRE" && rm -f $MOUNTLUSTRE + if [ -f $MOUNTLUSTRE.sav ]; then + echo "return original $MOUNTLUSTRE.sav to $MOUNTLUSTRE" + mv $MOUNTLUSTRE.sav $MOUNTLUSTRE + fi +} + +test_15() { + start_ost + start_mds + echo "mount lustre on ${MOUNT} with $MOUNTLUSTRE....." + if [ -f "$MOUNTLUSTRE" ]; then + echo "save $MOUNTLUSTRE to $MOUNTLUSTRE.sav" + mv $MOUNTLUSTRE $MOUNTLUSTRE.sav + fi + [ -f "$MOUNTLUSTRE" ] && echo "can't move $MOUNTLUSTRE" && return 40 + trap cleanup_15 EXIT INT + [ ! `cp $LUSTRE/utils/llmount $MOUNTLUSTRE` ] || return $? + do_node `hostname` mkdir -p $MOUNT 2> /dev/null + # load llite module on the client if it isn't in /lib/modules + do_node `hostname` $LCONF --nosetup --node client_facet $XMLCONFIG + do_node `hostname` mount -t lustre -o nettype=$NETTYPE \ + `facet_active_host mds1`:/mds1_svc/client_facet $MOUNT ||return $? + echo "mount lustre on $MOUNT with $MOUNTLUSTRE: success" + [ -d /r ] && $LCTL modules > /r/tmp/ogdb-`hostname` + check_mount || return 41 + do_node `hostname` umount $MOUNT + + [ -f "$MOUNTLUSTRE" ] && rm -f $MOUNTLUSTRE + echo "mount lustre on ${MOUNT} without $MOUNTLUSTRE....." + do_node `hostname` mount -t lustre -o nettype=$NETTYPE \ + `facet_active_host mds1`:/mds1_svc/client_facet $MOUNT &&return $? + echo "mount lustre on $MOUNT without $MOUNTLUSTRE failed as expected" + cleanup || return $? + cleanup_15 +} +run_test 15 "zconf-mount without /sbin/mount.lustre (should return error)" + +is_digit() { + local value=$1 + echo $value | grep -q "^[[:digit:]]*$" + return $? +} + +test_16() { + TMPMTPT="/mnt/conf16" + + if [ ! -f "$MDSDEV" ]; then + echo "no $MDSDEV existing, so mount Lustre to create one" + start_ost + start_mds + mount_client $MOUNT + check_mount || return 41 + cleanup || return $? + fi + + echo "change the mode of $MDSDEV/OBJECTS,LOGS,PENDING to 555" + [ -d $TMPMTPT ] || mkdir -p $TMPMTPT + mount -o loop -t ext3 $MDSDEV $TMPMTPT || return $? + chmod 555 $TMPMTPT/OBJECTS || return $? + chmod 555 $TMPMTPT/LOGS || return $? + chmod 555 $TMPMTPT/PENDING || return $? + umount $TMPMTPT || return $? + + echo "mount Lustre to change the mode of OBJECTS/LOGS/PENDING, then umount Lustre" + start_ost + start_mds + mount_client $MOUNT + check_mount || return 41 + cleanup || return $? + + echo "read the mode of OBJECTS/LOGS/PENDING and check if they has been changed properly" + EXPECTEDOBJECTSMODE=`debugfs -R "stat OBJECTS" $MDSDEV 2> /dev/null | awk '/Mode: /{print $6}'` + EXPECTEDLOGSMODE=`debugfs -R "stat LOGS" $MDSDEV 2> /dev/null | awk '/Mode: /{print $6}'` + EXPECTEDPENDINGMODE=`debugfs -R "stat PENDING" $MDSDEV 2> /dev/null | awk '/Mode: /{print $6}'` + + # check if values are empty + test "x$EXPECTEDOBJECTSMODE" = "x" && EXPECTEDOBJECTSMODE="" + test "x$EXPECTEDLOGSMODE" = "x" && EXPECTEDLOGSMODE="" + test "x$EXPECTEDPENDINGMODE" = "x" && EXPECTEDPENDINGMODE="" + + # check if values are valid digits + is_digit $EXPECTEDOBJECTSMODE || { + echo "Invalid OBJECTS mode obtained from debugfs: $EXPECTEDOBJECTSMODE" + return 42 + } + + is_digit $EXPECTEDLOGSMODE || { + echo "Invalid LOGS mode obtained from debugfs: $EXPECTEDLOGSMODE" + return 42 + } + + is_digit $EXPECTEDPENDINGMODE || { + echo "Invalid PINDING mode obtained from debugfs: $EXPECTEDPENDINGMODE" + return 42 + } + + # check if values are those we expected + if [ "x$EXPECTEDOBJECTSMODE" = "x0777" ]; then + echo "Success: Lustre change the mode of OBJECTS correctly" + else + echo "Error: Lustre does not change the mode of OBJECTS properly" + echo "Expected value: 0777, actual one: $EXPECTEDOBJECTSMODE" + return 1 + fi + + if [ "x$EXPECTEDLOGSMODE" = "x0777" ]; then + echo "Success: Lustre change the mode of LOGS correctly" + else + echo "Error: Lustre does not change the mode of LOGS properly" + echo "Expected value: 0777, actual one: $EXPECTEDLOGSMODE" + return 1 + fi + + if [ "x$EXPECTEDPENDINGMODE" = "x0777" ]; then + echo "Success: Lustre change the mode of PENDING correctly" + else + echo "Error: Lustre does not change the mode of PENDING properly" + echo "Expected value: 0777, actual one: $EXPECTEDPENDINGMODE" + return 1 + fi +} +run_test 16 "verify that lustre will correct the mode of OBJECTS/LOGS/PENDING" + +test_17() { + TMPMTPT="/mnt/conf17" + + if [ ! -f "$MDSDEV" ]; then + echo "no $MDSDEV existing, so mount Lustre to create one" + start_ost + start_mds + mount_client $MOUNT + check_mount || return 41 + cleanup || return $? + fi + + echo "Remove mds config log" + [ -d $TMPMTPT ] || mkdir -p $TMPMTPT + mount -o loop -t ext3 $MDSDEV $TMPMTPT || return $? + rm -f $TMPMTPT/LOGS/mds1_svc || return $? + umount $TMPMTPT || return $? + + start_ost + start mds1 $MDSLCONFARGS && return 42 + cleanup || return $? +} +run_test 17 "Verify failed mds_postsetup won't fail assertion (2936)" + +test_18() { + [ -f $MDSDEV ] && echo "remove $MDSDEV" && rm -f $MDSDEV + echo "mount mds with large journal..." + OLDMDSSIZE=$MDSSIZE + MDSSIZE=2000000 + gen_config + + echo "mount lustre system..." + start_ost + start_mds + mount_client $MOUNT + check_mount || return 41 + + echo "check journal size..." + FOUNDJOURNALSIZE=`debugfs -R "stat <8>" $MDSDEV | awk '/Size: / { print $6; exit;}'` + if [ $FOUNDJOURNALSIZE = "79691776" ]; then + echo "Success:lconf creates large journals" + else + echo "Error:lconf not create large journals correctly" + echo "expected journal size: 79691776(76M), found journal size: $FOUNDJOURNALSIZE" + return 1 + fi + + cleanup || return $? + + MDSSIZE=$OLDMDSSIZE + gen_config +} +run_test 18 "check lconf creates large journals" + +stop_lgssd +stop_lsvcgssd + equals_msg "Done"