X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fconf-sanity.sh;h=546780d939e3d4a7bfa30193a68d3988896f03ba;hb=11317196203c26f8c9e4d2a8261859b1c7a76c9d;hp=93dfacbc2af948b3ed4c5c14354d4c1cec12a01c;hpb=ff353fef1eca3cc4d4b492b9591c819c00f4e8dc;p=fs%2Flustre-release.git diff --git a/lustre/tests/conf-sanity.sh b/lustre/tests/conf-sanity.sh index 93dfacb..546780d 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 @@ -75,8 +75,8 @@ if [[ "$LDISKFS_MKFS_OPTS" != *lazy_itable_init* ]]; then fi [ $(facet_fstype $SINGLEMDS) = "zfs" ] && -# bug number for skipped test: LU-2778 LU-2059 - ALWAYS_EXCEPT="$ALWAYS_EXCEPT 57b 50h" +# bug number for skipped test: LU-2778 LU-2059 LU-4444 + ALWAYS_EXCEPT="$ALWAYS_EXCEPT 57b 50h 69" init_logging @@ -84,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 @@ -1062,6 +1062,78 @@ test_28() { } run_test 28 "permanent parameter setting" +test_28a() { # LU-4221 + [[ $(lustre_version_code ost1) -ge $(version_code 2.5.52) ]] || + { skip "Need OST version at least 2.5.52" && return 0; } + [ "$(facet_fstype ost1)" = "zfs" ] && + skip "LU-4221: no such proc params for ZFS OSTs" && return + + local name + local param + local cmd + local old + local new + local device="$FSNAME-OST0000" + + setup + + # In this test we will set three kinds of proc parameters with + # lctl conf_param: + # 1. the ones moved from the OFD to the OSD, and only their + # symlinks kept in obdfilter + # 2. non-symlink ones in the OFD + # 3. non-symlink ones in the OSD + + # Check 1. + # prepare a symlink parameter in the OFD + name="writethrough_cache_enable" + param="$device.ost.$name" + cmd="$LCTL get_param -n obdfilter.$device.$name" + + # conf_param the symlink parameter in the OFD + old=$(do_facet ost1 $cmd) + new=$(((old + 1) % 2)) + set_conf_param_and_check ost1 "$cmd" "$param" $new || + error "lctl conf_param $device.ost.$param=$new failed" + + # conf_param the target parameter in the OSD + param="$device.osd.$name" + cmd="$LCTL get_param -n osd-*.$device.$name" + set_conf_param_and_check ost1 "$cmd" "$param" $old || + error "lctl conf_param $device.osd.$param=$old failed" + + # Check 2. + # prepare a non-symlink parameter in the OFD + name="client_cache_seconds" + param="$device.ost.$name" + cmd="$LCTL get_param -n obdfilter.$device.$name" + + # conf_param the parameter in the OFD + old=$(do_facet ost1 $cmd) + new=$((old * 2)) + set_conf_param_and_check ost1 "$cmd" "$param" $new || + error "lctl conf_param $device.ost.$param=$new failed" + set_conf_param_and_check ost1 "$cmd" "$param" $old || + error "lctl conf_param $device.ost.$param=$old failed" + + # Check 3. + # prepare a non-symlink parameter in the OSD + name="lma_self_repair" + param="$device.osd.$name" + cmd="$LCTL get_param -n osd-*.$device.$name" + + # conf_param the parameter in the OSD + old=$(do_facet ost1 $cmd) + new=$(((old + 1) % 2)) + set_conf_param_and_check ost1 "$cmd" "$param" $new || + error "lctl conf_param $device.osd.$param=$new failed" + set_conf_param_and_check ost1 "$cmd" "$param" $old || + error "lctl conf_param $device.osd.$param=$old failed" + + cleanup +} +run_test 28a "set symlink parameters permanently with conf_param" + test_29() { [ "$OSTCOUNT" -lt "2" ] && skip_env "$OSTCOUNT < 2, skipping" && return setup > /dev/null 2>&1 @@ -1243,7 +1315,9 @@ test_32newtarball() { count=$(($T32_BLIMIT / 1024 / 2)) chown $T32_QID.$T32_QID $tmp/src/t32_qf_old - formatall + # format ost with comma-separated NIDs to verify LU-4460 + local failnid="$(h2$NETTYPE 1.2.3.4),$(h2$NETTYPE 4.3.2.1)" + MGSNID="$MGSNID,$MGSNID" OSTOPT="--failnode=$failnid" formatall setupall @@ -1335,6 +1409,7 @@ t32_check() { t32_test_cleanup() { local tmp=$TMP/t32 + local fstype=$(facet_fstype $SINGLEMDS) local rc=$? if $shall_cleanup_lustre; then @@ -1352,6 +1427,10 @@ t32_test_cleanup() { $r rm -rf $tmp rm -rf $tmp + if [ $fstype == "zfs" ]; then + $r $ZPOOL destroy t32fs-mdt1 || rc=$? + $r $ZPOOL destroy t32fs-ost1 || rc=$? + fi return $rc } @@ -1391,16 +1470,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 } @@ -1510,6 +1593,8 @@ t32_test() { local nrpcs local list local fstype=$(facet_fstype $SINGLEMDS) + local mdt_dev=$tmp/mdt + local ost_dev=$tmp/ost trap 'trap - RETURN; t32_test_cleanup' RETURN @@ -1532,16 +1617,32 @@ t32_test() { local version=$(version_code $img_commit) [[ $version -gt $(version_code 2.4.0) ]] && ff_convert="no" + if [ $fstype == "zfs" ]; then + # import pool first + $r $ZPOOL import -f -d $tmp t32fs-mdt1 + $r $ZPOOL import -f -d $tmp t32fs-ost1 + mdt_dev=t32fs-mdt1/mdt1 + ost_dev=t32fs-ost1/ost1 + wait_update_facet $SINGLEMDS "$ZPOOL list | + awk '/^t32fs-mdt1/ { print \\\$1 }'" "t32fs-mdt1" || { + error_noexit "import zfs pool failed" + return 1 + } + fi + $r $LCTL set_param debug="$PTLDEBUG" - $r $TUNEFS --dryrun $tmp/mdt || { + $r $TUNEFS --dryrun $mdt_dev || { + $r losetup -a error_noexit "tunefs.lustre before mounting the MDT" return 1 } if [ "$writeconf" ]; then - mopts=loop,writeconf + mopts=writeconf if [ $fstype == "ldiskfs" ]; then - $r $TUNEFS --quota $tmp/mdt || { + mopts="loop,$mopts" + $r $TUNEFS --quota $mdt_dev || { + $r losetup -a error_noexit "Enable mdt quota feature" return 1 } @@ -1555,18 +1656,26 @@ t32_test() { local osthost=$(facet_active_host ost1) local ostnid=$(do_node $osthost $LCTL list_nids | head -1) - $r mount -t lustre -o loop,nosvc $tmp/mdt $tmp/mnt/mdt + mopts=nosvc + if [ $fstype == "ldiskfs" ]; then + mopts="loop,$mopts" + fi + $r mount -t lustre -o $mopts $mdt_dev $tmp/mnt/mdt $r lctl replace_nids $fsname-OST0000 $ostnid $r lctl replace_nids $fsname-MDT0000 $nid $r umount -d $tmp/mnt/mdt fi - mopts=loop,exclude=$fsname-OST0000 + mopts=exclude=$fsname-OST0000 + if [ $fstype == "ldiskfs" ]; then + mopts="loop,$mopts" + fi fi t32_wait_til_devices_gone $node - $r mount -t lustre -o $mopts $tmp/mdt $tmp/mnt/mdt || { + $r mount -t lustre -o $mopts $mdt_dev $tmp/mnt/mdt || { + $r losetup -a error_noexit "Mounting the MDT" return 1 } @@ -1610,22 +1719,27 @@ t32_test() { return 1 fi - $r $TUNEFS --dryrun $tmp/ost || { + $r $TUNEFS --dryrun $ost_dev || { error_noexit "tunefs.lustre before mounting the OST" return 1 } if [ "$writeconf" ]; then - mopts=loop,mgsnode=$nid,$writeconf + mopts=mgsnode=$nid,$writeconf if [ $fstype == "ldiskfs" ]; then - $r $TUNEFS --quota $tmp/ost || { + mopts="loop,$mopts" + $r $TUNEFS --quota $ost_dev || { + $r losetup -a error_noexit "Enable ost quota feature" return 1 } fi else - mopts=loop,mgsnode=$nid + mopts=mgsnode=$nid + if [ $fstype == "ldiskfs" ]; then + mopts="loop,$mopts" + fi fi - $r mount -t lustre -o $mopts $tmp/ost $tmp/mnt/ost || { + $r mount -t lustre -o $mopts $ost_dev $tmp/mnt/ost || { error_noexit "Mounting the OST" return 1 } @@ -1865,12 +1979,17 @@ t32_test() { } # mount a second time to make sure we didnt leave upgrade flag on - $r $TUNEFS --dryrun $tmp/mdt || { + $r $TUNEFS --dryrun $mdt_dev || { + $r losetup -a error_noexit "tunefs.lustre before remounting the MDT" return 1 } - $r mount -t lustre -o loop,exclude=$fsname-OST0000 $tmp/mdt \ - $tmp/mnt/mdt || { + + mopts=exclude=$fsname-OST0000 + if [ $fstype == "ldiskfs" ]; then + mopts="loop,$mopts" + fi + $r mount -t lustre -o $mopts $mdt_dev $tmp/mnt/mdt || { error_noexit "Remounting the MDT" return 1 } @@ -2726,7 +2845,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 @@ -2736,49 +2855,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 @@ -3163,7 +3293,13 @@ test_52() { do_node $ost1node 'mv '$objects' '${ost1mnt}'/lost+found' [ $? -eq 0 ] || { error "Unable to move objects"; return 14; } + # recover objects dry-run + echo "ll_recover_lost_found_objs dry_run" + do_node $ost1node "ll_recover_lost_found_objs -n -d $ost1mnt/O" + [ $? -eq 0 ] || { error "ll_recover_lost_found_objs failed"; return 15; } + # recover objects + echo "ll_recover_lost_found_objs fix run" do_node $ost1node "ll_recover_lost_found_objs -d $ost1mnt/lost+found" [ $? -eq 0 ] || { error "ll_recover_lost_found_objs failed"; return 15; } @@ -3861,6 +3997,15 @@ test_68() { 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 @@ -3874,27 +4019,30 @@ test_69() { # 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 * 3/2 - $last_id + 100)) + local num_create=$((20000 * 5)) - mkdir $DIR/$tdir + mkdir -p $DIR/$tdir $LFS setstripe -i 0 $DIR/$tdir - createmany $DIR/$tdir/$tfile- $num_create + createmany -o $DIR/$tdir/$tfile- $num_create || + error "createmany: failed to create $num_create files: $?" # delete all of the files with objects on OST0 so the # filesystem is not inconsistent later on - $LFS find $MOUNT --index 0 -print0 | xargs -0 unlink + $LFS find $MOUNT --ost 0 | xargs rm stop_ost || error "OST0 stop failure" - add ost1 $(mkfs_opts ost1 $ostdev) --reformat --replace $ostdev || + 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 -c $DIR/$tdir/$tfile-last) + 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 68 "replace an OST with the same index" +run_test 69 "replace an OST with the same index" test_70a() { [ $MDSCOUNT -lt 2 ] && skip "needs >= 2 MDTs" && return