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"
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"
}
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
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"
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 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"
+
prepare_remote_file() {
mkdir $DIR/$tdir/src_dir ||
error "create remote source failed"