Whamcloud - gitweb
conf-sanity: don't start/stop lsvcgssd/lgssd frequently.
[fs/lustre-release.git] / lustre / tests / conf-sanity.sh
index 0d8cbb1..ffd5b30 100644 (file)
@@ -46,9 +46,10 @@ start_mds() {
        echo "start mds1 service on `facet_active_host mds1`"
        start mds1 --reformat $MDSLCONFARGS  || return 94
 }
+
 stop_mds() {
        echo "stop mds1 service on `facet_active_host mds1`"
-       stop mds1 $@  || return 97
+       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 $mds_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 
+       lsmod | grep -q portals && return 5
        return 0
 
 }
@@ -230,15 +248,15 @@ test_5c() {
 
        [ -d $MOUNT ] || mkdir -p $MOUNT
        $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null
-        llmount $mds_HOST://wrong_mds1_svc/client_facet $MOUNT  && return 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 4
+       lsmod | grep -q portals && return 5
        return 0
 
 }
@@ -251,7 +269,7 @@ test_5d() {
 
        [ -d $MOUNT ] || mkdir -p $MOUNT
        $LCONF --nosetup --node client_facet $XMLCONFIG > /dev/null
-       llmount $mds_HOST://mds1_svc/client_facet $MOUNT  || return 1
+       llmount -o nettype=$NETTYPE $mds_HOST://mds1_svc/client_facet $MOUNT  || return 1
 
        umount $MOUNT || return 2
        # cleanup client modules
@@ -335,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
@@ -595,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"
@@ -613,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"
                                                                                                                              
@@ -623,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
@@ -645,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
 }
@@ -722,4 +771,7 @@ test_18() {
 }
 run_test 18 "check lconf creates large journals"
 
+stop_lgssd
+stop_lsvcgssd
+
 equals_msg "Done"