Whamcloud - gitweb
LU-4416 tests: small fixes for conf_sanity
[fs/lustre-release.git] / lustre / tests / conf-sanity.sh
index e58f466..edaf102 100644 (file)
@@ -203,7 +203,7 @@ mount_client() {
 }
 
 remount_client() {
-       local mountopt="-o remount,$1"
+       local mountopt="remount,$1"
        local MOUNTPATH=$2
        echo "remount '$1' lustre on ${MOUNTPATH}....."
        zconf_mount `hostname`  $MOUNTPATH "$mountopt"  || return 96
@@ -364,7 +364,7 @@ test_5a() { # was test_5
        wait $UMOUNT_PID
        if grep " $MOUNT " /proc/mounts; then
                echo "test 5: /proc/mounts after failed umount"
-               umount $MOUNT &
+               umount -f $MOUNT &
                UMOUNT_PID=$!
                sleep 2
                echo "killing umount"
@@ -966,6 +966,7 @@ test_24b() {
                --reformat $fs2mdsdev $fs2mdsvdev || exit 10
        setup
        start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && return 2
+       stop fs2mds -f
        cleanup || return 6
 }
 run_test 24b "Multiple MGSs on a single node (should return err)"
@@ -1233,22 +1234,30 @@ test_30b() {
        NEW=$(echo $OSTNID | sed "s/$ORIGVAL/$NEWVAL@/")
        echo "Using fake nid $NEW"
 
-       TEST="$LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import | grep failover_nids | sed -n 's/.*\($NEW\).*/\1/p'"
+       TEST="$LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import |
+               grep failover_nids | sed -n 's/.*\($NEW\).*/\1/p'"
        set_conf_param_and_check client "$TEST" \
                "$FSNAME-OST0000.failover.node" $NEW ||
                error "didn't add failover nid $NEW"
-       NIDS=$($LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import | grep failover_nids)
+       NIDS=$($LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import |
+               grep failover_nids)
        echo $NIDS
-       NIDCOUNT=$(($(echo "$NIDS" | wc -w) - 1))
+       # The NIDS value is the failover nid strings and "[" and "]". So
+       # we need to subtract the space taken by the delimiters. This has
+       # changed from earlier version of Lustre but this test is run only
+       # locally so this change will not break interop. See LU-3386
+       NIDCOUNT=$(($(echo "$NIDS" | wc -w) - 3))
        echo "should have 2 failover nids: $NIDCOUNT"
        [ $NIDCOUNT -eq 2 ] || error "Failover nid not added"
-       do_facet mgs "$LCTL conf_param -d $FSNAME-OST0000.failover.node" || error "conf_param delete failed"
+       do_facet mgs "$LCTL conf_param -d $FSNAME-OST0000.failover.node" ||
+               error "conf_param delete failed"
        umount_client $MOUNT
        mount_client $MOUNT || return 3
 
-       NIDS=$($LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import | grep failover_nids)
+       NIDS=$($LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import |
+               grep failover_nids)
        echo $NIDS
-       NIDCOUNT=$(($(echo "$NIDS" | wc -w) - 1))
+       NIDCOUNT=$(($(echo "$NIDS" | wc -w) - 3))
        echo "only 1 final nid should remain: $NIDCOUNT"
        [ $NIDCOUNT -eq 1 ] || error "Failover nids not removed"
 
@@ -2556,6 +2565,94 @@ test_41b() {
 }
 run_test 41b "mount mds with --nosvc and --nomgs on first mount"
 
+test_41c() {
+       cleanup
+       # MDT concurent start
+       #define OBD_FAIL_TGT_DELAY_CONNECT 0x703
+       do_facet $SINGLEMDS "lctl set_param fail_loc=0x703"
+       start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS &
+       local pid=$!
+       sleep 2
+       do_facet $SINGLEMDS "lctl set_param fail_loc=0x0"
+       start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS &
+       local pid2=$!
+       wait $pid2
+       local rc2=$?
+       wait $pid
+       local rc=$?
+       if [ $rc == 0 ] && [ $rc2 == 114 ]; then
+               echo "1st MDT start succeed"
+               echo "2nd MDT start failed with EALREADY"
+       elif [ $rc2 == 0 ] && [ $rc == 114 ]; then
+               echo "1st MDT start failed with EALREADY"
+               echo "2nd MDT start succeed"
+       else
+               stop mds1 -f
+               error "unexpected concurent MDT mounts result, rc=$rc rc2=$rc2"
+       fi
+
+       # OST concurent start
+       #define OBD_FAIL_TGT_DELAY_CONNECT 0x703
+       do_facet ost1 "lctl set_param fail_loc=0x703"
+       start ost1 $(ostdevname 1) $OST_MOUNT_OPTS &
+       pid=$!
+       sleep 2
+       do_facet ost1 "lctl set_param fail_loc=0x0"
+       start ost1 $(ostdevname 1) $OST_MOUNT_OPTS &
+       pid2=$!
+       wait $pid2
+       rc2=$?
+       wait $pid
+       rc=$?
+       if [ $rc == 0 ] && [ $rc2 == 114 ]; then
+               echo "1st OST start succeed"
+               echo "2nd OST start failed with EALREADY"
+       elif [ $rc2 == 0 ] && [ $rc == 114 ]; then
+               echo "1st OST start failed with EALREADY"
+               echo "2nd OST start succeed"
+       else
+               stop mds1 -f
+               stop ost1 -f
+               error "unexpected concurent OST mounts result, rc=$rc rc2=$rc2"
+       fi
+       # cleanup
+       stop mds1 -f
+       stop ost1 -f
+
+       # verify everything ok
+       start_mds
+       if [ $? != 0 ]
+       then
+               stop mds1 -f
+               error "MDT(s) start failed"
+       fi
+
+       start_ost
+       if [ $? != 0 ]
+       then
+               stop mds1 -f
+               stop ost1 -f
+               error "OST(s) start failed"
+       fi
+
+       mount_client $MOUNT
+       if [ $? != 0 ]
+       then
+               stop mds1 -f
+               stop ost1 -f
+               error "client start failed"
+       fi
+       check_mount
+       if [ $? != 0 ]
+       then
+               stop mds1 -f
+               stop ost1 -f
+               error "client mount failed"
+       fi
+       cleanup
+}
+run_test 41c "concurent mounts of MDT/OST should all fail but one"
+
 test_42() { #bug 14693
        setup
        check_mount || error "client was not mounted"
@@ -2577,6 +2674,8 @@ test_42() { #bug 14693
 run_test 42 "allow client/server mount/unmount with invalid config param"
 
 test_43() {
+       [[ $(lustre_version_code mgs) -ge $(version_code 2.5.58) ]] ||
+               { skip "Need MDS version at least 2.5.58" && return 0; }
        [ $UID -ne 0 -o $RUNAS_ID -eq 0 ] && skip_env "run as root"
 
        ID1=${ID1:-501}
@@ -4682,6 +4781,68 @@ test_78() {
 }
 run_test 78 "run resize2fs on MDT and OST filesystems"
 
+test_79() { # LU-4227
+       [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.5.59) ]] ||
+               { skip "Need MDS version at least 2.5.59"; return 0; }
+
+       local mdsdev1=$(mdsdevname 1)
+       local mdsvdev1=$(mdsvdevname 1)
+       local mdsdev2=$(mdsdevname 2)
+       local mdsvdev2=$(mdsvdevname 2)
+       local ostdev1=$(ostdevname 1)
+       local ostvdev1=$(ostvdevname 1)
+       local opts_mds1="$(mkfs_opts mds1 $mdsdev1) --reformat"
+       local opts_mds2="$(mkfs_opts mds2 $mdsdev2) --reformat"
+       local opts_ost1="$(mkfs_opts ost1 $ostdev1) --reformat"
+       local mgsnode_opt
+
+       # remove --mgs/--mgsnode from mkfs.lustre options
+       opts_mds1=$(echo $opts_mds1 | sed -e "s/--mgs//")
+
+       mgsnode_opt=$(echo $opts_mds2 |
+               awk '{ for ( i = 1; i < NF; i++ )
+                       if ( $i ~ "--mgsnode" ) { print $i; break } }')
+       [ -n $mgsnode_opt ] &&
+               opts_mds2=$(echo $opts_mds2 | sed -e "s/$mgsnode_opt//")
+
+       mgsnode_opt=$(echo $opts_ost1 |
+               awk '{ for ( i = 1; i < NF; i++ )
+                       if ( $i ~ "--mgsnode" ) { print $i; break } }')
+       [ -n $mgsnode_opt ] &&
+               opts_ost1=$(echo $opts_ost1 | sed -e "s/$mgsnode_opt//")
+
+       # -MGS, format a mdt without --mgs option
+       add mds1 $opts_mds1 $mdsdev1 $mdsvdev1 &&
+               error "Must specify --mgs when formatting mdt combined with mgs"
+
+       # +MGS, format a mdt/ost without --mgsnode option
+       add mds1 $(mkfs_opts mds1 $mdsdev1) --reformat $mdsdev1 $mdsvdev1 \
+               > /dev/null || error "start mds1 failed"
+       add mds2 $opts_mds2 $mdsdev2 $mdsvdev2 &&
+               error "Must specify --mgsnode when formatting a mdt"
+       add ost1 $opts_ost1 $ostdev1 $ostvdev2 &&
+               error "Must specify --mgsnode when formatting an ost"
+
+       return 0
+}
+run_test 79 "format MDT/OST without mgs option (should return errors)"
+
+test_80() {
+       start_mds
+       start_ost
+       uuid=$(do_facet ost1 lctl get_param -n mgc.*.uuid)
+#define OBD_FAIL_MGS_PAUSE_TARGET_CON       0x906
+       do_facet ost1 "lctl set_param fail_val=10 fail_loc=0x906"
+       do_facet mgs "lctl set_param fail_val=10 fail_loc=0x906"
+       do_facet mgs "lctl set_param -n mgs/MGS/evict_client $uuid"
+       sleep 30
+       start_ost2
+
+       do_facet ost1 "lctl set_param fail_loc=0"
+       stopall
+}
+run_test 80 "mgc import reconnect race"
+
 if ! combined_mgs_mds ; then
        stop mgs
 fi