# bug number for skipped test:
# a tool to create lustre filesystem images
ALWAYS_EXCEPT="32newtarball $ALWAYS_EXCEPT"
+if $SHARED_KEY; then
+# bug number for skipped tests: LU-9795 (all below)
+ ALWAYS_EXCEPT="$ALWAYS_EXCEPT 0 31 32a 32d 35a"
+ ALWAYS_EXCEPT="$ALWAYS_EXCEPT 53a 53b 54b 76a 76b"
+ ALWAYS_EXCEPT="$ALWAYS_EXCEPT 76c 76d 78 103"
+fi
SRCDIR=$(dirname $0)
PATH=$PWD/$SRCDIR:$SRCDIR:$SRCDIR/../utils:$PATH
local PARAM="$FSNAME-OST0001.osc.active"
# With lctl set_param -P the value $PROC_ACT will be sent to
- # all nodes. The [^M] filter out the ability to set active
+ # all nodes. The [!M] filter out the ability to set active
# on the MDS servers which is tested with wait_osp_* below.
# For ost_server_uuid that only exist on client so filtering
# is safe.
# test new client starts deactivated
umount_client $MOUNT || error "umount_client $MOUNT failed"
mount_client $MOUNT || error "mount_client $MOUNT failed"
- RESULT=$($LCTL get_param -n $PROC_UUID | grep DEACTIV | grep NEW)
- if [ -z "$RESULT" ]; then
- error "New client start active: $(lctl get_param -n $PROC_UUID)"
- else
- echo "New client success: got $RESULT"
- fi
+
+ # the 2nd and 3rd field of ost_server_uuid do not update at the same
+ # time when using lctl set_param -P
+ wait_update_facet client \
+ "$LCTL get_param -n $PROC_UUID | awk '{print \\\$3 }'" \
+ "DEACTIVATED" ||
+ error "New client start active: $($LCTL get_param -n $PROC_UUID)"
+
+ echo "New client success: got '$($LCTL get_param -n $PROC_UUID)'"
# make sure it reactivates
set_persistent_param_and_check client $PROC_ACT $PARAM $ACTV
pass
echo Erase parameter setting
- if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ if [[ $PERM_CMD == *"set_param -P"* ]]; then
do_facet mgs "$PERM_CMD -d $TEST" ||
error "Erase param $TEST failed"
else
local TEST="$LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import |
grep failover_nids | sed -n 's/.*\($NEW\).*/\1/p'"
- if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ if [[ $PERM_CMD == *"set_param -P"* ]]; then
PARAM="osc.$FSNAME-OST0000-osc-[^M]*.import"
echo "Setting $PARAM from $TEST to $NEW"
do_facet mgs "$PERM_CMD $PARAM='connection=$NEW'" ||
[ $NIDCOUNT -eq $((orignidcount + 1)) ] ||
error "Failover nid not added"
- if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ if [[ $PERM_CMD == *"set_param -P"* ]]; then
do_facet mgs "$PERM_CMD -d osc.$FSNAME-OST0000-osc-*.import"
else
do_facet mgs "$PERM_CMD -d $FSNAME-OST0000.failover.node" ||
}
t32_verify_quota() {
- local node=$1
+ local facet=$1
local fsname=$2
local mnt=$3
local fstype=$(facet_fstype $SINGLEMDS)
# verification in 32b. The object quota usage should be accurate after
# zfs-0.7.0 is released.
[ $fstype == "zfs" ] && {
- local zfs_version=$(do_node $node cat /sys/module/zfs/version)
+ local zfs_version=$(do_facet $facet cat /sys/module/zfs/version)
[ $(version_code $zfs_version) -lt $(version_code 0.7.0) ] && {
echo "Skip quota verify for zfs: $zfs_version"
return 1
}
- set_persistent_param_and_check $node \
+ set_persistent_param_and_check $facet \
"osd-$fstype.$fsname-MDT0000.quota_slave.enabled" \
- $fsname.quota.mdt" ug
+ "$fsname.quota.mdt" ug
- set_persistent_param_and_check $node \
+ set_persistent_param_and_check $facet \
"osd-$fstype.$fsname-OST0000.quota_slave.enabled" \
- $fsname.quota.ost" ug
+ "$fsname.quota.ost" ug
chmod 0777 $mnt
runas -u $T32_QID -g $T32_QID dd if=/dev/zero of=$mnt/t32_qf_new \
return 1
fi
- if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ if [[ $PERM_CMD == *"set_param -P"* ]]; then
$r $PERM_CMD osc.$fsname-OST0000*.import=connection=$nid || {
error_noexit "Setting OST \"failover.node\""
return 1
fi
if [ "$dne_upgrade" != "no" ]; then
- if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ if [[ $PERM_CMD == *"set_param -P"* ]]; then
$r $PERM_CMD mdc.$fsname-MDT0001*.import=connection=$nid || {
error_noexit "Setting MDT1 \"failover.node\""
return 1
shall_cleanup_lustre=true
$r $LCTL set_param debug="$PTLDEBUG"
+ # Leave re-enabling this to a separate patch for LU-11558
+ # t32_verify_quota $SINGLEMDS $fsname $tmp/mnt/lustre || {
+ # error_noexit "verify quota failed"
+ # return 1
+ #}
+
if $r test -f $tmp/list; then
#
# There is not a Test Framework API to copy files to or
}
nrpcs=$((nrpcs_orig + 5))
- set_persistent_param_and_check $HOSTNAME \
+ set_persistent_param_and_check client \
"mdc.$fsname-MDT0000*.max_rpcs_in_flight" \
"$fsname-MDT0000.mdc.max_rpcs_in_flight" $nrpcs || {
error_noexit "Changing \"max_rpcs_in_flight\""
start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_fs2 EXIT INT
start fs2ost $fs2ostdev $OST_MOUNT_OPTS
- if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ if [[ $PERM_CMD == *"set_param -P"* ]]; then
do_facet mgs "$PERM_CMD timeout=200" ||
error "$PERM_CMD timeout=200 failed"
else
local device=$(do_facet $SINGLEMDS "$LCTL get_param -n devices" |
awk '($3 ~ "mdt" && $4 ~ "MDT") { print $4 }' | head -1)
- if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ if [[ $PERM_CMD == *"set_param -P"* ]]; then
do_facet mgs "$PERM_CMD \
mdc.*${device}*.import=connection=$(h2nettype $FAKENID)" ||
error "Setting mdc.*${device}*.import=connection=\
local device=$(do_facet $SINGLEMDS "$LCTL get_param -n devices" |
awk '($3 ~ "mdt" && $4 ~ "MDT") { print $4 }' | head -1)
- if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ if [[ $PERM_CMD == *"set_param -P"* ]]; then
do_facet mgs "$PERM_CMD \
mdc.*${device}*.import=connection=$(h2nettype $FAKENID)" ||
error "Set mdc.*${device}*.import=connection=\
setup
check_mount || error "client was not mounted"
- if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ if [[ $PERM_CMD == *"set_param -P"* ]]; then
PARAM="llite.$FSNAME-*.some_wrong_param"
else
PARAM="$FSNAME.llite.some_wrong_param"
run_test 49b "check PARAM_SYS_LDLM_TIMEOUT option of mkfs.lustre"
lazystatfs() {
+ # wait long enough to exceed OBD_STATFS_CACHE_SECONDS = 1
+ sleep 2
# Test both statfs and lfs df and fail if either one fails
multiop_bg_pause $1 f_
- RC1=$?
+ RC=$?
PID=$!
killall -USR1 multiop
- [ $RC1 -ne 0 ] && log "lazystatfs multiop failed"
- wait $PID || { RC1=$?; log "multiop return error "; }
+ [ $RC -ne 0 ] && log "lazystatfs multiop failed"
+ wait $PID || { RC=$?; log "multiop return error "; }
+ # wait long enough to exceed OBD_STATFS_CACHE_SECONDS = 1
+ sleep 2
$LFS df -l &
PID=$!
sleep 5
- kill -s 0 $PID
- RC2=$?
- if [ $RC2 -eq 0 ]; then
- kill -s 9 $PID
- log "lazystatfs df failed"
+ if kill -s 0 $PID; then
+ RC=1
+ kill -s 9 $PID
+ log "lazystatfs lfs df failed to complete in 5s"
fi
- RC=0
- [[ $RC1 -ne 0 || $RC2 -eq 0 ]] && RC=1
return $RC
}
# Wait for client to detect down OST
stop_ost || error "Unable to stop OST1"
- wait_osc_import_state mds ost DISCONN
+ wait_osc_import_state client ost DISCONN
+ $LCTL dl
+ log "OSCs should all be DISCONN"
lazystatfs $MOUNT || error "lazystatfs should not return EIO"
wait_osc_import_state mds ost2 FULL
wait_osc_import_ready client ost2
- if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ if [[ $PERM_CMD == *"set_param -P"* ]]; then
local PARAM="osc.${FSNAME}-OST0001*.active"
else
local PARAM="${FSNAME}-OST0001.osc.active"
$SETSTRIPE -c -1 -i 0 $DIR/$tdir/2 ||
error "$SETSTRIPE $DIR/$tdir/2 failed"
sleep 1 && echo "create a file after OST1 is activated"
- # create some file
- createmany -o $DIR/$tdir/2/$tfile-%d 1
+ # doing some io, shouldn't crash
+ dd if=/dev/zero of=$DIR/$tdir/2/$tfile-io bs=1M count=10
# check OSC import is working
stat $DIR/$tdir/2/* >/dev/null 2>&1 ||
error "some OSC imports are still not connected"
# cleanup
+ rm -rf DIR/$tdir
umount_client $MOUNT || error "Unable to umount client"
stop_ost2 || error "Unable to stop OST2"
cleanup_nocli || error "cleanup_nocli failed with $?"
mkdir $DIR/$tdir || error "mkdir $DIR/$tdir failed"
- if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ if [[ $PERM_CMD == *"set_param -P"* ]]; then
$PERM_CMD mdc.${FSNAME}-MDT0001-mdc-*.active=0 &&
error "deactive MDC0 succeeds"
else
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")
+ 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")
+ "$LCTL get_param -n ${paramp}.threads_started" || echo 0)
lassert 28 "$msg" '(($tstarted >= $tmin && $tstarted <= $tmax ))' ||
return $?
cleanup
echo "wrong nids list should not destroy the system"
do_facet mgs $LCTL replace_nids $FSNAME-OST0000 "wrong nids list" &&
error "wrong parse"
+ do_facet mgs $LCTL replace_nids $FSNAME-OST0000 "asdfasdf, asdfadf" &&
+ error "wrong parse"
echo "replace OST nid"
do_facet mgs $LCTL replace_nids $FSNAME-OST0000 $OST1_NID ||
do_facet mgs $LCTL replace_nids $FSNAME-MDT0000 "wrong nids list" &&
error "wrong parse"
+ local FAKE_NIDS="192.168.0.112@tcp1,192.168.0.112@tcp2"
+ local FAKE_FAILOVER="192.168.0.113@tcp1,192.168.0.113@tcp2"
+ local NIDS_AND_FAILOVER="$MDS_NID,$FAKE_NIDS:$FAKE_FAILOVER"
+ echo "set NIDs with failover"
+ do_facet mgs $LCTL replace_nids $FSNAME-MDT0000 $NIDS_AND_FAILOVER ||
+ error "replace nids failed"
+
+
echo "replace MDS nid"
do_facet mgs $LCTL replace_nids $FSNAME-MDT0000 $MDS_NID ||
error "replace nids failed"
run_test 100 "check lshowmount lists MGS, MDT, OST and 0@lo"
test_101() {
- local createmany_oid
+ local createmany_pid
local dev=$FSNAME-OST0000-osc-MDT0000
setup
- createmany -o $DIR1/$tfile-%d 50000 &
- createmany_oid=$!
+ mkdir $DIR1/$tdir
+ createmany -o $DIR1/$tdir/$tfile-%d 50000 &
+ createmany_pid=$!
# MDT->OST reconnection causes MDT<->OST last_id synchornisation
# via osp_precreate_cleanup_orphans.
for ((i = 0; i < 100; i++)); do
done
ls -asl $MOUNT | grep '???' &&
- (kill -9 $createmany_oid &>/dev/null; \
- error "File hasn't object on OST")
+ { kill -9 $createmany_pid &>/dev/null;
+ error "File has no object on OST"; }
- kill -s 0 $createmany_oid || break
+ kill -s 0 $createmany_pid || break
done
- wait $createmany_oid
+ wait $createmany_pid
+
+ unlinkmany $DIR1/$tdir/$tfile-%d 50000
cleanup
}
run_test 101 "Race MDT->OST reconnection with create"
start_ost || error "unable to start OST"
# add unknown configuration parameter.
- if [[ $PERM_CMD = *"set_param -P"* ]]; then
+ if [[ $PERM_CMD == *"set_param -P"* ]]; then
cmd="$PERM_CMD ost.$FSNAME-OST0000*.unknown_param"
else
cmd="$PERM_CMD $FSNAME-OST0000*.ost.unknown_param"
$rcmd mount -t ldiskfs -o loop $tmp/images/$facet \
$tmp/mnt/$facet ||
error "failed to local mount $facet"
+
$rcmd tar jxf $LUSTRE/tests/zfs_${facet}_2_11.tar.bz2 \
--xattrs --xattrs-include="*.*" \
-C $tmp/mnt/$facet/ > /dev/null 2>&1 ||
}
run_test 117 "lctl get_param return errors properly"
+test_120() { # LU-11130
+ [ "$MDSCOUNT" -lt 2 ] && skip "mdt count < 2"
+ [ $(facet_fstype $SINGLEMDS) != "ldiskfs" ] &&
+ skip "ldiskfs only test"
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.11.56) ] &&
+ skip "Need DNE2 capable MD target with LU-11130 fix"
+
+ setup
+
+ local mds1host=$(facet_active_host mds1)
+ local mds1dev=$(mdsdevname 1)
+
+ $LFS mkdir -i 1 $DIR/$tdir
+ $LFS mkdir -i 0 $DIR/$tdir/mds1dir
+
+ ln -s foo $DIR/$tdir/bar
+ mv $DIR/$tdir/bar $DIR/$tdir/mds1dir/bar2 ||
+ error "cross-target rename failed"
+
+ stopall
+
+ run_e2fsck $mds1host $mds1dev "-n"
+}
+run_test 120 "cross-target rename should not create bad symlinks"
+
test_122() {
[ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
[[ $(lustre_version_code ost1) -ge $(version_code 2.11.53) ]] ||
}
run_test 122 "Check OST sequence update"
+test_123() {
+ setupall
+ local yaml_file="$TMP/$tfile.yaml"
+ do_facet mgs rm "$yaml_file"
+ local cfgfiles=$(do_facet mgs "lctl --device MGS llog_catlist |"\
+ " sed 's/config_log://'")
+
+ # set jobid_var to a different value for test
+ local orig_val=$(do_facet mgs $LCTL get_param jobid_var)
+ do_facet mgs $LCTL set_param -P jobid_var="testname"
+
+ for i in $cfgfiles params; do
+ do_facet mgs "lctl --device MGS llog_print ${i} >> $yaml_file"
+ done
+
+ echo "Unmounting FS"
+ stopall
+ echo "Writeconf"
+ writeconf_all
+ echo "Remounting"
+ mountmgs
+ mountmds
+ mountoss
+ mountcli
+
+ # Reapply the config from before
+ echo "Setting configuration parameters"
+ do_facet mgs "lctl set_param -F $yaml_file"
+
+ local set_val=$(do_facet mgs $LCTL get_param jobid_var)
+ do_facet mgs $LCTL set_param -P $orig_val
+
+ [ $set_val == "jobid_var=testname" ] ||
+ error "$set_val is not testname"
+
+ do_facet mgs rm "$yaml_file"
+}
+run_test 123 "clear and reset all parameters using set_param -F"
+
+test_124()
+{
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ [ -z $mds2failover_HOST ] && skip "needs MDT failover setup" && return
+
+ setup
+ cleanup
+
+ load_modules
+ if combined_mgs_mds; then
+ start_mdt 1 "-o nosvc" ||
+ error "starting mds with nosvc option failed"
+ fi
+ local nid=$(do_facet mds2 $LCTL list_nids | head -1)
+ local failover_nid=$(do_node $mds2failover_HOST $LCTL list_nids | head -1)
+ do_facet mgs $LCTL replace_nids $FSNAME-MDT0001 $nid:$failover_nid ||
+ error "replace_nids execution error"
+
+ if combined_mgs_mds; then
+ stop_mdt 1
+ fi
+
+ setup
+ fail mds2
+ echo "lfs setdirstripe"
+ $LFS setdirstripe -i 1 $MOUNT/$tdir || error "setdirstirpe error"
+ echo ok
+}
+run_test 124 "check failover after replace_nids"
+
if ! combined_mgs_mds ; then
stop mgs
fi