X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Ftests%2Fsanity.sh;h=4df82e199907a2daf09f4ca6cdf7226a969f47a7;hb=cb85c0364fd8323f4bb03c481660805da66aaf85;hp=433c33083c0d4285c6637a38801dab08a7ed0ea1;hpb=2115c58384bd03bf4a76ba492bdf47a257cd5a3f;p=fs%2Flustre-release.git diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 433c330..4df82e1 100644 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -214,20 +214,19 @@ run_test 3 "mkdir; touch; rmdir; check dir =====================" # LU-4471 - failed rmdir on remote directories still removes directory on MDT0 test_4() { local MDTIDX=1 - local remote_dir=remote_dir - test_mkdir $DIR/$remote_dir || + test_mkdir $DIR/$tdir || error "Create remote directory failed" - touch $DIR/$remote_dir/$tfile || + touch $DIR/$tdir/$tfile || error "Create file under remote directory failed" - rmdir $DIR/$remote_dir && - error "Expect error removing in-use dir $DIR/$remote_dir" + rmdir $DIR/$tdir && + error "Expect error removing in-use dir $DIR/$tdir" - test -d $DIR/$remote_dir || error "Remote directory disappeared" + test -d $DIR/$tdir || error "Remote directory disappeared" - rm -rf $DIR/$remote_dir || error "remove remote dir error" + rm -rf $DIR/$tdir || error "remove remote dir error" } run_test 4 "mkdir; touch dir/file; rmdir; checkdir (expect error)" @@ -449,14 +448,14 @@ test_17e() { run_test 17e "symlinks: create recursive symlink (should return error) ====" test_17f() { - test_mkdir -p $DIR/d17f - ln -s 1234567890/2234567890/3234567890/4234567890 $DIR/d17f/111 - ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890 $DIR/d17f/222 - ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890 $DIR/d17f/333 - ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890 $DIR/d17f/444 - ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890 $DIR/d17f/555 - ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890/aaaaaaaaaa/bbbbbbbbbb/cccccccccc/dddddddddd/eeeeeeeeee/ffffffffff/ $DIR/d17f/666 - ls -l $DIR/d17f + test_mkdir -p $DIR/$tdir + ln -s 1234567890/2234567890/3234567890/4234567890 $DIR/$tdir/111 + ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890 $DIR/$tdir/222 + ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890 $DIR/$tdir/333 + ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890 $DIR/$tdir/444 + ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890 $DIR/$tdir/555 + ln -s 1234567890/2234567890/3234567890/4234567890/5234567890/6234567890/7234567890/8234567890/9234567890/a234567890/b234567890/c234567890/d234567890/f234567890/aaaaaaaaaa/bbbbbbbbbb/cccccccccc/dddddddddd/eeeeeeeeee/ffffffffff/ $DIR/$tdir/666 + ls -l $DIR/$tdir } run_test 17f "symlinks: long and very long symlink name ========================" @@ -621,7 +620,7 @@ test_17m() { stop mds${mds_index} do_facet mds${mds_index} $cmd || rc=$? - start mds${mds_index} $devname $MDS_MOUNT_OPTS + 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" @@ -646,7 +645,8 @@ check_fs_consistency_17n() { stop mds${mdt_index} do_facet mds${mdt_index} $cmd || rc=$? - start mds${mdt_index} $devname $MDS_MOUNT_OPTS + start mds${mdt_index} $devname $MDS_MOUNT_OPTS || + error "mount mds${mdt_index} failed" df $MOUNT > /dev/null 2>&1 [ $rc -ne 0 ] && break done @@ -723,7 +723,8 @@ test_17o() { touch $WDIR/$tfile stop mds${mdt_index} - start mds${mdt_index} $mdtdevname $MDS_MOUNT_OPTS + start mds${mdt_index} $mdtdevname $MDS_MOUNT_OPTS || + error "mount mds${mdt_index} failed" #define OBD_FAIL_OSD_LMA_INCOMPAT 0x194 do_facet mds${mdt_index} lctl set_param fail_loc=0x194 @@ -735,7 +736,7 @@ test_17o() { run_test 17o "stat file with incompat LMA feature" test_18() { - touch $DIR/f || error "Failed to touch $DIR/f: $?" + touch $DIR/$tfile || error "Failed to touch $DIR/$tfile: $?" ls $DIR || error "Failed to ls $DIR: $?" } run_test 18 "touch .../f ; ls ... ==============================" @@ -1038,7 +1039,6 @@ test_24t() { run_test 24t "mkdir .../R16a/b/c; rename .../R16a/b/c .../R16a =" test_24u() { # bug12192 - rm -rf $DIR/$tfile $MULTIOP $DIR/$tfile C2w$((2048 * 1024))c || error $CHECKSTAT -s $((2048 * 1024)) $DIR/$tfile || error "wrong file size" } @@ -1103,7 +1103,7 @@ test_24w() { # bug21506 dd if=/dev/zero bs=$SZ1 count=1 >> $DIR/$tfile || return 2 dd if=$DIR/$tfile of=$DIR/${tfile}_left bs=1M skip=4097 || return 3 SZ2=`ls -l $DIR/${tfile}_left | awk '{print $5}'` - [ "$SZ1" = "$SZ2" ] || \ + [[ "$SZ1" -eq "$SZ2" ]] || error "Error reading at the end of the file $tfile" } run_test 24w "Reading a file larger than 4Gb" @@ -2474,7 +2474,6 @@ test_32n() { run_test 32n "open d32n/symlink->tmp/symlink->lustre-root ======" test_32o() { - rm -fr $DIR/d32o $DIR/$tfile touch $DIR/$tfile test_mkdir -p $DIR/d32o/tmp TMP_DIR=$DIR/d32o/tmp @@ -2564,9 +2563,9 @@ test_33b() { rm -fr $DIR/d33 test_mkdir -p $DIR/d33 chown $RUNAS_ID $DIR/d33 - $RUNAS $OPENFILE -f 1286739555 $DIR/d33/f33 && error "create" || true + $RUNAS $OPENFILE -f 1286739555 $DIR/d33/f33 } -run_test 33b "test open file with malformed flags (No panic and return error)" +run_test 33b "test open file with malformed flags (No panic)" test_33c() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return @@ -2660,6 +2659,52 @@ test_33d() { } run_test 33d "openfile with 444 modes and malformed flags under remote dir" +test_33e() { + [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return + + mkdir $DIR/$tdir + + $LFS setdirstripe -i0 -c2 $DIR/$tdir/striped_dir + $LFS setdirstripe -i1 -c2 $DIR/$tdir/striped_dir1 + mkdir $DIR/$tdir/local_dir + + local s0_mode=$(stat -c%f $DIR/$tdir/striped_dir) + local s1_mode=$(stat -c%f $DIR/$tdir/striped_dir1) + local l_mode=$(stat -c%f $DIR/$tdir/local_dir) + + [ "$l_mode" = "$s0_mode" -a "$l_mode" = "$s1_mode" ] || + error "mkdir $l_mode striped0 $s0_mode striped1 $s1_mode" + + rmdir $DIR/$tdir/* || error "rmdir failed" + + umask 777 + $LFS setdirstripe -i0 -c2 $DIR/$tdir/striped_dir + $LFS setdirstripe -i1 -c2 $DIR/$tdir/striped_dir1 + mkdir $DIR/$tdir/local_dir + + s0_mode=$(stat -c%f $DIR/$tdir/striped_dir) + s1_mode=$(stat -c%f $DIR/$tdir/striped_dir1) + l_mode=$(stat -c%f $DIR/$tdir/local_dir) + + [ "$l_mode" = "$s0_mode" -a "$l_mode" = "$s1_mode" ] || + error "mkdir $l_mode striped0 $s0_mode striped1 $s1_mode 777" + + rmdir $DIR/$tdir/* || error "rmdir(umask 777) failed" + + umask 000 + $LFS setdirstripe -i0 -c2 $DIR/$tdir/striped_dir + $LFS setdirstripe -i1 -c2 $DIR/$tdir/striped_dir1 + mkdir $DIR/$tdir/local_dir + + s0_mode=$(stat -c%f $DIR/$tdir/striped_dir) + s1_mode=$(stat -c%f $DIR/$tdir/striped_dir1) + l_mode=$(stat -c%f $DIR/$tdir/local_dir) + + [ "$l_mode" = "$s0_mode" -a "$l_mode" = "$s1_mode" ] || + error "mkdir $l_mode striped0 $s0_mode striped1 $s1_mode 0" +} +run_test 33e "mkdir and striped directory should have same mode" + TEST_34_SIZE=${TEST_34_SIZE:-2000000000000} test_34a() { rm -f $DIR/f34 @@ -4026,6 +4071,23 @@ test_51d() { } run_test 51d "check object distribution ====================" +test_51e() { + if [ "$(facet_fstype $SINGLEMDS)" != ldiskfs ]; then + skip "Only applicable to ldiskfs-based MDTs" + return + fi + + test_mkdir -c1 $DIR/$tdir || error "create $tdir failed" + test_mkdir -c1 $DIR/$tdir/d0 || error "create d0 failed" + + touch $DIR/$tdir/d0/foo + createmany -l $DIR/$tdir/d0/foo $DIR/$tdir/d0/f- 65001 && + error "file exceed 65000 nlink limit!" + unlinkmany $DIR/$tdir/d0/f- 65001 + return 0 +} +run_test 51e "check file nlink limit" + test_52a() { [ -f $DIR/$tdir/foo ] && chattr -a $DIR/$tdir/foo test_mkdir -p $DIR/$tdir @@ -4168,31 +4230,34 @@ cleanup_54c() { loopdev="$DIR/loop54c" trap 0 - $UMOUNT -d $tdir || rc=$? + $UMOUNT -d $DIR/$tdir || rc=$? losetup -d $loopdev || true - rm $loopdev + losetup -d $LOOPDEV || true + rm -rf $loopdev $DIR/$tfile $DIR/$tdir return $rc } test_54c() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return - tfile="$DIR/f54c" - tdir="$DIR/d54c" loopdev="$DIR/loop54c" find_loop_dev [ -z "$LOOPNUM" ] && echo "couldn't find empty loop device" && return - mknod $loopdev b 7 $LOOPNUM - echo "make a loop file system with $tfile on $loopdev ($LOOPNUM)..." - dd if=/dev/zero of=$tfile bs=$(get_page_size client) seek=1024 count=1 > /dev/null - losetup $loopdev $tfile || error "can't set up $loopdev for $tfile" trap cleanup_54c EXIT + mknod $loopdev b 7 $LOOPNUM + echo "make a loop file system with $DIR/$tfile on $loopdev ($LOOPNUM)." + dd if=/dev/zero of=$DIR/$tfile bs=$(get_page_size client) seek=1024 count=1 > /dev/null + losetup $loopdev $DIR/$tfile || + error "can't set up $loopdev for $DIR/$tfile" mkfs.ext2 $loopdev || error "mke2fs on $loopdev" - test_mkdir -p $tdir - mount -t ext2 $loopdev $tdir || error "error mounting $loopdev on $tdir" - dd if=/dev/zero of=$tdir/tmp bs=`page_size` count=30 || error "dd write" - df $tdir - dd if=$tdir/tmp of=/dev/zero bs=`page_size` count=30 || error "dd read" + test_mkdir -p $DIR/$tdir + mount -t ext2 $loopdev $DIR/$tdir || + error "error mounting $loopdev on $DIR/$tdir" + dd if=/dev/zero of=$DIR/$tdir/tmp bs=$(get_page_size client) count=30 || + error "dd write" + df $DIR/$tdir + dd if=$DIR/$tdir/tmp of=/dev/zero bs=$(get_page_size client) count=30 || + error "dd read" cleanup_54c } run_test 54c "block device works in lustre =====================" @@ -4847,6 +4912,30 @@ test_56y() { } run_test 56y "lfs find -L raid0|released" +test_56z() { # LU-4824 + # This checks to make sure 'lfs find' continues after errors + # There are two classes of errors that should be caught: + # - If multiple paths are provided, all should be searched even if one + # errors out + # - If errors are encountered during the search, it should not terminate + # early + local i + test_mkdir $DIR/$tdir + for i in d{0..9}; do + test_mkdir $DIR/$tdir/$i + done + touch $DIR/$tdir/d{0..9}/$tfile + $LFS find $DIR/non_existent_dir $DIR/$tdir && + error "$LFS find did not return an error" + # Make a directory unsearchable. This should NOT be the last entry in + # directory order. Arbitrarily pick the 6th entry + chmod 700 $(lfs find $DIR/$tdir -type d | sed '6!d') + local count=$($RUNAS $LFS find $DIR/non_existent $DIR/$tdir | wc -l) + # The user should be able to see 10 directories and 9 files + [ $count == 19 ] || error "$LFS find did not continue after error" +} +run_test 56z "lfs find should continue after an error" + test_57a() { [ $PARALLEL == "yes" ] && skip "skip parallel run" && return # note test will not do anything if MDS is not local @@ -5416,8 +5505,6 @@ test_72a() { # bug 5695 - Test that on 2.6 remove_suid works properly skip_env "User $RUNAS_ID does not exist - skipping" return 0 } - # We had better clear the $DIR to get enough space for dd - rm -rf $DIR/* touch $DIR/$tfile chmod 777 $DIR/$tfile chmod ug+s $DIR/$tfile @@ -6340,7 +6427,7 @@ cleanup_test102() { } test_102a() { - local testfile=$DIR/xattr_testfile + local testfile=$DIR/$tfile touch $testfile @@ -9196,14 +9283,14 @@ function roc_hit_init() { dd if=/dev/urandom of=$file bs=4k count=4 2>&1 > /dev/null idx=$(printf %04x $i) BEFORE=$(get_osd_param $list *OST*$idx stats | - awk '$1 == "cache_access" {sum += $2} + awk '$1 == "cache_access" {sum += $7} END { printf("%0.0f", sum) }') cancel_lru_locks osc cat $file >/dev/null AFTER=$(get_osd_param $list *OST*$idx stats | - awk '$1 == "cache_access" {sum += $2} + awk '$1 == "cache_access" {sum += $7} END { printf("%0.0f", sum) }') echo BEFORE:$BEFORE AFTER:$AFTER @@ -9220,7 +9307,7 @@ function roc_hit_init() { function roc_hit() { local list=$(comma_list $(osts_nodes)) echo $(get_osd_param $list '' stats | - awk '$1 == "cache_hit" {sum += $2} + awk '$1 == "cache_hit" {sum += $7} END { printf("%0.0f", sum) }') } @@ -10013,6 +10100,12 @@ run_test 160b "Verify that very long rename doesn't crash in changelog" test_160c() { local rc=0 + local server_version=$(lustre_version_code $SINGLEMDS) + + [[ $server_version -gt $(version_code 2.5.57) ]] || + [[ $server_version -gt $(version_code 2.5.1) && + $server_version -lt $(version_code 2.5.50) ]] || + { skip "Need MDS version at least 2.5.58 or 2.5.2+"; return; } [ $PARALLEL == "yes" ] && skip "skip parallel run" && return # Registration step @@ -10402,7 +10495,7 @@ test_171() { # bug20592 } run_test 171 "test libcfs_debug_dumplog_thread stuck in do_exit() ======" -# it would be good to share it with obdfilter-survey/libecho code +# it would be good to share it with obdfilter-survey/iokit-libecho code setup_obdecho_osc () { local rc=0 local ost_nid=$1 @@ -12582,6 +12675,13 @@ run_test 237 "Verify name_to_handle_at/open_by_handle_at syscalls" # LU-4659 linkea consistency test_238() { + local server_version=$(lustre_version_code $SINGLEMDS) + + [[ $server_version -gt $(version_code 2.5.57) ]] || + [[ $server_version -gt $(version_code 2.5.1) && + $server_version -lt $(version_code 2.5.50) ]] || + { skip "Need MDS version at least 2.5.58 or 2.5.2+"; return; } + touch $DIR/$tfile ln $DIR/$tfile $DIR/$tfile.lnk touch $DIR/$tfile.new @@ -12597,15 +12697,40 @@ test_238() { } run_test 238 "Verify linkea consistency" +test_239() { + local list=$(comma_list $(mdts_nodes)) + + mkdir -p $DIR/$tdir + createmany -o $DIR/$tdir/f- 5000 + unlinkmany $DIR/$tdir/f- 5000 + do_nodes $list "lctl set_param -n osp*.*.sync_changes 1" + changes=$(do_nodes $list "lctl get_param -n osc.*MDT*.sync_changes \ + osc.*MDT*.sync_in_flight" | calc_sum) + [ "$changes" -eq 0 ] || error "$changes not synced" +} +run_test 239 "osp_sync test" + +cleanup_test_300() { + trap 0 + umask $SAVE_UMASK +} test_striped_dir() { local mdt_index=$1 local stripe_count local stripe_index mkdir -p $DIR/$tdir - $LFS setdirstripe -i $mdt_index -c 2 -t all_char $DIR/$tdir/striped_dir || + + SAVE_UMASK=$(umask) + trap cleanup_test_300 RETURN EXIT + + $LFS setdirstripe -i $mdt_index -c 2 -t all_char -m 755 \ + $DIR/$tdir/striped_dir || error "set striped dir error" + local mode=$(stat -c%a $DIR/$tdir/striped_dir) + [ "$mode" = "755" ] || error "expect 755 got $mode" + stripe_count=$($LFS getdirstripe -c $DIR/$tdir/striped_dir) if [ "$stripe_count" != "2" ]; then error "stripe_count is $stripe_count, expect 2" @@ -12640,6 +12765,9 @@ test_striped_dir() { rmdir $DIR/$tdir/striped_dir || error "rmdir striped dir error" + + cleanup_test_300 + true }