X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fconf-sanity.sh;h=cc0f3dc1e57186d70e27d6e7ec8d772b533a2d96;hb=98ac0fe3a45dde62759ecaa4c84e6250ac2067f8;hp=e96cc8fc6038d9148b1c298c5d2421adaaa470ad;hpb=bc25ea34379b5abacffbbb41d0ecb5dfcd676cd0;p=fs%2Flustre-release.git diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index e96cc8f..cc0f3dc 100644 --- a/lustre/tests/conf-sanity.sh +++ b/lustre/tests/conf-sanity.sh @@ -1,9 +1,9 @@ #!/bin/bash -# FIXME - there is no reason to use all of these different -# return codes, espcially when most of them are mapped to something -# else anyway. The combination of test number and return code -# figure out what failed. +# FIXME - there is no reason to use all of these different return codes, +# espcially when most of them are mapped to something else anyway. +# The tests should use error() to describe the failure more clearly, +# and reduce the need to look into the tests to see what failed. set -e @@ -54,23 +54,21 @@ export MULTIOP=${MULTIOP:-multiop} . $LUSTRE/tests/test-framework.sh init_test_env $@ +. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh} # use small MDS + OST size to speed formatting time # do not use too small MDSSIZE/OSTSIZE, which affect the default jouranl size +# STORED_MDSSIZE is used in test_18 +STORED_MDSSIZE=$MDSSIZE +STORED_OSTSIZE=$OSTSIZE MDSSIZE=200000 OSTSIZE=200000 -. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh} if ! combined_mgs_mds; then # bug number for skipped test: 23954 ALWAYS_EXCEPT="$ALWAYS_EXCEPT 24b" fi -# STORED_MDSSIZE is used in test_18 -if [ -n "$MDSSIZE" ]; then - STORED_MDSSIZE=$MDSSIZE -fi - # pass "-E lazy_itable_init" to mke2fs to speed up the formatting time if [[ "$LDISKFS_MKFS_OPTS" != *lazy_itable_init* ]]; then LDISKFS_MKFS_OPTS=$(csa_add "$LDISKFS_MKFS_OPTS" -E lazy_itable_init) @@ -86,7 +84,7 @@ init_logging require_dsh_mds || exit 0 require_dsh_ost || exit 0 # -[ "$SLOW" = "no" ] && EXCEPT_SLOW="30a 31 45" +[ "$SLOW" = "no" ] && EXCEPT_SLOW="30a 31 45 69" assert_DIR @@ -125,7 +123,7 @@ reformat() { start_mgs () { echo "start mgs" - start mgs $MGSDEV $MGS_MOUNT_OPTS + start mgs $(mgsdevname) $MGS_MOUNT_OPTS } start_mdt() { @@ -896,7 +894,7 @@ MDSDEV1_2=$fs2mds_DEV OSTDEV1_2=$fs2ost_DEV OSTDEV2_2=$fs3ost_DEV -cleanup_24a() { +cleanup_fs2() { trap 0 echo "umount $MOUNT2 ..." umount $MOUNT2 || true @@ -931,7 +929,7 @@ test_24a() { --reformat $fs2ostdev $fs2ostvdev || exit 10 setup - start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_24a EXIT INT + start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_fs2 EXIT INT start fs2ost $fs2ostdev $OST_MOUNT_OPTS mkdir -p $MOUNT2 mount -t lustre $MGSNID:/${FSNAME2} $MOUNT2 || return 1 @@ -956,7 +954,7 @@ test_24a() { stop_mds MDS=$(do_facet $SINGLEMDS "lctl get_param -n devices" | awk '($3 ~ "mdt" && $4 ~ "MDT") { print $4 }' | head -1) [ -z "$MDS" ] && error "No MDT" && return 8 - cleanup_24a + cleanup_fs2 cleanup_nocli || return 6 } run_test 24a "Multiple MDTs on a single node" @@ -1393,16 +1391,20 @@ t32_reload_modules() { t32_wait_til_devices_gone() { local node=$1 local devices + local loops local i=0 echo wait for devices to go while ((i < 20)); do devices=$(do_rpc_nodes $node $LCTL device_list | wc -l) - ((devices == 0)) && return 0 + loops=$(do_rpc_nodes $node losetup -a | grep -c t32) + ((devices == 0 && loops == 0)) && return 0 sleep 5 i=$((i + 1)) done - echo "waiting for devices on $node: Given up" + echo "waiting for dev on $node: dev $devices loop $loops given up" + do_rpc_nodes $node "losetup -a" + do_rpc_nodes $node "$LCTL devices_list" return 1 } @@ -1537,6 +1539,7 @@ t32_test() { $r $LCTL set_param debug="$PTLDEBUG" $r $TUNEFS --dryrun $tmp/mdt || { + $r losetup -a error_noexit "tunefs.lustre before mounting the MDT" return 1 } @@ -1544,6 +1547,7 @@ t32_test() { mopts=loop,writeconf if [ $fstype == "ldiskfs" ]; then $r $TUNEFS --quota $tmp/mdt || { + $r losetup -a error_noexit "Enable mdt quota feature" return 1 } @@ -1560,7 +1564,7 @@ t32_test() { $r mount -t lustre -o loop,nosvc $tmp/mdt $tmp/mnt/mdt $r lctl replace_nids $fsname-OST0000 $ostnid $r lctl replace_nids $fsname-MDT0000 $nid - $r umount $tmp/mnt/mdt + $r umount -d $tmp/mnt/mdt fi mopts=loop,exclude=$fsname-OST0000 @@ -1569,6 +1573,7 @@ t32_test() { t32_wait_til_devices_gone $node $r mount -t lustre -o $mopts $tmp/mdt $tmp/mnt/mdt || { + $r losetup -a error_noexit "Mounting the MDT" return 1 } @@ -1620,6 +1625,7 @@ t32_test() { mopts=loop,mgsnode=$nid,$writeconf if [ $fstype == "ldiskfs" ]; then $r $TUNEFS --quota $tmp/ost || { + $r losetup -a error_noexit "Enable ost quota feature" return 1 } @@ -1868,6 +1874,7 @@ t32_test() { # mount a second time to make sure we didnt leave upgrade flag on $r $TUNEFS --dryrun $tmp/mdt || { + $r losetup -a error_noexit "tunefs.lustre before remounting the MDT" return 1 } @@ -1963,7 +1970,7 @@ test_33a() { # bug 12333, was test_33 --fsname=${FSNAME2} --index=8191 --reformat $fs2ostdev \ $fs2ostvdev || exit 10 - start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_24a EXIT INT + start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_fs2 EXIT INT start fs2ost $fs2ostdev $OST_MOUNT_OPTS do_facet $SINGLEMDS "$LCTL conf_param $FSNAME2.sys.timeout=200" || rc=1 mkdir -p $MOUNT2 @@ -2728,7 +2735,7 @@ test_48() { # bug 17636 run_test 48 "too many acls on file" # check PARAM_SYS_LDLM_TIMEOUT option of MKFS.LUSTRE -test_49() { # bug 17710 +test_49a() { # bug 17710 local timeout_orig=$TIMEOUT local ldlm_timeout_orig=$LDLM_TIMEOUT local LOCAL_TIMEOUT=20 @@ -2738,49 +2745,60 @@ test_49() { # bug 17710 reformat setup_noconfig - check_mount || return 1 + check_mount || error "client mount failed" echo "check ldlm_timout..." - LDLM_MDS="`do_facet $SINGLEMDS lctl get_param -n ldlm_timeout`" - LDLM_OST1="`do_facet ost1 lctl get_param -n ldlm_timeout`" - LDLM_CLIENT="`do_facet client lctl get_param -n ldlm_timeout`" + local LDLM_MDS="$(do_facet $SINGLEMDS lctl get_param -n ldlm_timeout)" + local LDLM_OST1="$(do_facet ost1 lctl get_param -n ldlm_timeout)" + local LDLM_CLIENT="$(do_facet client lctl get_param -n ldlm_timeout)" - if [ $LDLM_MDS -ne $LDLM_OST1 ] || [ $LDLM_MDS -ne $LDLM_CLIENT ]; then + if [ $LDLM_MDS -ne $LDLM_OST1 -o $LDLM_MDS -ne $LDLM_CLIENT ]; then error "Different LDLM_TIMEOUT:$LDLM_MDS $LDLM_OST1 $LDLM_CLIENT" fi if [ $LDLM_MDS -ne $((LOCAL_TIMEOUT / 3)) ]; then - error "LDLM_TIMEOUT($LDLM_MDS) is not correct" + error "LDLM_TIMEOUT($LDLM_MDS) is not $((LOCAL_TIMEOUT / 3))" fi umount_client $MOUNT - stop_ost || return 2 - stop_mds || return 3 + stop_ost || error "problem stopping OSS" + stop_mds || error "problem stopping MDS" + + LDLM_TIMEOUT=$ldlm_timeout_orig + TIMEOUT=$timeout_orig +} +run_test 49a "check PARAM_SYS_LDLM_TIMEOUT option of mkfs.lustre" + +test_49b() { # bug 17710 + local timeout_orig=$TIMEOUT + local ldlm_timeout_orig=$LDLM_TIMEOUT + local LOCAL_TIMEOUT=20 LDLM_TIMEOUT=$((LOCAL_TIMEOUT - 1)) + TIMEOUT=$LOCAL_TIMEOUT reformat setup_noconfig - check_mount || return 7 + check_mount || error "client mount failed" - LDLM_MDS="`do_facet $SINGLEMDS lctl get_param -n ldlm_timeout`" - LDLM_OST1="`do_facet ost1 lctl get_param -n ldlm_timeout`" - LDLM_CLIENT="`do_facet client lctl get_param -n ldlm_timeout`" + local LDLM_MDS="$(do_facet $SINGLEMDS lctl get_param -n ldlm_timeout)" + local LDLM_OST1="$(do_facet ost1 lctl get_param -n ldlm_timeout)" + local LDLM_CLIENT="$(do_facet client lctl get_param -n ldlm_timeout)" - if [ $LDLM_MDS -ne $LDLM_OST1 ] || [ $LDLM_MDS -ne $LDLM_CLIENT ]; then + if [ $LDLM_MDS -ne $LDLM_OST1 -o $LDLM_MDS -ne $LDLM_CLIENT ]; then error "Different LDLM_TIMEOUT:$LDLM_MDS $LDLM_OST1 $LDLM_CLIENT" fi if [ $LDLM_MDS -ne $((LOCAL_TIMEOUT - 1)) ]; then - error "LDLM_TIMEOUT($LDLM_MDS) is not correct" + error "LDLM_TIMEOUT($LDLM_MDS) is not $((LOCAL_TIMEOUT - 1))" fi - cleanup || return $? + cleanup || error "cleanup failed" LDLM_TIMEOUT=$ldlm_timeout_orig TIMEOUT=$timeout_orig } -run_test 49 "check PARAM_SYS_LDLM_TIMEOUT option of MKFS.LUSTRE" +run_test 49b "check PARAM_SYS_LDLM_TIMEOUT option of mkfs.lustre" lazystatfs() { # Test both statfs and lfs df and fail if either one fails @@ -3451,7 +3469,7 @@ test_58() { # bug 22658 # remove all files from the OBJECTS dir do_facet $SINGLEMDS "mount -t ldiskfs $opts $devname $MNTDIR" do_facet $SINGLEMDS "find $MNTDIR/O/1/d* -type f -delete" - do_facet $SINGLEMDS "umount $MNTDIR" + do_facet $SINGLEMDS "umount -d $MNTDIR" # restart MDS with missing llog files start_mds do_facet mds "lctl set_param fail_loc=0" @@ -3677,7 +3695,7 @@ test_65() { # LU-2237 do_facet $SINGLEMDS \ "mount -t $(facet_fstype $SINGLEMDS) $opts $devname $brpt" do_facet $SINGLEMDS "rm -f ${brpt}/last_rcvd" - do_facet $SINGLEMDS "umount $brpt" + do_facet $SINGLEMDS "umount -d $brpt" # restart MDS, the "last_rcvd" file should be recreated. start_mds || error "fail to restart the MDS" @@ -3816,10 +3834,105 @@ test_67() { #LU-2950 } run_test 67 "test routes conversion and configuration" +test_68() { + local fid + local seq + local START + local END + + [ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.4.53) ] || + { skip "Need MDS version at least 2.4.53"; return 0; } + + umount_client $MOUNT || error "umount client failed" + + start_mdt 1 || error "MDT start failed" + start_ost + + # START-END - the sequences we'll be reserving + START=$(do_facet $SINGLEMDS \ + lctl get_param -n seq.ctl*.space | awk -F'[[ ]' '{print $2}') + END=$((START + (1 << 30))) + do_facet $SINGLEMDS \ + lctl set_param seq.ctl*.fldb="[$START-$END\):0:mdt" + + # reset the sequences MDT0000 has already assigned + do_facet $SINGLEMDS \ + lctl set_param seq.srv*MDT0000.space=clear + + # remount to let the client allocate new sequence + mount_client $MOUNT || error "mount client failed" + + touch $DIR/$tfile + do_facet $SINGLEMDS \ + lctl get_param seq.srv*MDT0000.space + $LFS path2fid $DIR/$tfile + + local old_ifs="$IFS" + IFS='[:]' + fid=($($LFS path2fid $DIR/$tfile)) + IFS="$old_ifs" + let seq=${fid[1]} + + if [[ $seq < $END ]]; then + error "used reserved sequence $seq?" + fi + cleanup || return $? +} +run_test 68 "be able to reserve specific sequences in FLDB" + +test_69() { + local server_version=$(lustre_version_code $SINGLEMDS) + + [[ $server_version -lt $(version_code 2.4.2) ]] && + skip "Need MDS version at least 2.4.2" && return + + [[ $server_version -ge $(version_code 2.4.50) ]] && + [[ $server_version -lt $(version_code 2.5.0) ]] && + skip "Need MDS version at least 2.5.0" && return + + setup + + # use OST0000 since it probably has the most creations + local OSTNAME=$(ostname_from_index 0) + local mdtosc_proc1=$(get_mdtosc_proc_path mds1 $OSTNAME) + local last_id=$(do_facet mds1 lctl get_param -n \ + osc.$mdtosc_proc1.prealloc_last_id) + + # Want to have OST LAST_ID over 1.5 * OST_MAX_PRECREATE to + # verify that the LAST_ID recovery is working properly. If + # not, then the OST will refuse to allow the MDS connect + # because the LAST_ID value is too different from the MDS + #define OST_MAX_PRECREATE=20000 + local num_create=$((20000 * 5)) + + mkdir -p $DIR/$tdir + $LFS setstripe -i 0 $DIR/$tdir + createmany -o $DIR/$tdir/$tfile- $num_create + # delete all of the files with objects on OST0 so the + # filesystem is not inconsistent later on + $LFS find $MOUNT --ost 0 | xargs rm + + stop_ost || error "OST0 stop failure" + add ost1 $(mkfs_opts ost1 $(ostdevname 1)) --reformat --replace \ + $(ostdevname 1) $(ostvdevname 1) || + error "reformat and replace $ostdev failed" + start_ost || error "OST0 restart failure" + wait_osc_import_state mds ost FULL + + touch $DIR/$tdir/$tfile-last || error "create file after reformat" + local idx=$($LFS getstripe -i $DIR/$tdir/$tfile-last) + [ $idx -ne 0 ] && error "$DIR/$tdir/$tfile-last on $idx not 0" || true + + cleanup +} +run_test 69 "replace an OST with the same index" + test_70a() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return local MDTIDX=1 + cleanup + start_mdt 1 || error "MDT0 start fail" start_ost || error "OST0 start fail" @@ -4216,11 +4329,199 @@ test_76() { } run_test 76 "set permanent params set_param -P" +test_77() { # LU-3445 + local server_version=$(lustre_version_code $SINGLEMDS) + + [[ $server_version -ge $(version_code 2.2.60) ]] && + [[ $server_version -le $(version_code 2.4.0) ]] && + skip "Need MDS version < 2.2.60 or > 2.4.0" && return + + if [[ -z "$fs2ost_DEV" || -z "$fs2mds_DEV" ]]; then + is_blkdev $SINGLEMDS $(mdsdevname ${SINGLEMDS//mds/}) && + skip_env "mixed loopback and real device not working" && return + fi + + local fs2mdsdev=$(mdsdevname 1_2) + local fs2ostdev=$(ostdevname 1_2) + local fs2mdsvdev=$(mdsvdevname 1_2) + local fs2ostvdev=$(ostvdevname 1_2) + local fsname=test1234 + local mgsnid + local failnid="$(h2$NETTYPE 1.2.3.4),$(h2$NETTYPE 4.3.2.1)" + + add fs2mds $(mkfs_opts mds1 $fs2mdsdev) --mgs --fsname=$fsname \ + --reformat $fs2mdsdev $fs2mdsvdev || error "add fs2mds failed" + start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_fs2 EXIT INT || + error "start fs2mds failed" + + mgsnid=$(do_facet fs2mds $LCTL list_nids | xargs | tr ' ' ,) + [[ $mgsnid = *,* ]] || mgsnid+=",$mgsnid" + + add fs2ost $(mkfs_opts ost1 $fs2ostdev) --mgsnode=$mgsnid \ + --failnode=$failnid --fsname=$fsname \ + --reformat $fs2ostdev $fs2ostvdev || + error "add fs2ost failed" + start fs2ost $fs2ostdev $OST_MOUNT_OPTS || error "start fs2ost failed" + + mkdir -p $MOUNT2 + mount -t lustre $mgsnid:/$fsname $MOUNT2 || error "mount $MOUNT2 failed" + DIR=$MOUNT2 MOUNT=$MOUNT2 check_mount || error "check $MOUNT2 failed" + cleanup_fs2 +} +run_test 77 "comma-separated MGS NIDs and failover node NIDs" + +test_78() { + [[ $(facet_fstype $SINGLEMDS) != ldiskfs || + $(facet_fstype ost1) != ldiskfs ]] && + skip "only applicable to ldiskfs-based MDTs and OSTs" && return + + # reformat the Lustre filesystem with a smaller size + local saved_MDSSIZE=$MDSSIZE + local saved_OSTSIZE=$OSTSIZE + MDSSIZE=$((MDSSIZE - 20000)) + OSTSIZE=$((OSTSIZE - 20000)) + reformat || error "(1) reformat Lustre filesystem failed" + MDSSIZE=$saved_MDSSIZE + OSTSIZE=$saved_OSTSIZE + + # mount the Lustre filesystem + setup_noconfig || error "(2) setup Lustre filesystem failed" + + # create some files + log "create test files" + local i + local file + local num_files=100 + mkdir -p $MOUNT/$tdir || error "(3) mkdir $MOUNT/$tdir failed" + for i in $(seq $num_files); do + file=$MOUNT/$tdir/$tfile-$i + dd if=/dev/urandom of=$file count=1 bs=1M || + error "(4) create $file failed" + done + + # unmount the Lustre filesystem + cleanup || error "(5) cleanup Lustre filesystem failed" + + # run e2fsck on the MDT and OST devices + local mds_host=$(facet_active_host $SINGLEMDS) + local ost_host=$(facet_active_host ost1) + local mds_dev=$(mdsdevname ${SINGLEMDS//mds/}) + local ost_dev=$(ostdevname 1) + + run_e2fsck $mds_host $mds_dev "-y" + run_e2fsck $ost_host $ost_dev "-y" + + # get the original block count of the MDT and OST filesystems + local mds_orig_blks=$(get_block_count $SINGLEMDS $mds_dev) + local ost_orig_blks=$(get_block_count ost1 $ost_dev) + + # expand the MDT and OST filesystems to the device size + run_resize2fs $SINGLEMDS $mds_dev "" || error "expand $SINGLEMDS failed" + run_resize2fs ost1 $ost_dev "" || error "expand ost1 failed" + + # run e2fsck on the MDT and OST devices again + run_e2fsck $mds_host $mds_dev "-y" + run_e2fsck $ost_host $ost_dev "-y" + + # mount the Lustre filesystem + setup + + # check the files + log "check files after expanding the MDT and OST filesystems" + for i in $(seq $num_files); do + file=$MOUNT/$tdir/$tfile-$i + $CHECKSTAT -t file -s 1048576 $file || + error "(6) checkstat $file failed" + done + + # create more files + log "create more files after expanding the MDT and OST filesystems" + for i in $(seq $((num_files + 1)) $((num_files + 10))); do + file=$MOUNT/$tdir/$tfile-$i + dd if=/dev/urandom of=$file count=1 bs=1M || + error "(7) create $file failed" + done + + # unmount the Lustre filesystem + cleanup || error "(8) cleanup Lustre filesystem failed" + + # run e2fsck on the MDT and OST devices + run_e2fsck $mds_host $mds_dev "-y" + run_e2fsck $ost_host $ost_dev "-y" + + # get the maximum block count of the MDT and OST filesystems + local mds_max_blks=$(get_block_count $SINGLEMDS $mds_dev) + local ost_max_blks=$(get_block_count ost1 $ost_dev) + + # get the minimum block count of the MDT and OST filesystems + local mds_min_blks=$(run_resize2fs $SINGLEMDS $mds_dev "" "-P" 2>&1 | + grep minimum | sed -e 's/^.*filesystem: //g') + local ost_min_blks=$(run_resize2fs ost1 $ost_dev "" "-P" 2>&1 | + grep minimum | sed -e 's/^.*filesystem: //g') + + # shrink the MDT and OST filesystems to a smaller size + local shrunk=false + local new_blks + local base_blks + if [[ $mds_max_blks -gt $mds_min_blks && + $mds_max_blks -gt $mds_orig_blks ]]; then + [[ $mds_orig_blks -gt $mds_min_blks ]] && + base_blks=$mds_orig_blks || base_blks=$mds_min_blks + new_blks=$(( (mds_max_blks - base_blks) / 2 + base_blks )) + run_resize2fs $SINGLEMDS $mds_dev $new_blks || + error "shrink $SINGLEMDS to $new_blks failed" + shrunk=true + fi + + if [[ $ost_max_blks -gt $ost_min_blks && + $ost_max_blks -gt $ost_orig_blks ]]; then + [[ $ost_orig_blks -gt $ost_min_blks ]] && + base_blks=$ost_orig_blks || base_blks=$ost_min_blks + new_blks=$(( (ost_max_blks - base_blks) / 2 + base_blks )) + run_resize2fs ost1 $ost_dev $new_blks || + error "shrink ost1 to $new_blks failed" + shrunk=true + fi + + # check whether the MDT or OST filesystem was shrunk or not + if ! $shrunk; then + combined_mgs_mds || stop_mgs || error "(9) stop mgs failed" + reformat || error "(10) reformat Lustre filesystem failed" + return 0 + fi + + # run e2fsck on the MDT and OST devices again + run_e2fsck $mds_host $mds_dev "-y" + run_e2fsck $ost_host $ost_dev "-y" + + # mount the Lustre filesystem again + setup + + # check the files + log "check files after shrinking the MDT and OST filesystems" + for i in $(seq $((num_files + 10))); do + file=$MOUNT/$tdir/$tfile-$i + $CHECKSTAT -t file -s 1048576 $file || + error "(11) checkstat $file failed" + done + + # unmount and reformat the Lustre filesystem + cleanup || error "(12) cleanup Lustre filesystem failed" + combined_mgs_mds || stop_mgs || error "(13) stop mgs failed" + reformat || error "(14) reformat Lustre filesystem failed" +} +run_test 78 "run resize2fs on MDT and OST filesystems" + if ! combined_mgs_mds ; then stop mgs fi cleanup_gss +# restore the values of MDSSIZE and OSTSIZE +MDSSIZE=$STORED_MDSSIZE +OSTSIZE=$STORED_OSTSIZE +reformat + complete $SECONDS exit_status