. ${CONFIG:=$LUSTRE/tests/cfg/${NAME}.sh}
init_logging
-[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 24D 27m 64b 68 71 77f 78 115 124b 230d"
+[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 24D 27m 64b 68 71 77f 78 115 124b"
if [ $(facet_fstype $SINGLEMDS) = "zfs" ]; then
- # bug number for skipped test: LU-4536 LU-5242 LU-1957 LU-2805
- ALWAYS_EXCEPT="$ALWAYS_EXCEPT 65ic 78 79 80 180 184c"
+ # bug number for skipped test: LU-4536 LU-1957 LU-2805
+ ALWAYS_EXCEPT="$ALWAYS_EXCEPT 65ic 180 184c"
[ "$SLOW" = "no" ] && EXCEPT_SLOW="$EXCEPT_SLOW 51b 51ba"
fi
test_7b() {
if [ ! -d $DIR/$tdir ]; then
- mkdir $DIR/$tdir
+ test_mkdir $DIR/$tdir
fi
$MCREATE $DIR/$tdir/$tfile
echo -n foo > $DIR/$tdir/$tfile
mv $DIR/$tdir/$tfile $DIR/$tdir/${tfile}_2
$CHECKSTAT -t file $DIR/$tdir/${tfile}_2 ||
error "$tdir/${tfile_2} not a file after rename"
+ rm $DIR/$tdir/${tfile}_2 || error "unlink failed after rename"
}
run_test 15 "touch .../d15/f; mv .../d15/f .../d15/f2 =========="
test_17l() { # LU-279
[[ -z "$(which getfattr 2>/dev/null)" ]] &&
skip "no getfattr command" && return 0
- mkdir -p $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
touch $DIR/$tdir/$tfile
ln -s $DIR/$tdir/$tfile $DIR/$tdir/$tfile.lnk
for path in "$DIR/$tdir" "$DIR/$tdir/$tfile" "$DIR/$tdir/$tfile.lnk"; do
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- mkdir -p $WDIR
+ test_mkdir -p $WDIR
long_sym=$short_sym
# create a long symlink file
for ((i = 0; i < 4; ++i)); do
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- mkdir $DIR/$tdir
+ test_mkdir $DIR/$tdir
for ((i=0; i<10; i++)); do
$LFS mkdir -i1 -c2 $DIR/$tdir/remote_dir_${i} ||
error "create remote dir error $i"
mkdir -p $DIR/$tdir/remote_dir_${i}
createmany -o $DIR/$tdir/remote_dir_${i}/f 10 ||
error "create files under remote dir failed $i"
- $LFS mv --mdt-index 1 $DIR/$tdir/remote_dir_${i} ||
+ $LFS migrate --mdt-index 1 $DIR/$tdir/remote_dir_${i} ||
error "migrate remote dir error $i"
done
check_fs_consistency_17n || error "e2fsck report error after migration"
local WDIR=$DIR/${tdir}o
local mdt_index
- local mdtdevname
local rc=0
- mkdir -p $WDIR
+ test_mkdir -p $WDIR
mdt_index=$($LFS getstripe -M $WDIR)
mdt_index=$((mdt_index+1))
- mdtdevname=$(mdsdevname $mdt_index)
touch $WDIR/$tfile
- stop mds${mdt_index}
- start mds${mdt_index} $mdtdevname $MDS_MOUNT_OPTS ||
- error "mount mds${mdt_index} failed"
+
+ #fail mds will wait the failover finish then set
+ #following fail_loc to avoid interfer the recovery process.
+ fail mds${mdt_index}
#define OBD_FAIL_OSD_LMA_INCOMPAT 0x194
do_facet mds${mdt_index} lctl set_param fail_loc=0x194
# Performance issue on ZFS see LU-4072 (c.f. LU-2887)
[ $(facet_fstype $SINGLEMDS) = "zfs" ] && NRFILES=10000
- mkdir -p $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
createmany -m $DIR/$tdir/$tfile $NRFILES
cancel_lru_locks mdc
local MDTIDX=1
local remote_dir=$DIR/$tdir/remote_dir
- mkdir -p $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
$LFS mkdir -i $MDTIDX $remote_dir ||
error "create remote directory failed"
- mkdir -p $DIR/$tdir/src_dir
+ test_mkdir -p $DIR/$tdir/src_dir
touch $DIR/$tdir/src_file
- mkdir -p $remote_dir/tgt_dir
+ test_mkdir -p $remote_dir/tgt_dir
touch $remote_dir/tgt_file
- mrename $remote_dir $DIR/ &&
- error "rename dir cross MDT works!"
+ mrename $DIR/$tdir/src_dir $remote_dir/tgt_dir ||
+ error "rename dir cross MDT failed!"
- mrename $DIR/$tdir/src_dir $remote_dir/tgt_dir &&
- error "rename dir cross MDT works!"
+ mrename $DIR/$tdir/src_file $remote_dir/tgt_file ||
+ error "rename file cross MDT failed!"
- mrename $DIR/$tdir/src_file $remote_dir/tgt_file &&
- error "rename file cross MDT works!"
-
- ln $DIR/$tdir/src_file $remote_dir/tgt_file1 &&
- error "ln file cross MDT should not work!"
+ touch $DIR/$tdir/ln_file
+ ln $DIR/$tdir/ln_file $remote_dir/ln_name ||
+ error "ln file cross MDT failed"
rm -rf $DIR/$tdir || error "Can not delete directories"
}
-run_test 24x "cross rename/link should be failed"
+run_test 24x "cross MDT rename/link"
test_24y() {
[[ $MDSCOUNT -lt 2 ]] && skip "needs >= 2 MDTs" && return
local MDTIDX=1
local remote_dir=$DIR/$tdir/remote_dir
- mkdir -p $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
$LFS mkdir -i $MDTIDX $remote_dir ||
error "create remote directory failed"
- mkdir -p $remote_dir/src_dir
+ test_mkdir -p $remote_dir/src_dir
touch $remote_dir/src_file
- mkdir -p $remote_dir/tgt_dir
+ test_mkdir -p $remote_dir/tgt_dir
touch $remote_dir/tgt_file
mrename $remote_dir/src_dir $remote_dir/tgt_dir ||
}
run_test 24y "rename/link on the same dir should succeed"
-test_24z() {
- [[ $MDSCOUNT -lt 2 ]] && skip "needs >= 2 MDTs" && return
- [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- local MDTIDX=1
- local remote_src=$DIR/$tdir/remote_dir
- local remote_tgt=$DIR/$tdir/remote_tgt
-
- mkdir -p $DIR/$tdir
- $LFS mkdir -i $MDTIDX $remote_src ||
- error "create remote directory failed"
-
- $LFS mkdir -i $MDTIDX $remote_tgt ||
- error "create remote directory failed"
-
- mrename $remote_src $remote_tgt &&
- error "rename remote dirs should not work!"
-
- # If target dir does not exists, it should succeed
- rm -rf $remote_tgt
- mrename $remote_src $remote_tgt ||
- error "rename remote dirs(tgt dir does not exists) failed!"
-
- rm -rf $DIR/$tdir || error "Can not delete directories"
-}
-run_test 24z "rename one remote dir to another remote dir should fail"
-
test_24A() { # LU-3182
local NFILES=5000
rm -rf $DIR/$tdir
- mkdir -p $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
createmany -m $DIR/$tdir/$tfile $NFILES
local t=$(ls $DIR/$tdir | wc -l)
local u=$(ls $DIR/$tdir | sort -u | wc -l)
[ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
local count
- mkdir $DIR/$tdir
+ test_mkdir $DIR/$tdir
$LFS setdirstripe -i0 -c$MDSCOUNT $DIR/$tdir/striped_dir ||
error "create striped dir failed"
}
run_test 24D "readdir() returns correct number of entries after cursor reload"
+test_24E() {
+ [[ $MDSCOUNT -lt 4 ]] && skip "needs >= 4 MDTs" && return
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+
+ mkdir -p $DIR/$tdir
+ mkdir $DIR/$tdir/src_dir
+ $LFS mkdir -i 1 $DIR/$tdir/src_dir/src_child ||
+ error "create remote source failed"
+
+ touch $DIR/$tdir/src_dir/src_child/a
+
+ $LFS mkdir -i 2 $DIR/$tdir/tgt_dir ||
+ error "create remote target dir failed"
+
+ $LFS mkdir -i 3 $DIR/$tdir/tgt_dir/tgt_child ||
+ error "create remote target child failed"
+
+ mrename $DIR/$tdir/src_dir/src_child $DIR/$tdir/tgt_dir/tgt_child ||
+ error "rename dir cross MDT failed!"
+
+ find $DIR/$tdir
+
+ $CHECKSTAT -t dir $DIR/$tdir/src_dir/src_child &&
+ error "src_child still exists after rename"
+
+ $CHECKSTAT -t file $DIR/$tdir/tgt_dir/tgt_child/a ||
+ error "missing file(a) after rename"
+
+ rm -rf $DIR/$tdir || error "Can not delete directories"
+}
+run_test 24E "cross MDT rename/link"
+
test_25a() {
echo '== symlink sanity ============================================='
run_test 27d "create file with default settings ================"
test_27e() {
+ # LU-5839 adds check for existed layout before setting it
+ [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.56) ]] &&
+ skip "Need MDS version at least 2.7.56" && return
test_mkdir -p $DIR/d27
$SETSTRIPE -c 2 $DIR/d27/f12 || error "setstripe failed"
$SETSTRIPE -c 2 $DIR/d27/f12 && error "setstripe succeeded twice"
done
OSTIDX=$(index_from_ostuuid $OST)
- mkdir -p $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
$SETSTRIPE -c 1 $DIR/$tdir # 1 stripe / file
for OSC in $MDS_OSCS; do
local ost_list=$(seq $first_ost $ost_step $last_ost)
local ost_range="$first_ost $last_ost $ost_step"
- mkdir -p $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
pool_add $POOL || error "pool_add failed"
pool_add_targets $POOL $ost_range || error "pool_add_targets failed"
llapi_layout_test -d$DIR/$tdir -p$POOL -o$OSTCOUNT ||
}
test_31o() { # LU-2901
- mkdir -p $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
for LOOP in $(seq 100); do
rm -f $DIR/$tdir/$tfile*
for THREAD in $(seq 8); do
test_31p() {
[ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
- mkdir $DIR/$tdir
+ test_mkdir $DIR/$tdir
$LFS setdirstripe -i0 -c2 $DIR/$tdir/striped_dir
$LFS setdirstripe -D -c2 -t all_char $DIR/$tdir/striped_dir
local MDTIDX=1
local remote_dir=$DIR/$tdir/remote_dir
- mkdir -p $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
$LFS mkdir -i $MDTIDX $remote_dir ||
error "create remote directory failed"
test_36i() {
[ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
- mkdir $DIR/$tdir
+ test_mkdir $DIR/$tdir
$LFS setdirstripe -i0 -c$MDSCOUNT $DIR/$tdir/striped_dir
local mtime=$(stat -c%Y $DIR/$tdir/striped_dir)
test_39o() {
TESTDIR=$DIR/$tdir/$tfile
[ -e $TESTDIR ] && rm -rf $TESTDIR
- test_mkdir -p $TESTDIR
+ mkdir -p $TESTDIR
cd $TESTDIR
links1=2
ls
local MDTIDX=1
TESTDIR=$DIR/$tdir/$tfile
[ -e $TESTDIR ] && rm -rf $TESTDIR
- mkdir -p $TESTDIR
+ test_mkdir -p $TESTDIR
cd $TESTDIR
links1=2
ls
skip_env "need 2 OST, skipping test" && return
local dir0=$DIR/$tdir/$testnum
- mkdir -p $dir0 || error "creating dir $dir0"
+ test_mkdir -p $dir0 || error "creating dir $dir0"
local ref1=/etc/passwd
local file1=$dir0/file1
test_56y() {
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.53) ] &&
- skip "No HSM support on MDS of $(get_lustre_version)," \
- "need 2.4.53 at least" && return
- local res=""
+ skip "No HSM $(lustre_build_version $SINGLEMDS) MDS < 2.4.53" &&
+ return
+ local res=""
local dir0=$DIR/$tdir/$testnum
- mkdir -p $dir0 || error "creating dir $dir0"
+ test_mkdir -p $dir0 || error "creating dir $dir0"
local f1=$dir0/file1
local f2=$dir0/file2
run_test 69 "verify oa2dentry return -ENOENT doesn't LBUG ======"
test_71() {
- test_mkdir -p $DIR/$tdir
- sh rundbench -C -D $DIR/$tdir 2 || error "dbench failed!"
+ test_mkdir -p $DIR/$tdir
+ $LFS setdirstripe -D -c$MDSCOUNT $DIR/$tdir
+ sh rundbench -C -D $DIR/$tdir 2 || error "dbench failed!"
}
run_test 71 "Running dbench on lustre (don't segment fault) ===="
run_test 102p "check setxattr(2) correctly fails without permission"
test_102q() {
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.92) ] &&
+ skip "MDS needs to be at least 2.6.92" && return
orphan_linkea_check $DIR/$tfile || error "orphan_linkea_check"
}
run_test 102q "flistxattr should not return trusted.link EAs for orphans"
test_102r() {
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.6.93) ] &&
+ skip "MDS needs to be at least 2.6.93" && return
touch $DIR/$tfile || error "touch"
setfattr -n user.$(basename $tfile) $DIR/$tfile || error "setfattr"
getfattr -n user.$(basename $tfile) $DIR/$tfile || error "getfattr"
rm $DIR/$tfile || error "rm"
+
+ #normal directory
+ mkdir -p $DIR/$tdir || error "mkdir"
+ setfattr -n user.$(basename $tdir) $DIR/$tdir || error "setfattr dir"
+ getfattr -n user.$(basename $tdir) $DIR/$tdir || error "getfattr dir"
+ setfattr -x user.$(basename $tdir) $DIR/$tdir ||
+ error "$testfile error deleting user.author1"
+ getfattr -d -m user.$(basename $tdir) 2> /dev/null |
+ grep "user.$(basename $tdir)" &&
+ error "$tdir did not delete user.$(basename $tdir)"
+ rmdir $DIR/$tdir || error "rmdir"
+
+ #striped directory
+ test_mkdir -p $DIR/$tdir || error "make striped dir"
+ setfattr -n user.$(basename $tdir) $DIR/$tdir || error "setfattr dir"
+ getfattr -n user.$(basename $tdir) $DIR/$tdir || error "getfattr dir"
+ setfattr -x user.$(basename $tdir) $DIR/$tdir ||
+ error "$testfile error deleting user.author1"
+ getfattr -d -m user.$(basename $tdir) 2> /dev/null |
+ grep "user.$(basename $tdir)" &&
+ error "$tdir did not delete user.$(basename $tdir)"
+ rmdir $DIR/$tdir || error "rm striped dir"
}
run_test 102r "set EAs with empty values"
}
run_test 124b "lru resize (performance test) ======================="
+test_124c() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ -z "$($LCTL get_param -n mdc.*.connect_flags | grep lru_resize)" ] &&
+ skip "no lru resize on server" && return 0
+
+ # cache ununsed locks on client
+ local nr=100
+ cancel_lru_locks mdc
+ test_mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir"
+ createmany -o $DIR/$tdir/f $nr ||
+ error "failed to create $nr files in $DIR/$tdir"
+ ls -l $DIR/$tdir > /dev/null
+
+ local nsdir="ldlm.namespaces.*-MDT0000-mdc-*"
+ local unused=$($LCTL get_param -n $nsdir.lock_unused_count)
+ local max_age=$($LCTL get_param -n $nsdir.lru_max_age)
+ local recalc_p=$($LCTL get_param -n $nsdir.pool.recalc_period)
+ echo "unused=$unused, max_age=$max_age, recalc_p=$recalc_p"
+
+ # set lru_max_age to 1 sec
+ $LCTL set_param $nsdir.lru_max_age=1000 # jiffies
+ echo "sleep $((recalc_p * 2)) seconds..."
+ sleep $((recalc_p * 2))
+
+ local remaining=$($LCTL get_param -n $nsdir.lock_unused_count)
+ # restore lru_max_age
+ $LCTL set_param -n $nsdir.lru_max_age $max_age
+ [ $remaining -eq 0 ] || error "$remaining locks are not canceled"
+ unlinkmany $DIR/$tdir/f $nr
+}
+run_test 124c "LRUR cancel very aged locks"
+
test_125() { # 13358
[ -z "$(lctl get_param -n llite.*.client_type | grep local)" ] && skip "must run as local client" && return
[ -z "$(lctl get_param -n mdc.*-mdc-*.connect_flags | grep acl)" ] && skip "must have acl enabled" && return
}
run_test 133g "Check for Oopses on bad io area writes/reads in /proc"
+test_134a() {
+ [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.54) ]] &&
+ skip "Need MDS version at least 2.7.54" && return
+
+ mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir"
+ cancel_lru_locks mdc
+
+ local nsdir="ldlm.namespaces.*-MDT0000-mdc-*"
+ local unused=$($LCTL get_param -n $nsdir.lock_unused_count)
+ [ $unused -eq 0 ] || "$unused locks are not cleared"
+
+ local nr=1000
+ createmany -o $DIR/$tdir/f $nr ||
+ error "failed to create $nr files in $DIR/$tdir"
+ unused=$($LCTL get_param -n $nsdir.lock_unused_count)
+
+ #define OBD_FAIL_LDLM_WATERMARK_LOW 0x327
+ do_facet mds1 $LCTL set_param fail_loc=0x327
+ do_facet mds1 $LCTL set_param fail_val=500
+ touch $DIR/$tdir/m
+
+ echo "sleep 10 seconds ..."
+ sleep 10
+ local lck_cnt=$($LCTL get_param -n $nsdir.lock_unused_count)
+
+ do_facet mds1 $LCTL set_param fail_loc=0
+ do_facet mds1 $LCTL set_param fail_val=0
+ [ $lck_cnt -lt $unused ] ||
+ error "No locks reclaimed, before:$unused, after:$lck_cnt"
+
+ rm $DIR/$tdir/m
+ unlinkmany $DIR/$tdir/f $nr
+}
+run_test 134a "Server reclaims locks when reaching low watermark"
+
+test_134b() {
+ [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.54) ]] &&
+ skip "Need MDS version at least 2.7.54" && return
+
+ mkdir -p $DIR/$tdir || error "failed to create $DIR/$tdir"
+ cancel_lru_locks mdc
+
+ local low_wm=$(do_facet mds1 $LCTL get_param -n ldlm.watermark_mb_low)
+ # disable reclaim temporarily
+ do_facet mds1 $LCTL set_param ldlm.watermark_mb_low=0
+
+ #define OBD_FAIL_LDLM_WATERMARK_HIGH 0x328
+ do_facet mds1 $LCTL set_param fail_loc=0x328
+ do_facet mds1 $LCTL set_param fail_val=500
+
+ $LCTL set_param debug=+trace
+
+ local nr=600
+ createmany -o $DIR/$tdir/f $nr &
+ local create_pid=$!
+
+ echo "Sleep $TIMEOUT seconds ..."
+ sleep $TIMEOUT
+ if ! ps -p $create_pid > /dev/null 2>&1; then
+ do_facet mds1 $LCTL set_param fail_loc=0
+ do_facet mds1 $LCTL set_param fail_val=0
+ do_facet mds1 $LCTL set_param ldlm.watermark_mb_low=$low_wm
+ error "createmany finished incorrectly!"
+ fi
+ do_facet mds1 $LCTL set_param fail_loc=0
+ do_facet mds1 $LCTL set_param fail_val=0
+ do_facet mds1 $LCTL set_param ldlm.watermark_mb_low=$low_wm
+ wait $create_pid || return 1
+
+ unlinkmany $DIR/$tdir/f $nr
+}
+run_test 134b "Server rejects lock request when reaching high watermark"
+
test_140() { #bug-17379
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
test_mkdir -p $DIR/$tdir || error "Creating dir $DIR/$tdir"
# LU-4239: Verify fid2path works with paths 100 or more directories deep
test_162c() {
+ [[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.51) ]] &&
+ skip "Need MDS version at least 2.7.51" && return
test_mkdir $DIR/$tdir.local
test_mkdir $DIR/$tdir.remote
local lpath=$tdir.local
run_test 181 "Test open-unlinked dir ========================"
test_182() {
- [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- # disable MDC RPC lock wouldn't crash client
local fcount=1000
- local tcount=4
+ local tcount=10
mkdir -p $DIR/$tdir || error "creating dir $DIR/$tdir"
-#define OBD_FAIL_MDC_RPCS_SEM 0x804
- $LCTL set_param fail_loc=0x804
- for (( i=0; i < $tcount; i++ )) ; do
+ $LCTL set_param mdc.*.rpc_stats=clear
+
+ for (( i = 0; i < $tcount; i++ )) ; do
mkdir $DIR/$tdir/$i
+ done
+
+ for (( i = 0; i < $tcount; i++ )) ; do
createmany -o $DIR/$tdir/$i/f- $fcount &
done
wait
- for (( i=0; i < $tcount; i++ )) ; do
+ for (( i = 0; i < $tcount; i++ )) ; do
unlinkmany $DIR/$tdir/$i/f- $fcount &
done
wait
- rm -rf $DIR/$tdir
+ $LCTL get_param mdc.*.rpc_stats
- $LCTL set_param fail_loc=0
+ rm -rf $DIR/$tdir
}
-run_test 182 "Disable MDC RPCs semaphore wouldn't crash client ================"
+run_test 182 "Test parallel modify metadata operations ================"
test_183() { # LU-2275
remote_mds_nodsh && skip "remote MDS with nodsh" && return
run_test 185 "Volatile file support"
test_187a() {
+ remote_mds_nodsh && skip "remote MDS with nodsh" && return
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.0) ] &&
+ skip "Need MDS version at least 2.3.0" && return
+
local dir0=$DIR/$tdir/$testnum
mkdir -p $dir0 || error "creating dir $dir0"
run_test 187a "Test data version change"
test_187b() {
+ remote_mds_nodsh && skip "remote MDS with nodsh" && return
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.0) ] &&
+ skip "Need MDS version at least 2.3.0" && return
+
local dir0=$DIR/$tdir/$testnum
mkdir -p $dir0 || error "creating dir $dir0"
fi
verify_jobstats() {
- local cmd=$1
- local target=$2
-
- # clear old jobstats
- do_facet $SINGLEMDS lctl set_param mdt.*.job_stats="clear"
- do_facet ost1 lctl set_param obdfilter.*.job_stats="clear"
-
- # use a new JobID for this test, or we might see an old one
- [ "$JOBENV" = "FAKE_JOBID" ] && FAKE_JOBID=test_id.$testnum.$RANDOM
+ local cmd=($1)
+ shift
+ local facets="$@"
+
+# we don't really need to clear the stats for this test to work, since each
+# command has a unique jobid, but it makes debugging easier if needed.
+# for facet in $facets; do
+# local dev=$(convert_facet2label $facet)
+# # clear old jobstats
+# do_facet $facet lctl set_param *.$dev.job_stats="clear"
+# done
+
+ # use a new JobID for each test, or we might see an old one
+ [ "$JOBENV" = "FAKE_JOBID" ] &&
+ FAKE_JOBID=id.$testnum.$(basename ${cmd[0]}).$RANDOM
JOBVAL=${!JOBENV}
- log "Test: $cmd"
+ log "Test: ${cmd[*]}"
log "Using JobID environment variable $JOBENV=$JOBVAL"
if [ $JOBENV = "FAKE_JOBID" ]; then
- FAKE_JOBID=$JOBVAL $cmd
+ FAKE_JOBID=$JOBVAL ${cmd[*]}
else
- $cmd
+ ${cmd[*]}
fi
- if [ "$target" = "mdt" -o "$target" = "both" ]; then
- FACET="$SINGLEMDS" # will need to get MDS number for DNE
- do_facet $FACET lctl get_param mdt.*.job_stats |
- grep $JOBVAL || error "No job stats found on MDT $FACET"
- fi
- if [ "$target" = "ost" -o "$target" = "both" ]; then
- FACET=ost1
- do_facet $FACET lctl get_param obdfilter.*.job_stats |
- grep $JOBVAL || error "No job stats found on OST $FACET"
- fi
+ # all files are created on OST0000
+ for facet in $facets; do
+ local stats="*.$(convert_facet2label $facet).job_stats"
+ if [ $(do_facet $facet lctl get_param $stats |
+ grep -c $JOBVAL) -ne 1 ]; then
+ do_facet $facet lctl get_param $stats
+ error "No jobstats for $JOBVAL found on $facet::$stats"
+ fi
+ done
}
jobstats_set() {
wait_update $HOSTNAME "$LCTL get_param -n jobid_var" $NEW_JOBENV
}
+cleanup_205() {
+ do_facet $SINGLEMDS \
+ $LCTL set_param mdt.*.job_cleanup_interval=$OLD_INTERVAL
+ [ $OLD_JOBENV != $JOBENV ] && jobstats_set $OLD_JOBENV
+ do_facet $SINGLEMDS lctl --device $MDT0 changelog_deregister $CL_USER
+}
+
test_205() { # Job stats
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
remote_mgs_nodsh && skip "remote MGS with nodsh" && return
skip "Server doesn't support jobstats" && return 0
[[ $JOBID_VAR = disable ]] && skip "jobstats is disabled" && return
- local cmd
OLD_JOBENV=$($LCTL get_param -n jobid_var)
if [ $OLD_JOBENV != $JOBENV ]; then
jobstats_set $JOBENV
- trap jobstats_set EXIT
+ trap cleanup_205 EXIT
fi
- local user=$(do_facet $SINGLEMDS $LCTL --device $MDT0 \
- changelog_register -n)
- echo "Registered as changelog user $user"
+ CL_USER=$(do_facet $SINGLEMDS lctl --device $MDT0 changelog_register -n)
+ echo "Registered as changelog user $CL_USER"
+
+ OLD_INTERVAL=$(do_facet $SINGLEMDS \
+ lctl get_param -n mdt.*.job_cleanup_interval)
+ local interval_new=5
+ do_facet $SINGLEMDS \
+ $LCTL set_param mdt.*.job_cleanup_interval=$interval_new
+ local start=$SECONDS
+ local cmd
# mkdir
- cmd="mkdir $DIR/$tfile"
- verify_jobstats "$cmd" "mdt"
+ cmd="mkdir $DIR/$tdir"
+ verify_jobstats "$cmd" "$SINGLEMDS"
# rmdir
- cmd="rm -fr $DIR/$tfile"
- verify_jobstats "$cmd" "mdt"
+ cmd="rmdir $DIR/$tdir"
+ verify_jobstats "$cmd" "$SINGLEMDS"
+ # mkdir on secondary MDT
+ if [ $MDSCOUNT -gt 1 ]; then
+ cmd="lfs mkdir -i 1 $DIR/$tdir.remote"
+ verify_jobstats "$cmd" "mds2"
+ fi
# mknod
cmd="mknod $DIR/$tfile c 1 3"
- verify_jobstats "$cmd" "mdt"
+ verify_jobstats "$cmd" "$SINGLEMDS"
# unlink
cmd="rm -f $DIR/$tfile"
- verify_jobstats "$cmd" "mdt"
+ verify_jobstats "$cmd" "$SINGLEMDS"
+ # create all files on OST0000 so verify_jobstats can find OST stats
# open & close
cmd="$SETSTRIPE -i 0 -c 1 $DIR/$tfile"
- verify_jobstats "$cmd" "mdt"
+ verify_jobstats "$cmd" "$SINGLEMDS"
# setattr
cmd="touch $DIR/$tfile"
- verify_jobstats "$cmd" "both"
+ verify_jobstats "$cmd" "$SINGLEMDS ost1"
# write
cmd="dd if=/dev/zero of=$DIR/$tfile bs=1M count=1 oflag=sync"
- verify_jobstats "$cmd" "ost"
+ verify_jobstats "$cmd" "ost1"
# read
cmd="dd if=$DIR/$tfile of=/dev/null bs=1M count=1 iflag=direct"
- verify_jobstats "$cmd" "ost"
+ verify_jobstats "$cmd" "ost1"
# truncate
cmd="$TRUNCATE $DIR/$tfile 0"
- verify_jobstats "$cmd" "both"
+ verify_jobstats "$cmd" "$SINGLEMDS ost1"
# rename
- cmd="mv -f $DIR/$tfile $DIR/jobstats_test_rename"
- verify_jobstats "$cmd" "mdt"
+ cmd="mv -f $DIR/$tfile $DIR/$tdir.rename"
+ verify_jobstats "$cmd" "$SINGLEMDS"
+ # jobstats expiry - sleep until old stats should be expired
+ local left=$((interval_new - (SECONDS - start)))
+ [ $left -ge 0 ] && echo "sleep $left for expiry" && sleep $((left + 1))
+ cmd="mkdir $DIR/$tdir.expire"
+ verify_jobstats "$cmd" "$SINGLEMDS"
+ [ $(do_facet $SINGLEMDS lctl get_param *.*.job_stats |
+ grep -c "job_id.*mkdir") -gt 1 ] && error "old jobstats not expired"
# Ensure that jobid are present in changelog (if supported by MDS)
if [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.6.52) ]
error "Unexpected jobids when jobid_var=$JOBENV"
fi
- # cleanup
- rm -f $DIR/jobstats_test_rename
-
- [ $OLD_JOBENV != $JOBENV ] && jobstats_set $OLD_JOBENV
+ cleanup_205
}
run_test 205 "Verify job stats"
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
local pages_per_rpc=$($LCTL get_param \
osc.*.max_pages_per_rpc)
- local at_max=$(do_facet mgs "$LCTL get_param -n at_max")
- local timeout=$(do_facet mgs "$LCTL get_param -n timeout")
+ local at_max=$($LCTL get_param -n at_max)
+ local timeout=$($LCTL get_param -n timeout)
+ local test_at="$LCTL get_param -n at_max"
+ local param_at="$FSNAME.sys.at_max"
+ local test_timeout="$LCTL get_param -n timeout"
+ local param_timeout="$FSNAME.sys.timeout"
$LCTL set_param -n osc.*.max_pages_per_rpc=1024
- do_facet mgs "$LCTL conf_param $FSNAME.sys.at_max=0"
- do_facet mgs "$LCTL conf_param $FSNAME.sys.timeout=5"
+
+ set_conf_param_and_check client "$test_at" "$param_at" 0 ||
+ error "conf_param at_max=0 failed"
+ set_conf_param_and_check client "$test_timeout" "$param_timeout" 5 ||
+ error "conf_param timeout=5 failed"
#define OBD_FAIL_PTLRPC_CLIENT_BULK_CB3 0x520
$LCTL set_param fail_loc=0x520
sync
$LCTL set_param fail_loc=0
- do_facet mgs "$LCTL conf_param $FSNAME.sys.at_max=" \
- "$at_max"
- do_facet mgs "$LCTL conf_param $FSNAME.sys.timeout=" \
- "$timeout"
+ set_conf_param_and_check client "$test_at" "$param_at" $at_max ||
+ error "conf_param at_max=$at_max failed"
+ set_conf_param_and_check client "$test_timeout" "$param_timeout" \
+ $timeout || error "conf_param timeout=$timeout failed"
+
$LCTL set_param -n $pages_per_rpc
}
run_test 224c "Don't hang if one of md lost during large bulk RPC"
test_229() { # LU-2482, LU-3448
[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.53) ] &&
- skip "No HSM support on MDS of $(get_lustre_version)," \
- "need 2.4.53 at least" && return
+ skip "No HSM $(lustre_build_version $SINGLEMDS) MDS < 2.4.53" &&
+ return
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
[ $OSTCOUNT -lt 2 ] && skip "needs >= 2 OSTs" && return
ln -s $migrate_dir/$tfile $migrate_dir/${tfile}_ln
ln -s $other_dir/$tfile $migrate_dir/${tfile}_ln_other
- $LFS mv -v -M $MDTIDX $migrate_dir ||
+ $LFS migrate -m $MDTIDX $migrate_dir ||
error "migrate remote dir error"
echo "migratate to MDT1, then checking.."
#migrate back to MDT0
MDTIDX=0
- $LFS mv -v -M $MDTIDX $migrate_dir ||
+ $LFS migrate -m $MDTIDX $migrate_dir ||
error "migrate remote dir error"
echo "migrate back to MDT0, checking.."
do_facet mds1 lctl set_param fail_loc=0x20001801
do_facet mds1 lctl set_param fail_val=5
local t=$(ls $migrate_dir | wc -l)
- $LFS mv --mdt-index $MDTIDX $migrate_dir &&
+ $LFS migrate --mdt-index $MDTIDX $migrate_dir &&
error "migrate should fail after 5 entries"
local u=$(ls $migrate_dir | wc -l)
[ "$u" == "$t" ] || error "$u != $t during migration"
do_facet mds1 lctl set_param fail_loc=0
do_facet mds1 lctl set_param fail_val=0
- $LFS mv -M $MDTIDX $migrate_dir ||
+ $LFS migrate -m $MDTIDX $migrate_dir ||
error "migrate open files should failed with open files"
echo "Finish migration, then checking.."
error "create files under remote dir failed $i"
done
- $LFS mv -M $MDTIDX -v $migrate_dir || error "migrate remote dir error"
+ $LFS migrate -m $MDTIDX $migrate_dir ||
+ error "migrate remote dir error"
echo "Finish migration, then checking.."
for file in $(find $migrate_dir); do
}
run_test 250 "Write above 16T limit"
+test_251() {
+ $SETSTRIPE -c -1 -S 1048576 $DIR/$tfile
+
+ #define OBD_FAIL_LLITE_LOST_LAYOUT 0x1407
+ #Skip once - writing the first stripe will succeed
+ $LCTL set_param fail_loc=0xa0001407 fail_val=1
+ $MULTIOP $DIR/$tfile o:O_RDWR:w2097152c 2>&1 | grep -q "short write" &&
+ error "short write happened"
+
+ $LCTL set_param fail_loc=0xa0001407 fail_val=1
+ $MULTIOP $DIR/$tfile or2097152c 2>&1 | grep -q "short read" &&
+ error "short read happened"
+
+ rm -f $DIR/$tfile
+}
+run_test 251 "Handling short read and write correctly"
+
cleanup_test_300() {
trap 0
umask $SAVE_UMASK
local mode=$(stat -c%a $DIR/$tdir/striped_dir)
[ "$mode" = "755" ] || error "expect 755 got $mode"
+ $LFS getdirstripe $DIR/$tdir/striped_dir > /dev/null 2>&1 ||
+ error "getdirstripe failed"
stripe_count=$($LFS getdirstripe -c $DIR/$tdir/striped_dir)
if [ "$stripe_count" != "2" ]; then
error "stripe_count is $stripe_count, expect 2"
$LFS setdirstripe -i 0 -c 2 -t all_char $DIR/$tdir/striped_dir/stp_c ||
error "set striped dir under striped dir error"
- mrename $DIR/$tdir/striped_dir/a $DIR/$tdir/striped_dir/b &&
- error "rename file under striped dir should fail"
-
- mrename $DIR/$tdir/striped_dir/dir_a $DIR/$tdir/striped_dir/dir_b &&
- error "rename dir under striped dir should fail"
+ mrename $DIR/$tdir/striped_dir/dir_a $DIR/$tdir/striped_dir/dir_b ||
+ error "rename dir under striped dir fails"
- mrename $DIR/$tdir/striped_dir/stp_a $DIR/$tdir/striped_dir/stp_b &&
- error "rename dir under different stripes should fail"
+ mrename $DIR/$tdir/striped_dir/stp_a $DIR/$tdir/striped_dir/stp_b ||
+ error "rename dir under different stripes fails"
mrename $DIR/$tdir/striped_dir/a $DIR/$tdir/striped_dir/c ||
error "rename file under striped dir should succeed"
- mrename $DIR/$tdir/striped_dir/dir_a $DIR/$tdir/striped_dir/dir_c ||
+ mrename $DIR/$tdir/striped_dir/dir_b $DIR/$tdir/striped_dir/dir_c ||
error "rename dir under striped dir should succeed"
rm -rf $DIR/$tdir
$LFS setdirstripe -i 0 -c 2 $DIR/$tdir/striped_dir/stp_b ||
error "create striped dir under striped dir fails"
- mrename $DIR/$tdir/striped_dir/a $DIR/$tdir/striped_dir1/b &&
- error "rename file under different striped dir should fail"
-
- mrename $DIR/$tdir/striped_dir/dir_a $DIR/$tdir/striped_dir1/dir_b &&
+ mrename $DIR/$tdir/striped_dir/dir_a $DIR/$tdir/striped_dir1/dir_b ||
error "rename dir under different striped dir should fail"
- mrename $DIR/$tdir/striped_dir/stp_a $DIR/$tdir/striped_dir1/stp_b &&
+ mrename $DIR/$tdir/striped_dir/stp_a $DIR/$tdir/striped_dir1/stp_b ||
error "rename striped dir under diff striped dir should fail"
mrename $DIR/$tdir/striped_dir/a $DIR/$tdir/striped_dir1/a ||
error "rename file under diff striped dirs fails"
- mrename $DIR/$tdir/striped_dir/dir_a $DIR/$tdir/striped_dir1/dir_a ||
- error "rename dir under diff striped dirs fails"
-
rm -rf $DIR/$tdir
}
run_test 300f "check rename cross striped directory"
}
run_test 300i "client handle unknown hash type striped directory"
+test_300j() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+ skip "Need MDS version at least 2.7.55" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local stripe_count
+ local file
+
+ mkdir $DIR/$tdir
+
+ #define OBD_FAIL_SPLIT_UPDATE_REC 0x1702
+ $LCTL set_param fail_loc=0x1702
+ $LFS setdirstripe -i 0 -c$MDSCOUNT -t all_char $DIR/$tdir/striped_dir ||
+ error "set striped dir error"
+
+ createmany -o $DIR/$tdir/striped_dir/f- 10 ||
+ error "create files under striped dir failed"
+
+ $LCTL set_param fail_loc=0
+
+ rm -rf $DIR/$tdir || error "unlink striped dir fails"
+
+ return 0
+}
+run_test 300j "test large update record"
+
+test_300k() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.7.55) ] &&
+ skip "Need MDS version at least 2.7.55" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local stripe_count
+ local file
+
+ mkdir $DIR/$tdir
+
+ #define OBD_FAIL_LARGE_STRIPE 0x1703
+ $LCTL set_param fail_loc=0x1703
+ $LFS setdirstripe -i 0 -c512 $DIR/$tdir/striped_dir ||
+ error "set striped dir error"
+ $LCTL set_param fail_loc=0
+
+ $LFS getdirstripe $DIR/$tdir/striped_dir ||
+ error "getstripeddir fails"
+ rm -rf $DIR/$tdir/striped_dir ||
+ error "unlink striped dir fails"
+
+ return 0
+}
+run_test 300k "test large striped directory"
+
+test_300l() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local stripe_index
+
+ test_mkdir -p $DIR/$tdir/striped_dir
+ chown $RUNAS_ID $DIR/$tdir/striped_dir ||
+ error "chown $RUNAS_ID failed"
+ $LFS setdirstripe -i 1 -D $DIR/$tdir/striped_dir ||
+ error "set default striped dir failed"
+
+ #define OBD_FAIL_MDS_STALE_DIR_LAYOUT 0x158
+ $LCTL set_param fail_loc=0x80000158
+ $RUNAS mkdir $DIR/$tdir/striped_dir/test_dir || error "create dir fails"
+
+ stripe_index=$($LFS getdirstripe -i $DIR/$tdir/striped_dir/test_dir)
+ [ $stripe_index -eq 1 ] ||
+ error "expect 1 get $stripe_index for $dir"
+}
+run_test 300l "non-root user to create dir under striped dir with stale layout"
+
+prepare_remote_file() {
+ mkdir $DIR/$tdir/src_dir ||
+ error "create remote source failed"
+
+ cp /etc/hosts $DIR/$tdir/src_dir/a || error
+ touch $DIR/$tdir/src_dir/a
+
+ $LFS mkdir -i 1 $DIR/$tdir/tgt_dir ||
+ error "create remote target dir failed"
+
+ touch $DIR/$tdir/tgt_dir/b
+
+ mrename $DIR/$tdir/src_dir/a $DIR/$tdir/tgt_dir/b ||
+ error "rename dir cross MDT failed!"
+
+ $CHECKSTAT -t file $DIR/$tdir/src_dir/a &&
+ error "src_child still exists after rename"
+
+ $CHECKSTAT -t file $DIR/$tdir/tgt_dir/b ||
+ error "missing file(a) after rename"
+
+ diff /etc/hosts $DIR/$tdir/tgt_dir/b ||
+ error "diff after rename"
+}
+
+test_310a() {
+ [[ $MDSCOUNT -lt 2 ]] && skip "needs >= 4 MDTs" && return
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ local remote_file=$DIR/$tdir/tgt_dir/b
+
+ mkdir -p $DIR/$tdir
+
+ prepare_remote_file || error "prepare remote file failed"
+
+ #open-unlink file
+ $OPENUNLINK $remote_file $remote_file || error
+ $CHECKSTAT -a $remote_file || error
+}
+run_test 310a "open unlink remote file"
+
+test_310b() {
+ [[ $MDSCOUNT -lt 2 ]] && skip "needs >= 4 MDTs" && return
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ local remote_file=$DIR/$tdir/tgt_dir/b
+
+ mkdir -p $DIR/$tdir
+
+ prepare_remote_file || error "prepare remote file failed"
+
+ ln $remote_file $DIR/$tfile || error "link failed for remote file"
+ $MULTIOP $DIR/$tfile Ouc || error "mulitop failed"
+ $CHECKSTAT -t file $remote_file || error "check file failed"
+}
+run_test 310b "unlink remote file with multiple links while open"
+
+test_310c() {
+ [[ $MDSCOUNT -lt 4 ]] && skip "needs >= 4 MDTs" && return
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ local remote_file=$DIR/$tdir/tgt_dir/b
+
+ mkdir -p $DIR/$tdir
+
+ prepare_remote_file || error "prepare remote file failed"
+
+ ln $remote_file $DIR/$tfile || error "link failed for remote file"
+ multiop_bg_pause $remote_file O_uc ||
+ error "mulitop failed for remote file"
+ MULTIPID=$!
+ $MULTIOP $DIR/$tfile Ouc
+ kill -USR1 $MULTIPID
+ wait $MULTIPID
+}
+run_test 310c "open-unlink remote file with multiple links"
+
test_400a() { # LU-1606, was conf-sanity test_74
local extra_flags=''
local out=$TMP/$tfile