#!/bin/bash
-# requirement:
-# add uml1 uml2 uml3 in your /etc/hosts
+# -*- mode: Bash; tab-width: 4; indent-tabs-mode: t; -*-
+# vim:autoindent:shiftwidth=4:tabstop=4:
# FIXME - there is no reason to use all of these different
# return codes, espcially when most of them are mapped to something
ONLY=${ONLY:-"$*"}
# bug number for skipped test:
-ALWAYS_EXCEPT=" $CONF_SANITY_EXCEPT"
+# 15977
+ALWAYS_EXCEPT="$CONF_SANITY_EXCEPT"
# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
SRCDIR=`dirname $0`
. $LUSTRE/tests/test-framework.sh
init_test_env $@
+init_logging
# STORED_MDSSIZE is used in test_18
if [ -n "$MDSSIZE" ]; then
STORED_MDSSIZE=$MDSSIZE
fi
# use small MDS + OST size to speed formatting time
-MDSSIZE=40000
-OSTSIZE=40000
+# do not use too small MDSSIZE/OSTSIZE, which affect the default jouranl size
+MDSSIZE=200000
+OSTSIZE=200000
. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
-remote_mds_nodsh && skip "remote MDS with nodsh" && exit 0
-remote_ost_nodsh && skip "remote OST with nodsh" && exit 0
+require_dsh_mds || exit 0
+require_dsh_ost || exit 0
-#
[ "$SLOW" = "no" ] && EXCEPT_SLOW="0 1 2 3 6 7 15 18 24b 25 30 31 32 33 34a 45"
assert_DIR
stop ${facet} -f
rm -f ${facet}active
# who knows if/where $TUNEFS is installed? Better reformat if it fails...
- do_facet ${facet} "$TUNEFS --writeconf ${!dev}" || echo "tunefs failed, reformatting instead" && reformat
+ do_facet ${facet} "$TUNEFS --writeconf ${!dev}" ||
+ echo "tunefs failed, reformatting instead" && reformat_and_config
- gen_config
}
gen_config() {
reformat_and_config() {
reformat
+ if ! combined_mgs_mds ; then
+ start_mgs
+ fi
gen_config
}
+start_mgs () {
+ echo "start mgs"
+ start mgs $MGSDEV $mgs_MOUNT_OPTS
+}
+
start_mds() {
local facet=$SINGLEMDS
# we can not use MDSDEV1 here because SINGLEMDS could be set not to mds1 only
}
setup_noconfig() {
+ if ! combined_mgs_mds ; then
+ start_mgs
+ fi
+
start_mds
start_ost
mount_client $MOUNT
local PID1
local PID2
local WAIT=0
- local MAX_WAIT=20
+ local MAX_WAIT=30
local sleep=1
while [ "$WAIT" -lt "$MAX_WAIT" ]; do
sleep $sleep
echo "waiting for mount to finish ... "
WAIT=$(( WAIT + sleep))
done
- [ "$WAIT" -eq "$MAX_WAIT" ] && error "MOUNT_PID $MOUNT_PID and \
- MOUNT__LUSTRE_PID $MOUNT__LUSTRE_PID still not killed in $WAIT secs"
- ps -ef | grep mount
+ if [ "$WAIT" -eq "$MAX_WAIT" ]; then
+ error "MOUNT_PID $MOUNT_PID and "\
+ "MOUNT_LUSTRE_PID $MOUNT_LUSTRE_PID still not killed in $WAIT secs"
+ ps -ef | grep mount
+ fi
stop_mds || error
stop_ost || error
}
{ skip_env "Cannot untar $DISK1_8" && return ; }
load_modules
- $LCTL set_param debug=$PTLDEBUG
+ $LCTL set_param debug="config"
local NEWNAME=lustre
# writeconf will cause servers to register with their current nids
echo MDS uuid $UUID
[ "$UUID" == "${NEWNAME}-MDT0000_UUID" ] || error "UUID is wrong: $UUID"
- $TUNEFS --mgsnode=$HOSTNAME --writeconf --fsname=$NEWNAME $tmpdir/ost1 || error "tunefs failed"
+ $TUNEFS --mgsnode=$HOSTNAME --writeconf --fsname=$NEWNAME $tmpdir/ost1 ||\
+ error "tunefs failed"
start32 ost1 $tmpdir/ost1 "-o loop" || return 5
UUID=$($LCTL get_param -n obdfilter.${NEWNAME}-OST0000.uuid)
echo OST uuid $UUID
echo "MDC changes should succeed:"
$LCTL conf_param ${NEWNAME}-MDT0000.mdc.max_rpcs_in_flight=9 || return 9
- $LCTL conf_param lustre-MDT0000.failover.node=$NID || return 10
+ $LCTL conf_param ${NEWNAME}-MDT0000.failover.node=$NID || return 10
echo "ok."
echo "LOV changes should succeed:"
- $LCTL pool_new lustre.interop || return 11
- $LCTL conf_param lustre-MDT0000.lov.stripesize=4M || return 12
+ $LCTL pool_new ${NEWNAME}.interop || return 11
+ $LCTL conf_param ${NEWNAME}-MDT0000.lov.stripesize=4M || return 12
echo "ok."
# MDT and OST should have registered with new nids, so we should have
test_42() { #bug 14693
setup
check_mount || return 2
- do_facet client lctl conf_param lustre.llite.some_wrong_param=10
+ do_facet mgs $LCTL conf_param lustre.llite.some_wrong_param=10
umount_client $MOUNT
mount_client $MOUNT || return 1
cleanup
test_46a() {
echo "Testing with $OSTCOUNT OSTs"
- reformat
+ reformat_and_config
start_mds || return 1
#first client should see only one ost
start_ost || return 2
facet_failover ost1
facet_failover $SINGLEMDS
- df -h $MOUNT || return 3
+ client_up || return 3
count=0
for ns in $($LCTL get_param ldlm.namespaces.$FSNAME-*-*-*.lru_size); do
OST_MKFS_OPTS="--ost --fsname=$FSNAME --device-size=$OSTSIZE --mgsnode=$MGSNID --param sys.timeout=$LOCAL_TIMEOUT --param sys.ldlm_timeout=$LOCAL_TIMEOUT $MKFSOPT $OSTOPT"
reformat
- start_mds
- start_ost
- mount_client $MOUNT
+ setup_noconfig
check_mount || return 1
echo "check ldlm_timout..."
OST_MKFS_OPTS="--ost --fsname=$FSNAME --device-size=$OSTSIZE --mgsnode=$MGSNID --param sys.timeout=$LOCAL_TIMEOUT --param sys.ldlm_timeout=$((LOCAL_TIMEOUT - 1)) $MKFSOPT $OSTOPT"
reformat
- start_mds || return 4
- start_ost || return 5
- mount_client $MOUNT || return 6
+ setup_noconfig
check_mount || return 7
LDLM_MDS="`do_facet mds lctl get_param -n ldlm_timeout`"
local LOCAL_TIMEOUT=20
reformat
- start_mds
- start_ost
- mount_client $MOUNT
+ setup_noconfig
check_mount || return 1
mkdir $MOUNT/d1
}
run_test 52 "check recovering objects from lost+found"
+# Checks threads_min/max/started for some service
+#
+# Arguments: service name (OST or MDT), facet (e.g., ost1, $SINGLEMDS), and a
+# parameter pattern prefix like 'ost.*.ost'.
+thread_sanity() {
+ local modname=$1
+ local facet=$2
+ local parampat=$3
+ local opts=$4
+ local tmin
+ local tmin2
+ local tmax
+ local tmax2
+ local tstarted
+ local paramp
+ local msg="Insane $modname thread counts"
+ shift 4
+
+ setup
+ check_mount || return 41
+
+ # We need to expand $parampat, but it may match multiple parameters, so
+ # we'll pick the first one
+ if ! paramp=$(do_facet $facet "lctl get_param -N ${parampat}.threads_min"|head -1); then
+ error "Couldn't expand ${parampat}.threads_min parameter name"
+ return 22
+ fi
+
+ # Remove the .threads_min part
+ paramp=${paramp%.threads_min}
+
+ # Check for sanity in defaults
+ tmin=$(do_facet $facet "lctl get_param -n ${paramp}.threads_min" || echo 0)
+ tmax=$(do_facet $facet "lctl get_param -n ${paramp}.threads_max" || echo 0)
+ tstarted=$(do_facet $facet "lctl get_param -n ${paramp}.threads_started" || echo 0)
+ lassert 23 "$msg (PDSH problems?)" '(($tstarted && $tmin && $tmax))' || return $?
+ lassert 24 "$msg" '(($tstarted >= $tmin && $tstarted <= tmax ))' || return $?
+
+ # Check that we can lower min/max
+ do_facet $facet "lctl set_param ${paramp}.threads_min=$((tmin - 1))"
+ do_facet $facet "lctl set_param ${paramp}.threads_max=$((tmax - 10))"
+ tmin2=$(do_facet $facet "lctl get_param -n ${paramp}.threads_min" || echo 0)
+ tmax2=$(do_facet $facet "lctl get_param -n ${paramp}.threads_max" || echo 0)
+ lassert 25 "$msg" '(($tmin2 == ($tmin - 1) && $tmax2 == ($tmax -10)))' || return $?
+
+ # Check that we can set min/max to the same value
+ do_facet $facet "lctl set_param ${paramp}.threads_min=$tmin"
+ do_facet $facet "lctl set_param ${paramp}.threads_max=$tmin"
+ tmin2=$(do_facet $facet "lctl get_param -n ${paramp}.threads_min" || echo 0)
+ tmax2=$(do_facet $facet "lctl get_param -n ${paramp}.threads_max" || echo 0)
+ lassert 26 "$msg" '(($tmin2 == $tmin && $tmax2 == $tmin))' || return $?
+
+ # Check that we can't set max < min
+ do_facet $facet "lctl set_param ${paramp}.threads_max=$((tmin - 1))"
+ tmin2=$(do_facet $facet "lctl get_param -n ${paramp}.threads_min" || echo 0)
+ tmax2=$(do_facet $facet "lctl get_param -n ${paramp}.threads_max" || echo 0)
+ lassert 27 "$msg" '(($tmin <= $tmax2))' || return $?
+
+ # We need to ensure that we get the module options desired; to do this
+ # we set LOAD_MODULES_REMOTE=true and we call setmodopts below.
+ LOAD_MODULES_REMOTE=true
+ cleanup
+ local oldvalue
+ setmodopts -a $modname "$opts" oldvalue
+
+ load_modules
+ setup
+ check_mount || return 41
+
+ # Restore previous setting of MODOPTS_*
+ setmodopts $modname "$oldvalue"
+
+ # Check that $opts took
+ tmin=$(do_facet $facet "lctl get_param -n ${paramp}.threads_min")
+ tmax=$(do_facet $facet "lctl get_param -n ${paramp}.threads_max")
+ tstarted=$(do_facet $facet "lctl get_param -n ${paramp}.threads_started")
+ lassert 28 "$msg" '(($tstarted == $tmin && $tstarted == $tmax ))' || return $?
+ cleanup
+
+ # Workaround a YALA bug where YALA expects that modules will remain
+ # loaded on the servers
+ LOAD_MODULES_REMOTE=false
+ setup
+ cleanup
+}
+
+test_53a() {
+ thread_sanity OST ost1 'ost.*.ost' 'oss_num_threads=64'
+}
+run_test 53a "check OSS thread count params"
+
+test_53b() {
+ thread_sanity MDT $SINGLEMDS 'mdt.*.*.' 'mdt_num_threads=64'
+}
+run_test 53b "check MDT thread count params"
+
+if ! combined_mgs_mds ; then
+ stop mgs
+fi
+
+run_llverfs()
+{
+ local dir=$1
+ local partial_arg=""
+ local size=$(df -B G $dir | tail -1 | awk '{print $2}' | sed 's/G//') # Gb
+
+ # Run in partial (fast) mode if the size
+ # of a partition > 10 GB
+ [ $size -gt 10 ] && partial_arg="-p"
+
+ llverfs $partial_arg $dir
+}
+
+test_54a() {
+ do_rpc_nodes $(facet_host ost1) run_llverdev $(ostdevname 1)
+ [ $? -eq 0 ] || error "llverdev failed!"
+ reformat_and_config
+}
+run_test 54a "llverdev"
+
+test_54b() {
+ setup
+ run_llverfs $MOUNT
+ [ $? -eq 0 ] || error "llverfs failed!"
+ cleanup
+}
+run_test 54b "llverfs"
+
cleanup_gss
equals_msg `basename $0`: test complete
[ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG && grep -q FAIL $TESTSUITELOG && exit 1 || true