export PARALLEL=${PARALLEL:-"no"}
TRACE=${TRACE:-""}
-LUSTRE_TESTS_API_DIR=${LUSTRE_TESTS_API_DIR:-${LUSTRE}/tests/clientapi}
LUSTRE=${LUSTRE:-$(dirname $0)/..}
+LUSTRE_TESTS_API_DIR=${LUSTRE_TESTS_API_DIR:-${LUSTRE}/tests/clientapi}
. $LUSTRE/tests/test-framework.sh
init_test_env $@
}
run_test 33g "nonroot user create already existing root created file"
+test_33h() {
+ [ $MDSCOUNT -lt 2 ] && skip_env "needs >= 2 MDTs"
+ [ $MDS1_VERSION -lt $(version_code 2.13.50) ] &&
+ skip "Need MDS version at least 2.13.50"
+
+ test_mkdir -c $MDSCOUNT -H crush $DIR/$tdir ||
+ error "mkdir $tdir failed"
+ touch $DIR/$tdir/$tfile || error "touch $tfile failed"
+
+ local index=$($LFS getstripe -m $DIR/$tdir/$tfile)
+ local index2
+
+ for fname in $DIR/$tdir/$tfile.bak \
+ $DIR/$tdir/$tfile.SAV \
+ $DIR/$tdir/$tfile.orig \
+ $DIR/$tdir/$tfile~; do
+ touch $fname || error "touch $fname failed"
+ index2=$($LFS getstripe -m $fname)
+ [ $index -eq $index2 ] ||
+ error "$fname MDT index mismatch $index != $index2"
+ done
+
+ local failed=0
+ for i in {1..50}; do
+ for fname in $(mktemp -u $DIR/$tdir/.$tfile.XXXXXX) \
+ $(mktemp $DIR/$tdir/$tfile.XXXXXXXX); do
+ touch $fname || error "touch $fname failed"
+ index2=$($LFS getstripe -m $fname)
+ if [[ $index != $index2 ]]; then
+ failed=$((failed + 1))
+ echo "$fname MDT index mismatch $index != $index2"
+ fi
+ done
+ done
+ echo "$failed MDT index mismatches"
+ (( failed < 4 )) || error "MDT index mismatch $failed times"
+
+}
+run_test 33h "temp file is located on the same MDT as target"
+
TEST_34_SIZE=${TEST_34_SIZE:-2000000000000}
test_34a() {
rm -f $DIR/f34
test_64a () {
[ $PARALLEL == "yes" ] && skip "skip parallel run"
- df $DIR
- lctl get_param -n osc.*[oO][sS][cC][_-]*.cur* | grep "[0-9]"
+ lfs df $DIR
+ lctl get_param osc.*[oO][sS][cC][_-]*.cur* | grep "=[1-9]"
}
run_test 64a "verify filter grant calculations (in kernel) ====="
local i
# generate some changelog records to accumulate on each MDT
- test_mkdir -c $MDSCOUNT $DIR/$tdir || error "test_mkdir $tdir failed"
+ # use fnv1a because created files should be evenly distributed
+ test_mkdir -c $MDSCOUNT -H fnv_1a_64 $DIR/$tdir ||
+ error "test_mkdir $tdir failed"
log "$(date +%s): creating first files"
createmany -m $DIR/$tdir/$tfile $((MDSCOUNT * 2)) ||
error "create $DIR/$tdir/$tfile failed"
local i
# generate some changelog records to accumulate on each MDT
- test_mkdir -c $MDSCOUNT $DIR/$tdir || error "mkdir $tdir failed"
+ # use fnv1a because created files should be evenly distributed
+ test_mkdir -c $MDSCOUNT -H fnv_1a_64 $DIR/$tdir ||
+ error "mkdir $tdir failed"
createmany -m $DIR/$tdir/$tfile $((MDSCOUNT * 2)) ||
error "create $DIR/$tdir/$tfile failed"
local i
# generate some changelog records to accumulate on each MDT
- test_mkdir -c $MDSCOUNT $DIR/$tdir || error "test_mkdir $tdir failed"
+ # use fnv1a because created files should be evenly distributed
+ test_mkdir -c $MDSCOUNT -H fnv_1a_64 $DIR/$tdir ||
+ error "test_mkdir $tdir failed"
createmany -m $DIR/$tdir/$tfile $((MDSCOUNT * 2)) ||
error "create $DIR/$tdir/$tfile failed"
changelog_register || error "first changelog_register failed"
# generate some changelog records to accumulate on each MDT
- test_mkdir -c $MDSCOUNT $DIR/$tdir || error "mkdir $tdir failed"
+ # use fnv1a because created files should be evenly distributed
+ test_mkdir -c $MDSCOUNT -H fnv_1a_64 $DIR/$tdir ||
+ error "mkdir $tdir failed"
createmany -m $DIR/$tdir/$tfile $((MDSCOUNT * 2)) ||
error "create $DIR/$tdir/$tfile failed"
stack_trap "changelog_deregister" EXIT
# generate some changelog
- test_mkdir -c $MDSCOUNT $DIR/$tdir || error "mkdir $tdir failed"
+ # use fnv1a because created files should be evenly distributed
+ test_mkdir -c $MDSCOUNT -H fnv_1a_64 $DIR/$tdir ||
+ error "mkdir $tdir failed"
createmany -m $DIR/$tdir/${tfile}bis $((MDSCOUNT * 2)) ||
error "create $DIR/$tdir/${tfile}bis failed"
error "User $cl_user not found in changelog_users"
printf 'clear:'$cl_user':0' >&3
-
}
run_test 160j "client can be umounted while its chanangelog is being used"
ln -s $migrate_dir/$tfile $migrate_dir/${tfile}_ln
ln -s $other_dir/$tfile $migrate_dir/${tfile}_ln_other
+ local len
+ local lnktgt
+
+ # inline symlink
+ for len in 58 59 60; do
+ lnktgt=$(str_repeat 'l' $len)
+ touch $migrate_dir/$lnktgt
+ ln -s $lnktgt $migrate_dir/${len}char_ln
+ done
+
+ # PATH_MAX
+ for len in 4094 4095; do
+ lnktgt=$(str_repeat 'l' $len)
+ ln -s $lnktgt $migrate_dir/${len}char_ln
+ done
+
+ # NAME_MAX
+ for len in 254 255; do
+ touch $migrate_dir/$(str_repeat 'l' $len)
+ done
+
$LFS migrate -m $MDTIDX $migrate_dir ||
error "fails on migrating remote dir to MDT1"
for ((i = 0; i < 10; i++)); do
for file in $(find $migrate_dir/dir_${i}); do
mdt_index=$($LFS getstripe -m $file)
- [ $mdt_index == $MDTIDX ] ||
+ # broken symlink getstripe will fail
+ [ $mdt_index -ne $MDTIDX ] && stat -L $file &&
error "$file is not on MDT${MDTIDX}"
done
done
echo "migrate back to MDT0, checking.."
for file in $(find $migrate_dir); do
mdt_index=$($LFS getstripe -m $file)
- [ $mdt_index == $MDTIDX ] ||
+ [ $mdt_index -ne $MDTIDX ] && stat -L $file &&
error "$file is not on MDT${MDTIDX}"
done
chown nobody $DIR/$tdir/d
touch $DIR/$tdir/d/file
- $LFS mv -M1 $DIR/$tdir/d || error "lfs mv failed"
+ $LFS mv -m1 $DIR/$tdir/d || error "lfs mv failed"
}
run_test 316 "lfs mv"
llite.*.max_read_ahead_async_active 2>/dev/null)
[ $max_active -ne 256 ] && error "expected 256 but got $max_active"
- # currently reset to 0 is unsupported, leave it 512 for now.
- $LCTL set_param llite.*.max_read_ahead_async_active=0 &&
- error "set max_read_ahead_async_active should fail"
+ $LCTL set_param llite.*.max_read_ahead_async_active=0 ||
+ error "set max_read_ahead_async_active should succeed"
$LCTL set_param llite.*.max_read_ahead_async_active=512
max_active=$($LCTL get_param -n \
local prefix=/usr/include/lustre
local prog
+ # Oleg removes c files in his test rig so test if any c files exist
+ [ -z "$(ls -A $LUSTRE_TESTS_API_DIR)" ] && \
+ skip_env "Needed c test files are missing"
+
if ! [[ -d $prefix ]]; then
# Assume we're running in tree and fixup the include path.
extra_flags+=" -I$LUSTRE/../lnet/include/uapi -I$LUSTRE/include/uapi -I$LUSTRE/include"
fi
for prog in $LUSTRE_TESTS_API_DIR/*.c; do
- $CC -Wall -Werror $extra_flags -o $out $prog -llustreapi ||
+ $CC -Wall -Werror -std=c99 $extra_flags -o $out $prog -llustreapi ||
error "client api broken"
done
rm -f $out
continue # lustre_ioctl.h is internal header
fi
- $CC -Wall -Werror -include $header -c -x c /dev/null -o $out ||
+ $CC -Wall -Werror -std=c99 -include $header -c -x c /dev/null -o $out ||
error "cannot compile '$header'"
done
rm -f $out