MEMHOG=${MEMHOG:-memhog}
DIRECTIO=${DIRECTIO:-directio}
ACCEPTOR_PORT=${ACCEPTOR_PORT:-988}
-UMOUNT=${UMOUNT:-"umount -d"}
STRIPES_PER_OBJ=-1
CHECK_GRANT=${CHECK_GRANT:-"yes"}
GRANT_CHECK_LIST=${GRANT_CHECK_LIST:-""}
test_17m() {
local short_sym="0123456789"
local WDIR=$DIR/${tdir}m
- local mds_index
- local devname
- local cmd
local i
- local rc=0
remote_mds_nodsh && skip "remote MDS with nodsh" && return
[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.0) ] &&
echo "recreate the 512 symlink files with a shorter string"
for ((i = 0; i < 512; ++i)); do
# rewrite the symlink file with a shorter string
- ln -sf ${long_sym} $WDIR/long-$i
- ln -sf ${short_sym} $WDIR/short-$i
+ ln -sf ${long_sym} $WDIR/long-$i || error "long_sym failed"
+ ln -sf ${short_sym} $WDIR/short-$i || error "short_sym failed"
done
- mds_index=$($LFS getstripe -M $WDIR)
- mds_index=$((mds_index+1))
- devname=$(mdsdevname $mds_index)
- cmd="$E2FSCK -fnvd $devname"
+ local mds_index=$(($($LFS getstripe -M $WDIR) + 1))
+ local devname=$(mdsdevname $mds_index)
- echo "stop and checking mds${mds_index}: $cmd"
+ echo "stop and checking mds${mds_index}:"
# e2fsck should not return error
stop mds${mds_index}
- do_facet mds${mds_index} $cmd || rc=$?
+ run_e2fsck $(facet_active_host mds${mds_index}) $devname -n
+ rc=$?
start mds${mds_index} $devname $MDS_MOUNT_OPTS || error "start failed"
df $MOUNT > /dev/null 2>&1
- [ $rc -ne 0 ] && error "e2fsck should not report error upon "\
- "short/long symlink MDT: rc=$rc"
- return $rc
+ [ $rc -eq 0 ] ||
+ error "e2fsck detected error for short/long symlink: rc=$rc"
}
run_test 17m "run e2fsck against MDT which contains short/long symlink"
check_fs_consistency_17n() {
local mdt_index
- local devname
- local cmd
local rc=0
# create/unlink in 17n only change 2 MDTs(MDT1/MDT2),
# so it only check MDT1/MDT2 instead of all of MDTs.
- for mdt_index in $(seq 1 2); do
- devname=$(mdsdevname $mdt_index)
- cmd="$E2FSCK -fnvd $devname"
-
- echo "stop and checking mds${mdt_index}: $cmd"
+ for mdt_index in 1 2; do
+ local devname=$(mdsdevname $mdt_index)
# e2fsck should not return error
stop mds${mdt_index}
- do_facet mds${mdt_index} $cmd || rc=$?
+ run_e2fsck $(facet_active_host mds$mdt_index) $devname -n ||
+ rc=$((rc + $?))
start mds${mdt_index} $devname $MDS_MOUNT_OPTS ||
- error "mount mds${mdt_index} failed"
+ error "mount mds$mdt_index failed"
df $MOUNT > /dev/null 2>&1
- [ $rc -ne 0 ] && break
done
return $rc
}
$(facet_mntpt ost$ost)/$obj_file)
unmount_fstype ost$ost
start ost$ost $dev $OST_MOUNT_OPTS
+ clients_up
fi
[ -z "$ff" ] && error "$obj_file: no filter_fid info"
cleanup_test32_mount() {
trap 0
- $UMOUNT -d $DIR/$tdir/ext2-mountpoint
+ $UMOUNT $DIR/$tdir/ext2-mountpoint
}
test_32a() {
cleanup_testdir_mount() {
trap 0
- $UMOUNT -d $DIR/$tdir
+ $UMOUNT $DIR/$tdir
}
test_32q() {
loopdev="$DIR/loop54c"
trap 0
- $UMOUNT -d $DIR/$tdir || rc=$?
+ $UMOUNT $DIR/$tdir || rc=$?
losetup -d $loopdev || true
losetup -d $LOOPDEV || true
rm -rf $loopdev $DIR/$tfile $DIR/$tdir
}
run_test 60d "test printk console message masking"
+test_60e() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ touch $DIR/$tfile
+#define OBD_FAIL_MDS_LLOG_CREATE_FAILED2 0x15b
+ do_facet mds1 lctl set_param fail_loc=0x15b
+ rm $DIR/$tfile
+}
+run_test 60e "no space while new llog is being created"
+
test_61() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
f="$DIR/f61"
run_test 68b "support swapping to Lustre ========================"
# bug5265, obdfilter oa2dentry return -ENOENT
-# #define OBD_FAIL_OST_ENOENT 0x217
+# #define OBD_FAIL_SRV_ENOENT 0x217
test_69() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
remote_ost_nodsh && skip "remote OST with nodsh" && return
reset_async
- #define OBD_FAIL_OST_ENOENT 0x217
+ #define OBD_FAIL_SRV_ENOENT 0x217
set_nodes_failloc "$(osts_nodes)" 0x217
$MULTIOP $DIR/$tfile oO_CREAT:O_RDWR:O_SYNC:w4096c
RC=$?
do_facet $facet "test -e $LDPROC/$canondev/max_dir_size" ||
LDPROC=/sys/fs/ldiskfs
do_facet $facet "echo $1 >$LDPROC/$canondev/max_dir_size"
+ do_facet $facet "test -e $LDPROC/$canondev/warning_dir_size" ||
+ LDPROC=/sys/fs/ldiskfs
+ do_facet $facet "echo $2 >$LDPROC/$canondev/warning_dir_size"
+ done
+}
+
+check_mds_dmesg() {
+ local facets=$(get_facets MDS)
+ for facet in ${facets//,/ }; do
+ do_facet $facet "dmesg | tail -3 | grep -q $1" && return 0
done
+ return 1
}
test_129() {
remote_mds_nodsh && skip "remote MDS with nodsh" && return
ENOSPC=28
EFBIG=27
+ has_warning=0
rm -rf $DIR/$tdir
test_mkdir -p $DIR/$tdir
# block size of mds1
local MDT_DEV=$(mdsdevname ${SINGLEMDS//mds/})
local MDSBLOCKSIZE=$($LCTL get_param -n mdc.*MDT0000*.blocksize)
- local MAX=$((MDSBLOCKSIZE * 3))
- set_dir_limits $MAX
+ local MAX=$((MDSBLOCKSIZE * 5))
+ set_dir_limits $MAX $MAX
local I=$(stat -c%s "$DIR/$tdir")
local J=0
local STRIPE_COUNT=1
while [[ $I -le $MAX ]]; do
$MULTIOP $DIR/$tdir/$J Oc
rc=$?
+ if [ $has_warning -eq 0 ]; then
+ check_mds_dmesg '"is approaching"' &&
+ has_warning=1
+ fi
#check two errors ENOSPC for new version of ext4 max_dir_size patch
#mainline kernel commit df981d03eeff7971ac7e6ff37000bfa702327ef1
#and EFBIG for previous versions
if [ $rc -eq $EFBIG -o $rc -eq $ENOSPC ]; then
- set_dir_limits 0
+ set_dir_limits 0 0
echo "return code $rc received as expected"
multiop $DIR/$tdir/$J Oc ||
error_exit "multiop failed w/o dir size limit"
+ check_mds_dmesg '"has reached"' ||
+ error_exit "has reached message should be output"
+
+ [ $has_warning ] ||
+ error_exit "warning message should be output"
+
I=$(stat -c%s "$DIR/$tdir")
if [ $(lustre_version_code $SINGLEMDS) -lt \
fi
error_exit "current dir size $I, previous limit $MAX"
elif [ $rc -ne 0 ]; then
- set_dir_limits 0
+ set_dir_limits 0 0
error_exit "return code $rc received instead of expected " \
"$EFBIG or $ENOSPC, files in dir $I"
fi
I=$(stat -c%s "$DIR/$tdir")
done
- set_dir_limits 0
+ set_dir_limits 0 0
error "exceeded dir size limit $MAX($MDSCOUNT) : $I bytes"
}
run_test 129 "test directory size limit ========================"
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)))
+ local left=$((interval_new + 2 - (SECONDS - start)))
[ $left -ge 0 ] && echo "sleep $left for expiry" && sleep $((left + 1))
cmd="mkdir $DIR/$tdir.expire"
verify_jobstats "$cmd" "$SINGLEMDS"
mkdir $DIR/$tdir/other_dir
touch $DIR/$tdir/migrate_dir/a
ln $DIR/$tdir/migrate_dir/a $DIR/$tdir/other_dir/b
+ ls $DIR/$tdir/other_dir
$LFS migrate -m 1 $DIR/$tdir/migrate_dir ||
error "migrate dir fails"
rm -rf $DIR/$tdir || error "rm dir failed after migration"
}
-run_test 230e "migrate mulitple link files"
+run_test 230e "migrate mulitple local link files"
+
+test_230f() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ local a_fid
+ local ln_fid
+
+ mkdir -p $DIR/$tdir
+ mkdir $DIR/$tdir/migrate_dir
+ $LFS mkdir -i1 $DIR/$tdir/other_dir
+ touch $DIR/$tdir/migrate_dir/a
+ ln $DIR/$tdir/migrate_dir/a $DIR/$tdir/other_dir/ln1
+ ln $DIR/$tdir/migrate_dir/a $DIR/$tdir/other_dir/ln2
+ ls $DIR/$tdir/other_dir
+
+ # a should be migrated to MDT1, since no other links on MDT0
+ $LFS migrate -m 1 $DIR/$tdir/migrate_dir ||
+ error "migrate dir fails"
+ mdt_index=$($LFS getstripe -M $DIR/$tdir/migrate_dir)
+ [ $mdt_index == 1 ] || error "migrate_dir is not on MDT1"
+ mdt_index=$($LFS getstripe -M $DIR/$tdir/migrate_dir/a)
+ [ $mdt_index == 1 ] || error "a is not on MDT1"
+
+ # a should stay on MDT1, because it is a mulitple link file
+ $LFS migrate -m 0 $DIR/$tdir/migrate_dir ||
+ error "migrate dir fails"
+ mdt_index=$($LFS getstripe -M $DIR/$tdir/migrate_dir/a)
+ [ $mdt_index == 1 ] || error "a is not on MDT1"
+
+ $LFS migrate -m 1 $DIR/$tdir/migrate_dir ||
+ error "migrate dir fails"
+
+ a_fid=$($LFS path2fid $DIR/$tdir/migrate_dir/a)
+ ln_fid=$($LFS path2fid $DIR/$tdir/other_dir/ln1)
+ [ "$a_fid" = "$ln_fid" ] || error "different fid after migrate to MDT1"
+
+ rm -rf $DIR/$tdir/other_dir/ln1 || error "unlink ln1 fails"
+ rm -rf $DIR/$tdir/other_dir/ln2 || error "unlink ln2 fails"
+
+ # a should be migrated to MDT0, since no other links on MDT1
+ $LFS migrate -m 0 $DIR/$tdir/migrate_dir ||
+ error "migrate dir fails"
+ mdt_index=$($LFS getstripe -M $DIR/$tdir/migrate_dir/a)
+ [ $mdt_index == 0 ] || error "a is not on MDT0"
+
+ rm -rf $DIR/$tdir || error "rm dir failed after migration"
+}
+run_test 230f "migrate mulitple remote link files"
+
+test_230g() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+
+ mkdir -p $DIR/$tdir/migrate_dir
+
+ $LFS migrate -m 1000 $DIR/$tdir/migrate_dir &&
+ error "migrating dir to non-exist MDT succeeds"
+ true
+}
+run_test 230g "migrate dir to non-exist MDT"
test_231a()
{
}
run_test 245 "check mdc connection flag/data: multiple modify RPCs"
+test_246() { # LU-7371
+ [ $(lustre_version_code ost1) -lt $(version_code 2.7.62) ] &&
+ skip "Need OST version >= 2.7.62" && return 0
+ do_facet ost1 $LCTL set_param fail_val=4095
+#define OBD_FAIL_OST_READ_SIZE 0x234
+ do_facet ost1 $LCTL set_param fail_loc=0x234
+ $LFS setstripe $DIR/$tfile -i 0 -c 1
+ dd if=/dev/zero of=$DIR/$tfile bs=4095 count=1 > /dev/null 2>&1
+ cancel_lru_locks $FSNAME-OST0000
+ dd if=$DIR/$tfile of=/dev/null bs=1048576 || error "Read failed"
+}
+run_test 246 "Read file of size 4095 should return right length"
+
test_250() {
[ "$(facet_fstype ost$(($($GETSTRIPE -i $DIR/$tfile) + 1)))" = "zfs" ] \
&& skip "no 16TB file size limit on ZFS" && return
}
run_test 300o "unlink big sub stripe(> 65000 subdirs)"
+test_300p() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+
+ mkdir -p $DIR/$tdir
+
+ #define OBD_FAIL_OUT_ENOSPC 0x1704
+ do_facet mds2 lctl set_param fail_loc=0x80001704
+ $LFS setdirstripe -c2 $DIR/$tdir/bad_striped_dir > /dev/null 2>&1 &&
+ error "create striped directory should fail"
+
+ [ -e $DIR/$tdir/bad_striped_dir ] && error "striped dir exists"
+ true
+}
+run_test 300p "create striped directory without space"
+
prepare_remote_file() {
mkdir $DIR/$tdir/src_dir ||
error "create remote source failed"
}
run_test 400b "packaged headers can be compiled"
+test_401() { #LU-7437
+ local params
+ local procs
+
+ #count the number of parameters by "list_param -R"
+ params=$($LCTL list_param -R '*' 2>/dev/null | wc -l)
+ #count the number of parameters by listing proc files
+ ls -lRL /proc/{fs,sys}/{lnet,lustre} 2>/dev/null |
+ grep -v "^t" | grep -v "^d" > $TMP/$tfile
+ #Since there is no /proc/fs/lnet, we need to remove other
+ #3 directories, /proc/{fs,sys}/lustre and /proc/sys/lnet.
+ procs=$(($(sed /^$/d $TMP/$tfile | wc -l)-3))
+
+ [ $params -eq $procs ] ||
+ error "found $params parameters vs. $procs proc files"
+
+ rm -f $TMP/$tfile
+}
+run_test 401 "Verify if 'lctl list_param -R' can list parameters recursively"
+
#
# tests that do cleanup/setup should be run at the end
#