[ "$SLOW" = "no" ] && EXCEPT_SLOW="24o 27m 64b 68 71 77f 78 115 124b"
[ $(facet_fstype $SINGLEMDS) = "zfs" ] &&
-# bug number for skipped test: LU-2834 LU-1593 LU-2610 LU-2833 LU-1957 LU-2805
- ALWAYS_EXCEPT="$ALWAYS_EXCEPT 18 34h 40 48a 180 184c"
+# bug number for skipped test: LU-1593 LU-2610 LU-2833 LU-1957 LU-2805
+ ALWAYS_EXCEPT="$ALWAYS_EXCEPT 34h 40 48a 180 184c"
FAIL_ON_ERROR=false
return 1
}
+check_swap_layouts_support()
+{
+ $LCTL get_param -n llite.*.sbi_flags | grep -q layout ||
+ { skip "Does not support layout lock."; return 0; }
+ return 1
+}
+
if [ "$ONLY" == "cleanup" ]; then
sh llmountcleanup.sh
exit 0
# Long symlinks and LU-2241
test_17g() {
- test_mkdir -p $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
local TESTS="59 60 61 4094 4095"
+ # Fix for inode size boundary in 2.1.4
+ [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.1.4) ] &&
+ TESTS="4094 4095"
+
+ # Patch not applied to 2.2 or 2.3 branches
+ [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.2.0) ] &&
+ [ $(lustre_version_code $SINGLEMDS) -le $(version_code 2.3.55) ] &&
+ TESTS="4094 4095"
+
for i in $TESTS; do
local SYMNAME=$(str_repeat 'x' $i)
ln -s $SYMNAME $DIR/$tdir/f$i || error "failed $i-char symlink"
rsync --help | grep -q xattr ||
skip_env "$(rsync --version| head -1) does not support xattrs"
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
- test_mkdir -p $DIR/$tdir
+ test_mkdir -p $DIR/$tdir
test_mkdir -p $DIR/$tdir.new
- touch $DIR/$tdir/$tfile
- ln -s $DIR/$tdir/$tfile $DIR/$tdir/$tfile.lnk
- rsync -av -X $DIR/$tdir/ $DIR/$tdir.new ||
- error "rsync failed with xattrs enabled"
+ touch $DIR/$tdir/$tfile
+ ln -s $DIR/$tdir/$tfile $DIR/$tdir/$tfile.lnk
+ rsync -av -X $DIR/$tdir/ $DIR/$tdir.new ||
+ error "rsync failed with xattrs enabled"
}
run_test 17k "symlinks: rsync with xattrs enabled ========================="
run_test 17n "run e2fsck against master/slave MDT which contains remote dir"
test_18() {
- touch $DIR/f
- ls $DIR || error
+ touch $DIR/f || error "Failed to touch $DIR/f: $?"
+ ls $DIR || error "Failed to ls $DIR: $?"
}
run_test 18 "touch .../f ; ls ... =============================="
}
run_test 56w "check lfs_migrate -c stripe_count works"
+test_56x() {
+ check_swap_layouts_support && return 0
+ [ "$OSTCOUNT" -lt "2" ] &&
+ skip_env "need 2 OST, skipping test" && return
+
+ local dir0=$DIR/$tdir/$testnum
+ mkdir -p $dir0 || error "creating dir $dir0"
+
+ local ref1=/etc/passwd
+ local file1=$dir0/file1
+
+ $SETSTRIPE -c 2 $file1
+ cp $ref1 $file1
+ $LFS migrate -c 1 $file1 || error "migrate failed rc = $?"
+ stripe=$($GETSTRIPE -c $file1)
+ [[ $stripe == 1 ]] || error "stripe of $file1 is $stripe != 1"
+ cmp $file1 $ref1 || error "content mismatch $file1 differs from $ref1"
+
+ # clean up
+ rm -f $file1
+}
+run_test 56x "lfs migration support"
+
test_57a() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
# note test will not do anything if MDS is not local
}
run_test 160 "changelog sanity"
-test_161() {
+test_161a() {
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
test_mkdir -p $DIR/$tdir
cp /etc/hosts $DIR/$tdir/$tfile
ln $DIR/$tdir/$tfile $DIR/$tdir/foo2/zachary
ln $DIR/$tdir/$tfile $DIR/$tdir/foo1/luna
ln $DIR/$tdir/$tfile $DIR/$tdir/foo2/thor
- local FID=$($LFS path2fid $DIR/$tdir/$tfile | tr -d '[')
- if [ "$($LFS fid2path $DIR $FID | wc -l)" != "5" ]; then
- $LFS fid2path $DIR $FID
- err17935 "bad link ea"
- fi
+ local FID=$($LFS path2fid $DIR/$tdir/$tfile | tr -d '[]')
+ if [ "$($LFS fid2path $DIR $FID | wc -l)" != "5" ]; then
+ $LFS fid2path $DIR $FID
+ err17935 "bad link ea"
+ fi
# middle
rm $DIR/$tdir/foo2/zachary
# last
unlinkmany $DIR/$tdir/foo2/$longname 1000 || \
error "failed to unlink many hardlinks"
}
-run_test 161 "link ea sanity"
+run_test 161a "link ea sanity"
+
+test_161b() {
+ [ $PARALLEL == "yes" ] && skip "skip parallel run" && return
+ [ $MDSCOUNT -lt 2 ] &&
+ skip "skipping remote directory test" && return
+ local MDTIDX=1
+ local remote_dir=$DIR/$tdir/remote_dir
+
+ mkdir -p $DIR/$tdir
+ $LFS mkdir -i $MDTIDX $remote_dir ||
+ error "create remote directory failed"
+
+ cp /etc/hosts $remote_dir/$tfile
+ mkdir -p $remote_dir/foo1
+ mkdir -p $remote_dir/foo2
+ ln $remote_dir/$tfile $remote_dir/foo1/sofia
+ ln $remote_dir/$tfile $remote_dir/foo2/zachary
+ ln $remote_dir/$tfile $remote_dir/foo1/luna
+ ln $remote_dir/$tfile $remote_dir/foo2/thor
+
+ local FID=$($LFS path2fid $remote_dir/$tfile | tr -d '[' |
+ tr -d ']')
+ if [ "$($LFS fid2path $DIR $FID | wc -l)" != "5" ]; then
+ $LFS fid2path $DIR $FID
+ err17935 "bad link ea"
+ fi
+ # middle
+ rm $remote_dir/foo2/zachary
+ # last
+ rm $remote_dir/foo2/thor
+ # first
+ rm $remote_dir/$tfile
+ # rename
+ mv $remote_dir/foo1/sofia $remote_dir/foo2/maggie
+ local link_path=$($LFS fid2path $FSNAME --link 1 $FID)
+ if [ "$DIR/$link_path" != "$remote_dir/foo2/maggie" ]; then
+ $LFS fid2path $DIR $FID
+ err17935 "bad link rename"
+ fi
+ rm $remote_dir/foo2/maggie
+
+ # overflow the EA
+ local longname=filename_avg_len_is_thirty_two_
+ createmany -l$remote_dir/foo1/luna $remote_dir/foo2/$longname 1000 ||
+ error "failed to hardlink many files"
+ links=$($LFS fid2path $DIR $FID | wc -l)
+ echo -n "${links}/1000 links in link EA"
+ [ ${links} -gt 60 ] || err17935 "expected at least 60 links in link EA"
+ unlinkmany $remote_dir/foo2/$longname 1000 ||
+ error "failed to unlink many hardlinks"
+}
+run_test 161b "link ea sanity under remote directory"
check_path() {
local expected=$1
}
run_test 183 "No crash or request leak in case of strange dispositions ========"
-test_185() { # LU-2441
- mkdir -p $DIR/$tdir || error "creating dir $DIR/$tdir"
- touch $DIR/$tdir/spoo
- local mtime1=$(stat -c "%Y" $DIR/$tdir)
- local fid=$($MULTIOP $DIR/$tdir VFw4096c) ||
- error "cannot create/write a volatile file"
- $CHECKSTAT -t file $MOUNT/.lustre/fid/$fid 2>/dev/null &&
- error "FID is still valid after close"
-
- multiop_bg_pause $DIR/$tdir vVw4096_c
- local multi_pid=$!
-
- local OLD_IFS=$IFS
- IFS=":"
- local fidv=($fid)
- IFS=$OLD_IFS
- # assume that the next FID for this client is sequential, since stdout
- # is unfortunately eaten by multiop_bg_pause
- local n=$((${fidv[1]} + 1))
- local next_fid="${fidv[0]}:$(printf "0x%x" $n):${fidv[2]}"
- $CHECKSTAT -t file $MOUNT/.lustre/fid/$next_fid ||
- error "FID is missing before close"
- kill -USR1 $multi_pid
- # 1 second delay, so if mtime change we will see it
- sleep 1
- local mtime2=$(stat -c "%Y" $DIR/$tdir)
- [[ $mtime1 == $mtime2 ]] || error "mtime has changed"
-}
-run_test 185 "Volatile file support"
-
-check_swap_layouts_support()
-{
- $LCTL get_param -n llite.*.sbi_flags | grep -q layout ||
- { skip "Does not support layout lock."; return 0; }
- return 1
-}
-
# test suite 184 is for LU-2016, LU-2017
test_184a() {
check_swap_layouts_support && return 0
}
run_test 184c "Concurrent write and layout swap"
+test_185() { # LU-2441
+ mkdir -p $DIR/$tdir || error "creating dir $DIR/$tdir"
+ touch $DIR/$tdir/spoo
+ local mtime1=$(stat -c "%Y" $DIR/$tdir)
+ local fid=$($MULTIOP $DIR/$tdir VFw4096c) ||
+ error "cannot create/write a volatile file"
+ $CHECKSTAT -t file $MOUNT/.lustre/fid/$fid 2>/dev/null &&
+ error "FID is still valid after close"
+
+ multiop_bg_pause $DIR/$tdir vVw4096_c
+ local multi_pid=$!
+
+ local OLD_IFS=$IFS
+ IFS=":"
+ local fidv=($fid)
+ IFS=$OLD_IFS
+ # assume that the next FID for this client is sequential, since stdout
+ # is unfortunately eaten by multiop_bg_pause
+ local n=$((${fidv[1]} + 1))
+ local next_fid="${fidv[0]}:$(printf "0x%x" $n):${fidv[2]}"
+ $CHECKSTAT -t file $MOUNT/.lustre/fid/$next_fid ||
+ error "FID is missing before close"
+ kill -USR1 $multi_pid
+ # 1 second delay, so if mtime change we will see it
+ sleep 1
+ local mtime2=$(stat -c "%Y" $DIR/$tdir)
+ [[ $mtime1 == $mtime2 ]] || error "mtime has changed"
+}
+run_test 185 "Volatile file support"
+
# OST pools tests
check_file_in_pool()
{
fi
}
+jobstats_set() {
+ trap 0
+ NEW_JOBENV=${1:-$OLD_JOBENV}
+ do_facet mgs $LCTL conf_param $FSNAME.sys.jobid_var=$NEW_JOBENV
+ wait_update $HOSTNAME "$LCTL get_param -n jobid_var" $NEW_JOBENV
+}
+
test_205() { # Job stats
[ $PARALLEL == "yes" ] && skip "skip parallel run" && return
[ -z "$(lctl get_param -n mdc.*.connect_flags | grep jobstats)" ] &&
local cmd
OLD_JOBENV=`$LCTL get_param -n jobid_var`
if [ $OLD_JOBENV != $JOBENV ]; then
- do_facet mgs $LCTL conf_param $FSNAME.sys.jobid_var=$JOBENV
- wait_update $HOSTNAME "$LCTL get_param -n jobid_var" \
- $JOBENV || return 1
+ jobstats_set $JOBENV
+ trap jobstats_set EXIT
fi
# mkdir
# cleanup
rm -f $DIR/jobstats_test_rename
- if [ $OLD_JOBENV != $JOBENV ]; then
- do_facet mgs $LCTL conf_param $FSNAME.sys.jobid_var=$OLD_JOBENV
- wait_update $HOSTNAME "$LCTL get_param -n jobid_var" \
- $OLD_JOBENV || return 1
- fi
+ [ $OLD_JOBENV != $JOBENV ] && jobstats_set $OLD_JOBENV
}
run_test 205 "Verify job stats"
echo "pass with $path and $fid"
}
-test_226 () {
+test_226a () {
rm -rf $DIR/$tdir
mkdir -p $DIR/$tdir
mcreate_path2fid 0120666 0 0 link "symbolic link"
mcreate_path2fid 0140666 0 0 sock "socket"
}
-run_test 226 "call path2fid and fid2path on files of all type"
+run_test 226a "call path2fid and fid2path on files of all type"
+
+test_226b () {
+ [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return
+ rm -rf $DIR/$tdir
+ local MDTIDX=1
+
+ mkdir -p $DIR/$tdir
+ $LFS setdirstripe -i $MDTIDX $DIR/$tdir/remote_dir ||
+ error "create remote directory failed"
+ mcreate_path2fid 0010666 0 0 "remote_dir/fifo" "FIFO"
+ mcreate_path2fid 0020666 1 3 "remote_dir/null" \
+ "character special file (null)"
+ mcreate_path2fid 0020666 1 255 "remote_dir/none" \
+ "character special file (no device)"
+ mcreate_path2fid 0040666 0 0 "remote_dir/dir" "directory"
+ mcreate_path2fid 0060666 7 0 "remote_dir/loop0" \
+ "block special file (loop)"
+ mcreate_path2fid 0100666 0 0 "remote_dir/file" "regular file"
+ mcreate_path2fid 0120666 0 0 "remote_dir/link" "symbolic link"
+ mcreate_path2fid 0140666 0 0 "remote_dir/sock" "socket"
+}
+run_test 226b "call path2fid and fid2path on files of all type under remote dir"
# LU-1299 Executing or running ldd on a truncated executable does not
# cause an out-of-memory condition.