Whamcloud - gitweb
conf-sanity: don't start/stop lsvcgssd/lgssd frequently.
[fs/lustre-release.git] / lustre / tests / conf-sanity.sh
index e59c7f0..ffd5b30 100644 (file)
@@ -29,7 +29,7 @@ gen_config() {
        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 mds1_svc --lov lov1 --path $MOUNT
+       add_client client mds1 --lov lov1 --path $MOUNT
 }
 
 gen_second_config() {
@@ -43,12 +43,13 @@ gen_second_config() {
 }
 
 start_mds() {
-       echo "start mds service on `facet_active_host mds`"
+       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 mds1 $@  || return 97
+       echo "stop mds1 service on `facet_active_host mds1`"
+       stop mds1 $@ || return 97
 }
 
 start_ost() {
@@ -58,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() {
@@ -86,7 +87,7 @@ setup() {
 
 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
@@ -115,7 +116,9 @@ 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
@@ -182,7 +185,17 @@ test_5() {
        # 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"
@@ -191,16 +204,21 @@ test_5() {
        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
@@ -209,16 +227,16 @@ test_5b() {
 
        [ -d $MOUNT ] || mkdir -p $MOUNT
        $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null
-       llmount $mds1_HOST://mds1_svc/client_facet $MOUNT  && exit 1
+       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
        
        # 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
 
 }
@@ -230,20 +248,41 @@ test_5c() {
 
        [ -d $MOUNT ] || mkdir -p $MOUNT
        $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null
-       llmount $mds1_HOST://wrong_mds1_svc/client_facet $MOUNT  && exit 1
+       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
        
-       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
@@ -314,18 +353,18 @@ test_9() {
         # check lconf --ptldebug/subsystem overriding lmc --ptldebug/subsystem
         start_ost
         start_mds
-        CHECK_PTLDEBUG="`do_facet mds1 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 mds1 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
@@ -379,13 +418,13 @@ test_11() {
         [ -f "$XMLCONFIG" ] && rm -f $XMLCONFIG
         add_mds mds1 --dev $MDSDEV --size $MDSSIZE
         add_ost ost --dev $OSTDEV --size $OSTSIZE
-        add_client client --mds mds1_svc --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 mds1 --dev $MDSDEV --size $MDSSIZE
         add_ost ost --dev $OSTDEV --size $OSTSIZE
-        add_client client --mds mds1_svc --path $MOUNT && return $?
+        add_client client mds1 --path $MOUNT && return $?
         echo "--add mtpt with neither --lov nor --ost will return error"
 
         echo ""
@@ -486,15 +525,14 @@ test_13() {
                        | sed "s/ /\n\r/g" | awk -F"'" '/uuid=/{print $2}'`
         FOUNDMDS2UUID=`awk -F"'" '/<mds .*uuid=/' $XMLCONFIG | sed -n '2p' \
                        | sed "s/ /\n\r/g" | awk -F"'" '/uuid=/{print $2}'`
-        if [ $EXPECTEDMDS1UUID != $FOUNDMDS1UUID ]; then
-                echo "Error:expected uuid for mds1: $EXPECTEDMDS1UUID; found: $FOUNDMDS1UUID"
-                return 1
-        fi
-        if [ $EXPECTEDMDS2UUID != $FOUNDMDS2UUID ]; then
-                echo "Error:expected uuid for mds2: $EXPECTEDMDS2UUID; found: $FOUNDMDS2UUID"
+        if ([ $EXPECTEDMDS1UUID = $FOUNDMDS1UUID ] && [ $EXPECTEDMDS2UUID = $FOUNDMDS2UUID ]) || \
+           ([ $EXPECTEDMDS1UUID = $FOUNDMDS2UUID ] && [ $EXPECTEDMDS2UUID = $FOUNDMDS1UUID ]); then
+                echo "Success:long uuid truncated successfully and being unique."
+        else
+                echo "Error:expected uuid for mds1 and mds2: $EXPECTEDMDS1UUID; $EXPECTEDMDS2UUID"
+                echo "but:     found uuid for mds1 and mds2: $FOUNDMDS1UUID; $FOUNDMDS2UUID"
                 return 1
         fi
-        echo "Success:long uuid truncated successfully and being unique."
 
         # check multiple invocations for lmc generate same XML configuration file
         rm -f $XMLCONFIG
@@ -527,7 +565,7 @@ test_14() {
             --stripe_cnt $STRIPES_PER_OBJ --stripe_pattern 0
         add_ost ost --lov lov1 --dev $OSTDEV --size $OSTSIZE \
             --mkfsoptions "-Llabel_conf_14"
-        add_client client --mds mds1_svc --lov lov1 --path $MOUNT
+        add_client client mds1 --lov lov1 --path $MOUNT
 
         FOUNDSTRING=`awk -F"<" '/<mkfsoptions>/{print $2}' $XMLCONFIG`
         EXPECTEDSTRING="mkfsoptions>-Llabel_conf_14"
@@ -575,7 +613,7 @@ test_15() {
        [ ! `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` $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"
@@ -593,6 +631,12 @@ test_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"
                                                                                                                              
@@ -603,7 +647,7 @@ test_16() {
             mount_client $MOUNT
             check_mount || return 41
             cleanup || return $?
-         fi
+        fi
                                                                                                                              
         echo "change the mode of $MDSDEV/OBJECTS,LOGS,PENDING to 555"
         [ -d $TMPMTPT ] || mkdir -p $TMPMTPT
@@ -625,24 +669,49 @@ test_16() {
         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}'`
 
-        if [ $EXPECTEDOBJECTSMODE = "0777" ]; then
-                echo "Success:Lustre change the mode of OBJECTS correctly"
+       # check if values are empty
+       test "x$EXPECTEDOBJECTSMODE" = "x" && EXPECTEDOBJECTSMODE="<empty>"
+       test "x$EXPECTEDLOGSMODE" = "x" && EXPECTEDLOGSMODE="<empty>"
+       test "x$EXPECTEDPENDINGMODE" = "x" && EXPECTEDPENDINGMODE="<empty>"
+
+       # 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 [ $EXPECTEDLOGSMODE = "0777" ]; then
-                echo "Success:Lustre change the mode of LOGS correctly"
+        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 [ $EXPECTEDPENDINGMODE = "0777" ]; then
-                echo "Success:Lustre change the mode of PENDING correctly"
+        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
 }
@@ -702,4 +771,7 @@ test_18() {
 }
 run_test 18 "check lconf creates large journals"
 
+stop_lgssd
+stop_lsvcgssd
+
 equals_msg "Done"