Newer
Older
#!/bin/bash
# requirement:
# add uml1 uml2 uml3 in your /etc/hosts
# FIXME - there is no reason to use all of these different
# return codes, espcially when most of them are mapped to something
# else anyway. The combination of test number and return code
# figure out what failed.
# bug number for skipped test: 13369
ALWAYS_EXCEPT=" $CONF_SANITY_EXCEPT 34a"
# UPDATE THE COMMENT ABOVE WITH BUG NUMBERS WHEN CHANGING ALWAYS_EXCEPT!
SRCDIR=`dirname $0`
PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH
LUSTRE=${LUSTRE:-`dirname $0`/..}
RLUSTRE=${RLUSTRE:-$LUSTRE}
. $LUSTRE/tests/test-framework.sh
init_test_env $@
# 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
remote_mds_nodsh && skip "remote MDS with nodsh" && exit 0
remote_ost_nodsh && skip "remote OST with nodsh" && exit 0
[ "$SLOW" = "no" ] && EXCEPT_SLOW="0 1 2 3 6 7 15 18 24b 25 30 31 32 33 34a 45"
writeconf() {
local facet=mds
shift
stop ${facet} -f
rm -f ${facet}active
# who knows if/where $TUNEFS is installed? Better reformat if it fails...
do_facet ${facet} "$TUNEFS --writeconf $MDSDEV" || echo "tunefs failed, reformatting instead" && reformat
}
gen_config() {
reformat
# The MGS must be started before the OSTs for a new fs, so start
# and stop to generate the startup logs.
start_mds
start_ost
sleep 5
stop_ost
stop_mds
}
start_mds() {
echo "start mds service on `facet_active_host mds`"
start mds $MDSDEV $MDS_MOUNT_OPTS || return 94
echo "stop mds service on `facet_active_host mds`"
# These tests all use non-failover stop
stop mds -f || return 97
}
start_ost() {
echo "start ost1 service on `facet_active_host ost1`"
start ost1 `ostdevname 1` $OST_MOUNT_OPTS || return 95
}
stop_ost() {
echo "stop ost1 service on `facet_active_host ost1`"
# These tests all use non-failover stop
stop ost1 -f || return 98
}
start_ost2() {
echo "start ost2 service on `facet_active_host ost2`"
start ost2 `ostdevname 2` $OST_MOUNT_OPTS || return 92
}
stop_ost2() {
echo "stop ost2 service on `facet_active_host ost2`"
# These tests all use non-failover stop
stop ost2 -f || return 93
start_client() {
echo "start client on `facet_active_host client`"
start client || return 99
}
stop_client() {
echo "stop client on `facet_active_host client`"
stop client || return 100
}
mount_client() {
local MOUNTPATH=$1
echo "mount $FSNAME on ${MOUNTPATH}....."
zconf_mount `hostname` $MOUNTPATH || return 96
}
remount_client() {
local SAVEMOUNTOPT=$MOUNTOPT
MOUNTOPT="remount,$1"
local MOUNTPATH=$2
echo "remount '$1' lustre on ${MOUNTPATH}....."
zconf_mount `hostname` $MOUNTPATH || return 96
}
umount_client() {
local MOUNTPATH=$1
echo "umount lustre on ${MOUNTPATH}....."
}
manual_umount_client(){
do_facet client "umount -d ${FORCE} $MOUNT"
rc=$?
return $rc
}
setup() {
start_ost
start_mds
setup_noconfig() {
start_mds
start_ost
mount_client $MOUNT
}
unload_modules || return 203
}
cleanup() {
umount_client $MOUNT || return 200
cleanup_nocli || return $?
}
check_mount() {
do_facet client "cp /etc/passwd $DIR/a" || return 71
do_facet client "rm $DIR/a" || return 72
# make sure lustre is actually mounted (touch will block,
# but grep won't, so do it after)
do_facet client "grep $MOUNT' ' /proc/mounts > /dev/null" || return 73
echo "setup single mount lustre success"
}
check_mount2() {
do_facet client "touch $DIR/a" || return 71
do_facet client "rm $DIR/a" || return 72
do_facet client "touch $DIR2/a" || return 73
do_facet client "rm $DIR2/a" || return 74
echo "setup double mount lustre success"
}
build_test_filter
if [ "$ONLY" == "setup" ]; then
setup
exit
fi
if [ "$ONLY" == "cleanup" ]; then
cleanup
exit
fi
#create single point mountpoint
gen_config
check_mount || return 41
}
run_test 0 "single mount setup"
test_1() {
start_ost
echo "start ost second time..."
check_mount || return 42
run_test 1 "start up ost twice (should return errors)"
test_2() {
start_ost
start_mds
echo "start mds second time.."
check_mount || return 43
#mount.lustre returns an error if already in mtab
mount_client $MOUNT && return $?
check_mount || return 44
test_4() {
setup
touch $DIR/$tfile || return 85
eno=$?
# ok for ost to fail shutdown
if [ 202 -ne $eno ]; then
return $eno;
fi
return 0
}
run_test 4 "force cleanup ost, then cleanup"
fuser -m -v $MOUNT && echo "$MOUNT is in use by user space process."
# cleanup may return an error from the failed
# disconnects; for now I'll consider this successful
if grep " $MOUNT " /proc/mounts; then
echo "test 5: /proc/mounts after failed umount"
umount $MOUNT &
UMOUNT_PID=$!
sleep 2
echo "killing umount"
kill -TERM $UMOUNT_PID
echo "waiting for umount to finish"
wait $UMOUNT_PID
grep " $MOUNT " /proc/mounts && echo "test 5: /proc/mounts after second umount" && return 11
cleanup_nocli || return $?
# df may have lingering entry
manual_umount_client
# mtab may have lingering entry
local WAIT=0
local MAX_WAIT=20
local sleep=1
while [ "$WAIT" -ne "$MAX_WAIT" ]; do
sleep $sleep
grep -q $MOUNT" " /etc/mtab || break
echo "Waiting /etc/mtab updated ... "
WAIT=$(( WAIT + sleep))
done
[ "$WAIT" -eq "$MAX_WAIT" ] && error "/etc/mtab is not updated in $WAIT secs"
echo "/etc/mtab updated in $WAIT secs"
test_5b() {
start_ost
[ -d $MOUNT ] || mkdir -p $MOUNT
grep " $MOUNT " /etc/mtab && echo "test 5b: mtab before mount" && return 10
mount_client $MOUNT && return 1
grep " $MOUNT " /etc/mtab && echo "test 5b: mtab after failed mount" && return 11
umount_client $MOUNT
run_test 5b "mds down, cleanup after failed mount (bug 2712) (should return errs)"
test_5c() {
start_ost
start_mds
[ -d $MOUNT ] || mkdir -p $MOUNT
grep " $MOUNT " /etc/mtab && echo "test 5c: mtab before mount" && return 10
local oldfs="${FSNAME}"
FSNAME="wrong.${FSNAME}"
mount_client $MOUNT || :
FSNAME=${oldfs}
grep " $MOUNT " /etc/mtab && echo "test 5c: mtab after failed mount" && return 11
umount_client $MOUNT
cleanup_nocli || return $?
run_test 5c "cleanup after failed mount (bug 2712) (should return errs)"
start_ost
start_mds
stop_ost -f
grep " $MOUNT " /etc/mtab && echo "test 5d: mtab before mount" && return 10
mount_client $MOUNT || return 1
cleanup || return $?
grep " $MOUNT " /etc/mtab && echo "test 5d: mtab after unmount" && return 11
return 0
}
run_test 5d "mount with ost down"
grep " $MOUNT " /etc/mtab && echo "test 5e: mtab before mount" && return 10
mount_client $MOUNT || echo "mount failed (not fatal)"
cleanup || return $?
grep " $MOUNT " /etc/mtab && echo "test 5e: mtab after unmount" && return 11
return 0
run_test 5e "delayed connect, don't crash (bug 10268)"
test_6() {
setup
manual_umount_client
mount_client ${MOUNT} || return 87
touch $DIR/a || return 86
}
run_test 6 "manual umount, then mount again"
test_7() {
setup
manual_umount_client
}
run_test 7 "manual umount, then cleanup"
test_8() {
check_mount2 || return 45
}
run_test 8 "double mount setup"
do_facet ost1 lctl set_param debug=\'inode trace\' || return 1
do_facet ost1 lctl set_param subsystem_debug=\'mds ost\' || return 1
if [ "$CHECK_PTLDEBUG" ] && [ "$CHECK_PTLDEBUG" = "trace inode" ];then
echo "lnet.debug success"
else
echo "lnet.debug: want 'trace inode', have '$CHECK_PTLDEBUG'"
return 1
fi
if [ "$CHECK_SUBSYS" ] && [ "$CHECK_SUBSYS" = "mds ost" ]; then
echo "lnet.subsystem_debug success"
else
echo "lnet.subsystem_debug: want 'mds ost', have '$CHECK_SUBSYS'"
return 1
fi
if [ ! -e "$MDSDEV" ]; then
log "no $MDSDEV existing, so mount Lustre to create one"
setup
check_mount || return 41
cleanup || return $?
[ -f "$MDSDEV" ] && LOOPOPT="-o loop"
log "change the mode of $MDSDEV/OBJECTS,LOGS,PENDING to 555"
chmod 555 $TMPMTPT/{OBJECTS,LOGS,PENDING} &&
umount $TMPMTPT" || return $?
log "mount Lustre to change the mode of OBJECTS/LOGS/PENDING, then umount Lustre"
check_mount || return 41
cleanup || return $?
log "read the mode of OBJECTS/LOGS/PENDING and check if they has been changed properly"
EXPECTEDOBJECTSMODE=`do_facet mds "debugfs -R 'stat OBJECTS' $MDSDEV 2> /dev/null" | grep 'Mode: ' | sed -e "s/.*Mode: *//" -e "s/ *Flags:.*//"`
EXPECTEDLOGSMODE=`do_facet mds "debugfs -R 'stat LOGS' $MDSDEV 2> /dev/null" | grep 'Mode: ' | sed -e "s/.*Mode: *//" -e "s/ *Flags:.*//"`
EXPECTEDPENDINGMODE=`do_facet mds "debugfs -R 'stat PENDING' $MDSDEV 2> /dev/null" | grep 'Mode: ' | sed -e "s/.*Mode: *//" -e "s/ *Flags:.*//"`
if [ "$EXPECTEDOBJECTSMODE" = "0777" ]; then
fi
}
run_test 16 "verify that lustre will correct the mode of OBJECTS/LOGS/PENDING"
check_mount || return 41
cleanup || return $?
fi
echo "Remove mds config log"
do_facet mds "debugfs -w -R 'unlink CONFIGS/$FSNAME-MDT0000' $MDSDEV || return \$?" || return $?
run_test 17 "Verify failed mds_postsetup won't fail assertion (2936) (should return errs)"
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
[ "$FSTYPE" != "ldiskfs" ] && skip "not needed for FSTYPE=$FSTYPE" && return
local MIN=2000000
local OK=
# check if current MDSSIZE is large enough
[ $MDSSIZE -ge $MIN ] && OK=1 && myMDSSIZE=$MDSSIZE && \
log "use MDSSIZE=$MDSSIZE"
# check if the global config has a large enough MDSSIZE
[ -z "$OK" -a ! -z "$STORED_MDSSIZE" ] && [ $STORED_MDSSIZE -ge $MIN ] && \
OK=1 && myMDSSIZE=$STORED_MDSSIZE && \
log "use STORED_MDSSIZE=$STORED_MDSSIZE"
# check if the block device is large enough
[ -z "$OK" -a -b $MDSDEV ] && \
[ "$(dd if=$MDSDEV of=/dev/null bs=1k count=1 skip=$MIN 2>&1 |
awk '($3 == "in") { print $1 }')" = "1+0" ] && OK=1 && \
myMDSSIZE=$MIN && log "use device $MDSDEV with MIN=$MIN"
# check if a loopback device has enough space for fs metadata (5%)
[ -z "$OK" ] && [ -f $MDSDEV -o ! -e $MDSDEV ] &&
SPACE=$(df -P $(dirname $MDSDEV) |
awk '($1 != "Filesystem") {print $4}') &&
[ $SPACE -gt $((MIN / 20)) ] && OK=1 && myMDSSIZE=$MIN && \
log "use file $MDSDEV with MIN=$MIN"
[ -z "$OK" ] && skip "$MDSDEV too small for ${MIN}kB MDS" && return
MDS_MKFS_OPTS="--mgs --mdt --fsname=$FSNAME --device-size=$myMDSSIZE --param sys.timeout=$TIMEOUT $MDSOPT"
local FOUNDSIZE=`do_facet mds "debugfs -c -R 'stat <8>' $MDSDEV" | awk '/Size: / { print $NF; exit;}'`
log "Success: mkfs creates large journals. Size: $((FOUNDSIZE >> 20))M"
error "expected journal size > 32M, found $((FOUNDSIZE >> 20))M"
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
test_19a() {
start_mds || return 1
stop_mds -f || return 2
}
run_test 19a "start/stop MDS without OSTs"
test_19b() {
start_ost || return 1
stop_ost -f || return 2
}
run_test 19b "start/stop OSTs without MDS"
test_20() {
# first format the ost/mdt
start_ost
start_mds
mount_client $MOUNT
check_mount || return 43
rm -f $DIR/$tfile
remount_client ro $MOUNT || return 44
touch $DIR/$tfile && echo "$DIR/$tfile created incorrectly" && return 45
[ -e $DIR/$tfile ] && echo "$DIR/$tfile exists incorrectly" && return 46
remount_client rw $MOUNT || return 47
touch $DIR/$tfile
[ ! -f $DIR/$tfile ] && echo "$DIR/$tfile missing" && return 48
MCNT=`grep -c $MOUNT /etc/mtab`
[ "$MCNT" -ne 1 ] && echo "$MOUNT in /etc/mtab $MCNT times" && return 49
umount_client $MOUNT
stop_mds
stop_ost
}
run_test 20 "remount ro,rw mounts work and doesn't break /etc/mtab"
test_21a() {
start_mds
start_ost
stop_ost
stop_mds
}
run_test 21a "start mds before ost, stop ost first"
test_21b() {
start_ost
start_mds
stop_mds
stop_ost
}
run_test 21b "start ost before mds, stop mds first"
test_21c() {
start_ost
start_mds
start_ost2
stop_ost
stop_ost2
stop_mds
#writeconf to remove all ost2 traces for subsequent tests
writeconf
}
run_test 21c "start mds between two osts, stop mds last"
test_22() {
start_mds
echo Client mount with ost in logs, but none running
# wait until mds connected to ost and open client connection
# ping_interval + 1
sleep $((TIMEOUT / 4 + 1))
stop_ost
mount_client $MOUNT
# check_mount will block trying to contact ost
umount_client $MOUNT
pass
echo Client mount with a running ost
start_ost
mount_client $MOUNT
check_mount || return 41
pass
cleanup
}
run_test 22 "start a client before osts (should return errs)"
setup
# fail mds
stop mds
# force down client so that recovering mds waits for reconnect
local running=$(grep -c $MOUNT /proc/mounts) || true
if [ $running -ne 0 ]; then
echo "Stopping client $MOUNT (opts: -f)"
umount -f $MOUNT
fi
# enter recovery on mds
start_mds
# try to start a new client
mount_client $MOUNT &
sleep 5
MOUNT_PID=$(ps -ef | grep "t lustre" | grep -v grep | awk '{print $2}')
MOUNT_LUSTRE_PID=`ps -ef | grep mount.lustre | grep -v grep | awk '{print $2}'`
echo mount pid is ${MOUNT_PID}, mount.lustre pid is ${MOUNT_LUSTRE_PID}
ps --ppid $MOUNT_PID
ps --ppid $MOUNT_LUSTRE_PID
# FIXME why o why can't I kill these? Manual "ctrl-c" works...
echo "waiting for mount to finish"
ps -ef | grep mount
# we can not wait $MOUNT_PID because it is not a child of this shell
local PID1
local PID2
local WAIT=0
local MAX_WAIT=20
local sleep=1
while [ "$WAIT" -lt "$MAX_WAIT" ]; do
sleep $sleep
PID1=$(ps -ef | awk '{print $2}' | grep -w $MOUNT_PID)
PID2=$(ps -ef | awk '{print $2}' | grep -w $MOUNT_LUSTRE_PID)
echo PID1=$PID1
echo PID2=$PID2
[ -z "$PID1" -a -z "$PID2" ] && break
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
stop_mds || error
stop_ost || error
run_test 23a "interrupt client during recovery mount delay"
umount_client $MOUNT
cleanup_nocli
test_23b() { # was test_23
start_ost
start_mds
# Simulate -EINTR during mount OBD_FAIL_LDLM_CLOSE_THREAD
mount_client $MOUNT
cleanup
}
run_test 23b "Simulate -EINTR during mount"
fs2mds_HOST=$mds_HOST
fs2ost_HOST=$ost_HOST
cleanup_24a() {
trap 0
echo "umount $MOUNT2 ..."
umount $MOUNT2 || true
echo "stopping fs2mds ..."
stop fs2mds -f || true
echo "stopping fs2ost ..."
stop fs2ost -f || true
}
[ -n "$ost1_HOST" ] && fs2ost_HOST=$ost1_HOST
if [ -z "$fs2ost_DEV" -o -z "$fs2mds_DEV" ]; then
do_facet mds [ -b "$MDSDEV" ] && \
skip "mixed loopback and real device not working" && return
fi
local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2}
local fs2ostdev=${fs2ost_DEV:-$(ostdevname 1)_2}
add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME2} --nomgs --mgsnode=$MGSNID --reformat $fs2mdsdev || exit 10
add fs2ost $OST_MKFS_OPTS --fsname=${FSNAME2} --reformat $fs2ostdev || exit 10
start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_24a EXIT INT
start fs2ost $fs2ostdev $OST_MOUNT_OPTS
mkdir -p $MOUNT2
# 1 still works
check_mount || return 2
# files written on 1 should not show up on 2
cp /etc/passwd $DIR/$tfile
sleep 10
[ -e $MOUNT2/$tfile ] && error "File bleed" && return 7
# 2 should work
cp /etc/passwd $MOUNT2/b || return 3
rm $MOUNT2/b || return 4
# 2 is actually mounted
grep $MOUNT2' ' /proc/mounts > /dev/null || return 5
# failover
facet_failover fs2mds
facet_failover fs2ost
df
umount_client $MOUNT
# the MDS must remain up until last MDT
stop_mds
MDS=$(do_facet mds "lctl get_param -n devices" | awk '($3 ~ "mdt" && $4 ~ "MDS") { print $4 }')
cleanup_nocli || return 6
}
run_test 24a "Multiple MDTs on a single node"
test_24b() {
if [ -z "$fs2mds_DEV" ]; then
do_facet mds [ -b "$MDSDEV" ] && \
skip "mixed loopback and real device not working" && return
fi
add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME}2 --mgs --reformat $fs2mdsdev || exit 10
cleanup || return 6
}
run_test 24b "Multiple MGSs on a single node (should return err)"
test_25() {
setup
check_mount || return 2
local MODULES=$($LCTL modules | awk '{ print $2 }')
rmmod $MODULES 2>/dev/null || true
cleanup || return 6
}
run_test 25 "Verify modules are referenced"
test_26() {
load_modules
# we need modules before mount for sysctl, so make sure...
lctl get_param -n devices
DEVS=$(lctl get_param -n devices | wc -l)
[ $DEVS -gt 0 ] && return 2
unload_modules || return 203
}
run_test 26 "MDT startup failure cleans LOV (should return errs)"
wait_update () {
local node=$1
local TEST=$2
local FINAL=$3
local RESULT
local MAX=90
local WAIT=0
local sleep=5
while [ $WAIT -lt $MAX ]; do
RESULT=$(do_node $node "$TEST")
if [ $RESULT -eq $FINAL ]; then
echo "Updated config after $WAIT sec: wanted $FINAL got $RESULT"
return 0
fi
WAIT=$((WAIT + sleep))
echo "Waiting $((MAX - WAIT)) secs for config update"
sleep $sleep
done
echo "Config update not seen after $MAX sec: wanted $FINAL got $RESULT"
return 3
}
local myfacet=$1
local TEST=$2
local PARAM=$3
local ORIG=$(do_facet $myfacet "$TEST")
if [ $# -gt 3 ]; then
local FINAL=$4
else
local -i FINAL
FINAL=$(($ORIG + 5))
fi
echo "Setting $PARAM from $ORIG to $FINAL"
do_facet mds "$LCTL conf_param $PARAM=$FINAL" || error conf_param failed
wait_update $(facet_host $myfacet) "$TEST" $FINAL || error check failed!
}
test_27a() {
start_ost || return 1
start_mds || return 2
echo "Requeue thread should have started: "
ps -e | grep ll_cfg_requeue
set_and_check ost1 "lctl get_param -n obdfilter.$FSNAME-OST0000.client_cache_seconds" "$FSNAME-OST0000.ost.client_cache_seconds" || return 3
cleanup_nocli
}
run_test 27a "Reacquire MGS lock if OST started first"
test_27b() {
setup
facet_failover mds
set_and_check mds "lctl get_param -n mds.$FSNAME-MDT0000.group_acquire_expire" "$FSNAME-MDT0000.mdt.group_acquire_expire" || return 3
set_and_check client "lctl get_param -n mdc.$FSNAME-MDT0000-mdc-*.max_rpcs_in_flight" "$FSNAME-MDT0000.mdc.max_rpcs_in_flight" || return 4
cleanup
}
run_test 27b "Reacquire MGS lock after failover"
test_28() {
setup
PARAM="$FSNAME.llite.max_read_ahead_whole_mb"
ORIG=$($TEST)
FINAL=$(($ORIG + 1))
set_and_check client "$TEST" "$PARAM" $FINAL || return 3
FINAL=$(($FINAL + 1))
set_and_check client "$TEST" "$PARAM" $FINAL || return 4
umount_client $MOUNT || return 200
mount_client $MOUNT
RESULT=$($TEST)
if [ $RESULT -ne $FINAL ]; then
echo "New config not seen: wanted $FINAL got $RESULT"
return 4
else
echo "New config success: got $RESULT"
fi
cleanup
}
run_test 28 "permanent parameter setting"
test_29() {
[ "$OSTCOUNT" -lt "2" ] && skip "$OSTCOUNT < 2, skipping" && return
setup > /dev/null 2>&1
start_ost2
sleep 10
local PARAM="$FSNAME-OST0001.osc.active"
local PROC_ACT="osc.$FSNAME-OST0001-osc-*.active"
local PROC_UUID="osc.$FSNAME-OST0001-osc-*.ost_server_uuid"
ACTV=$(lctl get_param -n $PROC_ACT)
set_and_check client "lctl get_param -n $PROC_ACT" "$PARAM" $DEAC || return 2
return 3
else
echo "Live client success: got $RESULT"
fi
# check MDT too
[ ${PIPESTATUS[0]} = 0 ] || error "Can't read $MPROC"
if [ $RESULT -eq $DEAC ]; then
echo "MDT deactivated also after $WAIT sec (got $RESULT)"
break
fi
WAIT=$((WAIT + 5))
if [ $WAIT -eq $MAX ]; then
echo "MDT not deactivated: wanted $DEAC got $RESULT"
return 4
fi
echo "Waiting $(($MAX - $WAIT)) secs for MDT deactivated"
done
# test new client starts deactivated
umount_client $MOUNT || return 200
mount_client $MOUNT
echo "New client not deactivated from start: $(lctl get_param -n $PROC_UUID)"
return 5
else
echo "New client success: got $RESULT"
fi
# make sure it reactivates
set_and_check client "lctl get_param -n $PROC_ACT" "$PARAM" $ACTV || return 6
umount_client $MOUNT
stop_ost2
cleanup_nocli
#writeconf to remove all ost2 traces for subsequent tests
writeconf
}
run_test 29 "permanently remove an OST"
test_30() {
ORIG=$($TEST)
LIST=(1 2 3 4 5 4 3 2 1 2 3 4 5 4 3 2 1 2 3 4 5)
for i in ${LIST[@]}; do
set_and_check client "$TEST" "$FSNAME.llite.max_read_ahead_whole_mb" $i || return 3
done
# make sure client restart still works
umount_client $MOUNT
mount_client $MOUNT || return 4
[ "$($TEST)" -ne "$i" ] && return 5
set_and_check client "$TEST" "$FSNAME.llite.max_read_ahead_whole_mb" $ORIG || return 6
cleanup
}
run_test 30 "Big config llog"
test_31() { # bug 10734
# ipaddr must not exist
mount -t lustre 4.3.2.1@tcp:/lustre $MOUNT || true
cleanup
}
run_test 31 "Connect to non-existent node (returns errors, should not crash)"
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
# Use these start32/stop32 fn instead of t-f start/stop fn,
# for local devices, to skip global facet vars init
stop32 () {
local facet=$1
shift
echo "Stopping local ${MOUNT%/*}/${facet} (opts:$@)"
umount -d $@ ${MOUNT%/*}/${facet}
losetup -a
}
start32 () {
local facet=$1
shift
local device=$1
shift
mkdir -p ${MOUNT%/*}/${facet}
echo "Starting local ${facet}: $@ $device ${MOUNT%/*}/${facet}"
mount -t lustre $@ ${device} ${MOUNT%/*}/${facet}
RC=$?
if [ $RC -ne 0 ]; then
echo "mount -t lustre $@ ${device} ${MOUNT%/*}/${facet}"
echo "Start of ${device} of local ${facet} failed ${RC}"
fi
losetup -a
return $RC
}
cleanup_nocli32 () {
stop32 mds -f
stop32 ost1 -f
wait_exit_ST client
}
cleanup_32() {
trap 0
echo "Cleanup test_32 umount $MOUNT ..."
umount -f $MOUNT || true
echo "Cleanup local mds ost1 ..."
cleanup_nocli32
unload_modules
}
# this test is totally useless on a client-only system
[ -n "$CLIENTONLY" -o -n "$CLIENTMODSONLY" ] && skip "client only testing" && return 0
[ "$NETTYPE" = "tcp" ] || { skip "NETTYPE != tcp" && return 0; }
[ ! -r $DISK1_4 ] && skip "Cant find $DISK1_4, skipping" && return
local tmpdir=$TMP/conf32a
unzip -o -j -d $tmpdir $DISK1_4 || { skip "Cant unzip $DISK1_4, skipping" && return ; }