}
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
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"
--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)"
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"
}
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"
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}
}
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