X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fmds-survey.sh;h=93715b25ab1b8a57e1de4879b4014862a4cbb272;hb=e7d91d9b8cf291d638857b6bd904469b46d1273a;hp=9d98c699e6c3841ade95ae85f63feba5e9ae6573;hpb=a562648d49aca59a8f9af5c77a149a9fe69353e4;p=fs%2Flustre-release.git diff --git a/lustre/tests/mds-survey.sh b/lustre/tests/mds-survey.sh index 9d98c69..93715b2 100644 --- a/lustre/tests/mds-survey.sh +++ b/lustre/tests/mds-survey.sh @@ -1,49 +1,61 @@ #!/bin/bash -#set -x set -e -LUSTRE=${LUSTRE:-`dirname $0`/..} +LUSTRE=${LUSTRE:-$(dirname $0)/..} . $LUSTRE/tests/test-framework.sh init_test_env $@ -. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh} init_logging +ALWAYS_EXCEPT="$MDS_SURVEY_EXCEPT " + build_test_filter -check_and_setup_lustre -file_count=${file_count:-100000} +MDSSURVEY=${MDSSURVEY:-$(which mds-survey 2>/dev/null || true)} +[ -z ${MDSSURVEY} ] && skip_env "mds-survey not found" + +if [ "$MDS1_VERSION" -lt $(version_code 2.3.51) ]; then + skip "Need MDS version at least 2.3.51" +fi + +file_count=${file_count:-150000} dir_count=${dir_count:-4} thrhi=${thrhi:-8} thrlo=${thrlo:-1} [ "$SLOW" = no ] && { file_count=50000; dir_count=2; thrhi=4; } -# Skip these tests -ALWAYS_EXCEPT="$MDS_SURVEY_EXCEPT" +check_and_setup_lustre -MDSSURVEY=${MDSSURVEY:-$(which mds-survey 2>/dev/null || true)} -if [ -z ${MDSSURVEY} ]; then - skip_env "mds-survey not found" && exit -fi +adjust_inode() { + local require_inode=0 + local avail_mdt_inode=0 + local avail_ost_inode=0 -# check for available inode, reduce to fit -inode_per_thr=$((dir_count * file_count)) -require_inode=$((inode_per_thr * thrhi * 11/10)) -avail_inode=$($LFS df -i $MOUNT | grep "filesystem summary:" | \ - awk '{print $5}') - -while [ $require_inode -ge $avail_inode ]; do - echo "Require $require_inode inode to run, only have $avail_inode" - # reduce 20% - file_count=$((file_count * 8 / 10)) - inode_per_thr=$((dir_count * file_count)) - require_inode=$((inode_per_thr * thrhi * 11 / 10)) -done - -if [ $require_inode -eq 0 ]; then - skip_env "Not enough inode to run" && exit -fi + require_inode=$((file_count * thrhi)) + # get available inode for mdt + avail_mdt_inode=$(mdt_free_inodes 0) + avail_mdt_inode=$((avail_mdt_inode * 9 / 10)) + + # get available inode for ost + for i in $($LFS df -i | grep ${FSNAME}-OST | awk '{print $4}'); do + avail_ost_inode=$((avail_ost_inode + i)) + done + avail_ost_inode=$((avail_ost_inode * 9 / 10)) + + ((require_inode > avail_mdt_inode)) && require_inode=$avail_mdt_inode + ((require_inode > avail_ost_inode)) && require_inode=$avail_ost_inode + + if ((require_inode == 0)); then + error "Fail to get the inode count" + fi + # convert it back to per thread inode + require_inode=$((require_inode / thrhi)) + + echo $require_inode +} + +file_count=$(adjust_inode) ost_count=$($LCTL dl | grep -c osc) # first unmount all the lustre clients @@ -51,47 +63,71 @@ cleanup_mount $MOUNT cleanup_mount $MOUNT2 get_target() { - local mds=$(facet_host $SINGLEMDS) - echo $(do_nodes $mds 'lctl dl' | \ - awk "{if (\$2 == \"UP\" && \$3 == \"mdt\") {print \$4}}") + local node=$1 + local mdt + local mdts + local target + + mdts=$(do_node $node "$LCTL dl" | + awk "{if (\$2 == \"UP\" && \$3 == \"mdt\") {print \$4}}") + + for mdt in $mdts; do + target+="${target:+ }$node:$mdt" + done + + echo -n $target +} + +get_targets() { + local targets + local node + + for node in $(mdts_nodes); do + targets+="${targets:+ }$(get_target $node)" + done + + echo -n $targets } mds_survey_run() { - local layer=${1:-mdd} - local stripe_count=${2:-0} - local mds=$(facet_host $SINGLEMDS) - - rm -f ${TMP}/mds_survey* - - local target=$(get_target) - local cmd1="file_count=$file_count thrlo=$thrlo thrhi=$thrhi" - local cmd2="dir_count=$dir_count layer=$layer stripe_count=$stripe_count" - local cmd3="rslt_loc=${TMP} targets=\"$mds:$target\" $MDSSURVEY" - local cmd="$cmd1 $cmd2 $cmd3" - - echo + $cmd - eval $cmd || error "mds-survey failed" - cat ${TMP}/mds_survey* - rm -f ${TMP}/mds_survey* + local layer=${1:-mdd} + local stripe_count=${2:-0} + local rc=0 + + rm -f ${TMP}/mds_survey* + + local cmd="file_count=$file_count thrlo=$thrlo thrhi=$thrhi" + cmd+=" dir_count=$dir_count layer=$layer stripe_count=$stripe_count" + cmd+=" rslt_loc=${TMP} targets=\"$(get_targets)\" $MDSSURVEY" + + trap cleanup_echo_devs EXIT ERR + + echo + $cmd + eval $cmd || rc=$? + cat ${TMP}/mds_survey* + rm -f ${TMP}/mds_survey* + ((rc == 0)) || error "mds-survey failed" } test_1() { - mds_survey_run "mdd" "0" + mds_survey_run "mdd" "0" } run_test 1 "Metadata survey with zero-stripe" test_2() { - if [ $ost_count -eq 0 ]; then - skip_env "Need to mount OST to test" && return - fi - mds_survey_run "mdd" "1" + local mdscount=$(get_node_count "$(mdts_nodes)") + + [ $mdscount -gt 1 ] && skip_env "Only run this test on single MDS" + [ $ost_count -eq 0 ] && skip_env "Need to mount OST to test" + + mds_survey_run "mdd" "1" } run_test 2 "Metadata survey with stripe_count = 1" # remount the clients restore_mount $MOUNT -complete $(basename $0) $SECONDS +complete $SECONDS cleanup_echo_devs check_and_cleanup_lustre exit_status