Whamcloud - gitweb
LU-2826 tests: Re-enable sanity/18
[fs/lustre-release.git] / lustre / tests / sanity.sh
index 6c4ce0a..ae3151f 100644 (file)
@@ -61,8 +61,8 @@ init_logging
 [ "$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
 
@@ -89,6 +89,13 @@ check_kernel_version() {
        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
@@ -468,9 +475,18 @@ str_repeat() {
 
 # 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"
@@ -519,12 +535,12 @@ test_17k() { #bug 22301
         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 ========================="
 
@@ -662,8 +678,8 @@ test_17n() {
 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 ... =============================="
 
@@ -4394,6 +4410,29 @@ test_56w() {
 }
 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
@@ -9094,7 +9133,7 @@ test_160() {
 }
 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
@@ -9104,11 +9143,11 @@ test_161() {
     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
@@ -9134,7 +9173,59 @@ test_161() {
     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
@@ -9458,43 +9549,6 @@ test_183() { # LU-2275
 }
 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
@@ -9601,6 +9655,36 @@ test_184c() {
 }
 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()
 {
@@ -10059,6 +10143,13 @@ verify_jobstats() {
        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)" ] &&
@@ -10067,9 +10158,8 @@ test_205() { # Job stats
        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
@@ -10106,11 +10196,7 @@ test_205() { # Job stats
        # 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"
 
@@ -10631,7 +10717,7 @@ mcreate_path2fid () {
        echo "pass with $path and $fid"
 }
 
-test_226 () {
+test_226a () {
        rm -rf $DIR/$tdir
        mkdir -p $DIR/$tdir
 
@@ -10644,7 +10730,29 @@ test_226 () {
        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.