#!/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
OSTSIZE=40000
. ${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_ost
mount_client $MOUNT
# check_mount will block trying to contact ost
+ mcreate $DIR/$tfile || return 40
+ rm -f $DIR/$tfile || return 42
umount_client $MOUNT
pass
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"
+ [ "$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
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
}
run_test 34c "force umount with failed ost should be normal"
-test_35() { # bug 12459
+test_35a() { # bug 12459
setup
DBG_SAVE="`lctl get_param -n debug`"
log "Wait for RECONNECT_INTERVAL seconds (10s)"
sleep 10
- MSG="conf-sanity.sh test_35 `date +%F%kh%Mm%Ss`"
+ MSG="conf-sanity.sh test_35a `date +%F%kh%Mm%Ss`"
$LCTL clear
log "$MSG"
log "Stopping the MDT:"
[ "$NEXTCONN" != "0" ] && log "The client didn't try to reconnect to the last active server (tried ${NEXTCONN} instead)" && return 7
cleanup
}
-run_test 35 "Reconnect to the last active server first"
+run_test 35a "Reconnect to the last active server first"
+
+test_35b() { # bug 18674
+ remote_mds || { skip "local MDS" && return 0; }
+ setup
+
+ debugsave
+ $LCTL set_param debug="ha"
+ $LCTL clear
+ MSG="conf-sanity.sh test_35b `date +%F%kh%Mm%Ss`"
+ log "$MSG"
+
+ log "Set up a fake failnode for the MDS"
+ FAKENID="127.0.0.2"
+ local device=$(do_facet mds "$LCTL get_param -n devices" | \
+ awk '($3 ~ "mdt" && $4 ~ "MDT") { print $4 }' | head -1)
+ do_facet mds "$LCTL conf_param ${device}.failover.node=$FAKENID" || \
+ return 1
+
+ local at_max_saved=0
+ # adaptive timeouts may prevent seeing the issue
+ if at_is_enabled; then
+ at_max_saved=$(at_max_get mds)
+ at_max_set 0 mds client
+ fi
+
+ mkdir -p $MOUNT/testdir
+ touch $MOUNT/testdir/test
+
+ log "Injecting EBUSY on MDS"
+ # Setting OBD_FAIL_MDS_RESEND=0x136
+ do_facet mds "$LCTL set_param fail_loc=0x80000136" || return 2
+
+ log "Stat on a test file"
+ stat $MOUNT/testdir/test
+
+ log "Stop injecting EBUSY on MDS"
+ do_facet mds "$LCTL set_param fail_loc=0" || return 3
+ rm -f $MOUNT/testdir/test
+
+ log "done"
+ # restore adaptive timeout
+ [ $at_max_saved -ne 0 ] && at_max_set $at_max_saved mds client
+
+ $LCTL dk $TMP/lustre-log-$TESTNAME.log
+
+ # retrieve from the log if the client has ever tried to
+ # contact the fake server after the loss of connection
+ FAILCONN=`awk "BEGIN {ret = 0;}
+ /import_select_connection.*${FSNAME}-MDT0000-mdc.* using connection/ {
+ ret = 1;
+ if (\\\$NF ~ /$FAKENID/) {
+ ret = 2;
+ exit;
+ }
+ }
+ END {print ret}" $TMP/lustre-log-$TESTNAME.log`
+
+ [ "$FAILCONN" == "0" ] && \
+ log "ERROR: The client reconnection has not been triggered" && \
+ return 4
+ [ "$FAILCONN" == "2" ] && \
+ log "ERROR: The client tried to reconnect to the failover server while the primary was busy" && \
+ return 5
+
+ cleanup
+}
+run_test 35b "Continue reconnection retries, if the active server is busy"
test_36() { # 12743
local rc
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
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
}
run_test 50f "normal statfs one server in down =========================="
+test_50g() {
+ [ "$OSTCOUNT" -lt "2" ] && skip_env "$OSTCOUNT < 2, skipping" && return
+ setup
+ start_ost2 || error "Unable to start OST2"
+
+ local PARAM="${FSNAME}-OST0001.osc.active"
+
+ $LFS setstripe -c -1 $DIR/$tfile || error "Unable to lfs setstripe"
+ do_facet mgs $LCTL conf_param $PARAM=0 || error "Unable to deactivate OST"
+
+ umount_client $MOUNT || error "Unable to unmount client"
+ mount_client $MOUNT || error "Unable to mount client"
+ # This df should not cause a panic
+ df -k $MOUNT
+
+ do_facet mgs $LCTL conf_param $PARAM=1 || error "Unable to activate OST"
+ rm -f $DIR/$tfile
+ umount_client $MOUNT || error "Unable to unmount client"
+ stop_ost2 || error "Unable to stop OST2"
+ stop_ost || error "Unable to stop OST1"
+ stop_mds || error "Unable to stop MDS"
+ writeconf
+}
+run_test 50g "deactivated OST should not cause panic====================="
+
test_51() {
local LOCAL_TIMEOUT=20