Whamcloud - gitweb
LU-4416 tests: small fixes for conf_sanity
[fs/lustre-release.git] / lustre / tests / conf-sanity.sh
index 6446ac6..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"