From: Andreas Dilger Date: Wed, 3 Oct 2012 21:41:07 +0000 (-0600) Subject: LU-790 tests: clean up lustre version checking X-Git-Tag: 2.7.53~22 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=2a223541d299bc8287472a671152ee3ded3b7b86 LU-790 tests: clean up lustre version checking Since commit 48bad5d9db9baa7bca093de5c54294adf1cf8303, the check in sanity-scrub.sh to verify if the MDS had a new enough Lustre version was being run before modules are loaded, if sanity-scrub.sh was run stand-alone. In addition to using "lctl get_param version" to get the version, use "lctl lustre_build_version" or "lctl --version", which will always work, even if the modules are not loaded on the node. This also avoids the need to load the modules just to find that the test should not be run. While cleaning up this code, move the lustre_version_code() earlier in test-framework.sh, so that it is declared before calling functions, and is co-located with the other version checking code. Not strictly necessary for bash scripts, but nicer when reading the code. Fix test regressions in sanity.sh test_48[ab] since commit 13b269ab77 that incorrectly used a full path for test_mkdir() opertations instead of using a relative filename as the test originally intended. Also remove the obsolete check_kernel_version() code, which was only used when we had a patched client kernel, which is no longer the case, and remove a few overly verbose logging lines from tests. Signed-off-by: Andreas Dilger Change-Id: I8a8aec11370d395dcb4f4b250001ecdb40500c1e Reviewed-on: http://review.whamcloud.com/4173 Tested-by: Jenkins Tested-by: Maloo Reviewed-by: Jian Yu Reviewed-by: Emoly Liu Reviewed-by: James Nunez Reviewed-by: Oleg Drokin --- diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 0bbfe69..0d4dad9 100644 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -80,17 +80,6 @@ setup() { echo "done" } -check_kernel_version() { - WANT_VER=$1 - GOT_VER=$(lctl get_param -n version | awk '/kernel:/ {print $2}') - case $GOT_VER in - patchless|patchless_client) return 0;; - *) [ $GOT_VER -ge $WANT_VER ] && return 0 ;; - esac - log "test needs at least kernel version $WANT_VER, running $GOT_VER" - return 1 -} - check_swap_layouts_support() { $LCTL get_param -n llite.*.sbi_flags | grep -q layout || @@ -98,11 +87,6 @@ check_swap_layouts_support() return 1 } -if [ "$ONLY" == "cleanup" ]; then - sh llmountcleanup.sh - exit 0 -fi - check_and_setup_lustre DIR=${DIR:-$MOUNT} @@ -955,7 +939,6 @@ test_24n() { run_test 24n "Statting the old file after renaming (Posix rename 2)" test_24o() { - check_kernel_version 37 || return 0 test_mkdir -p $DIR/d24o rename_many -s random -v -n 10 $DIR/d24o } @@ -2181,7 +2164,6 @@ test_31d() { run_test 31d "remove of open directory =========================" test_31e() { # bug 2904 - check_kernel_version 34 || return 0 openfilleddirunlink $DIR/d31e || error } run_test 31e "remove of open non-empty directory ===============" @@ -3876,19 +3858,14 @@ test_48a() { # bug 2399 [ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.3.63) ] && skip "MDS prior to 2.3.63 handle ZFS dir .. incorrectly" && return - check_kernel_version 34 || return 0 - test_mkdir -p $DIR/$tdir + test_mkdir $DIR/$tdir cd $DIR/$tdir - mv $DIR/$tdir $DIR/d48.new || error "move directory failed" + mv $DIR/$tdir $DIR/$tdir.new || error "move directory failed" test_mkdir $DIR/$tdir || error "recreate directory failed" touch foo || error "'touch foo' failed after recreating cwd" - test_mkdir $DIR/$tdir/bar || - error "'mkdir foo' failed after recreating cwd" - if check_kernel_version 44; then - touch .foo || error "'touch .foo' failed after recreating cwd" - test_mkdir $DIR/$tdir/.bar || - error "'mkdir .foo' failed after recreating cwd" - fi + test_mkdir bar || error "'mkdir foo' failed after recreating cwd" + touch .foo || error "'touch .foo' failed after recreating cwd" + test_mkdir .bar || error "'mkdir .foo' failed after recreating cwd" ls . > /dev/null || error "'ls .' failed after recreating cwd" ls .. > /dev/null || error "'ls ..' failed after removing cwd" cd . || error "'cd .' failed after recreating cwd" @@ -3900,23 +3877,18 @@ test_48a() { # bug 2399 run_test 48a "Access renamed working dir (should return errors)=" test_48b() { # bug 2399 - check_kernel_version 34 || return 0 rm -rf $DIR/$tdir - test_mkdir -p $DIR/$tdir + test_mkdir $DIR/$tdir cd $DIR/$tdir rmdir $DIR/$tdir || error "remove cwd $DIR/$tdir failed" touch foo && error "'touch foo' worked after removing cwd" - test_mkdir $DIR/$tdir/foo && - error "'mkdir foo' worked after removing cwd" - if check_kernel_version 44; then - touch .foo && error "'touch .foo' worked after removing cwd" - test_mkdir $DIR/$tdir/.foo && - error "'mkdir .foo' worked after removing cwd" - fi + test_mkdir foo && error "'mkdir foo' worked after removing cwd" + touch .foo && error "'touch .foo' worked after removing cwd" + test_mkdir .foo && error "'mkdir .foo' worked after removing cwd" ls . > /dev/null && error "'ls .' worked after removing cwd" ls .. > /dev/null || error "'ls ..' failed after removing cwd" is_patchless || ( cd . && error "'cd .' worked after removing cwd" ) - test_mkdir $DIR/$tdir/. && error "'mkdir .' worked after removing cwd" + test_mkdir . && error "'mkdir .' worked after removing cwd" rmdir . && error "'rmdir .' worked after removing cwd" ln -s . foo && error "'ln -s .' worked after removing cwd" cd .. || echo "'cd ..' failed after removing cwd `pwd`" #bug 3517 @@ -3924,7 +3896,6 @@ test_48b() { # bug 2399 run_test 48b "Access removed working dir (should return errors)=" test_48c() { # bug 2350 - check_kernel_version 36 || return 0 #lctl set_param debug=-1 #set -vx rm -rf $DIR/$tdir @@ -3933,10 +3904,8 @@ test_48c() { # bug 2350 $TRACE rmdir $DIR/$tdir/dir || error "remove cwd $DIR/$tdir/dir failed" $TRACE touch foo && error "touch foo worked after removing cwd" $TRACE test_mkdir foo && error "'mkdir foo' worked after removing cwd" - if check_kernel_version 44; then - touch .foo && error "touch .foo worked after removing cwd" - test_mkdir .foo && error "mkdir .foo worked after removing cwd" - fi + touch .foo && error "touch .foo worked after removing cwd" + test_mkdir .foo && error "mkdir .foo worked after removing cwd" $TRACE ls . && error "'ls .' worked after removing cwd" $TRACE ls .. || error "'ls ..' failed after removing cwd" is_patchless || ( $TRACE cd . && @@ -3949,7 +3918,6 @@ test_48c() { # bug 2350 run_test 48c "Access removed working subdir (should return errors)" test_48d() { # bug 2350 - check_kernel_version 36 || return 0 #lctl set_param debug=-1 #set -vx rm -rf $DIR/$tdir @@ -3959,11 +3927,8 @@ test_48d() { # bug 2350 $TRACE rmdir $DIR/$tdir || error "remove parent $DIR/$tdir failed" $TRACE touch foo && error "'touch foo' worked after removing parent" $TRACE test_mkdir foo && error "mkdir foo worked after removing parent" - if check_kernel_version 44; then - touch .foo && error "'touch .foo' worked after removing parent" - test_mkdir .foo && - error "mkdir .foo worked after removing parent" - fi + touch .foo && error "'touch .foo' worked after removing parent" + test_mkdir .foo && error "mkdir .foo worked after removing parent" $TRACE ls . && error "'ls .' worked after removing parent" $TRACE ls .. && error "'ls ..' worked after removing parent" is_patchless || ( $TRACE cd . && @@ -3977,7 +3942,6 @@ test_48d() { # bug 2350 run_test 48d "Access removed parent subdir (should return errors)" test_48e() { # bug 4134 - check_kernel_version 41 || return 0 #lctl set_param debug=-1 #set -vx rm -rf $DIR/$tdir @@ -4367,7 +4331,6 @@ test_54d() { run_test 54d "fifo device works in lustre ======================" test_54e() { - check_kernel_version 46 || return 0 f="$DIR/f54e" string="aaaaaa" cp -aL /dev/console $f diff --git a/lustre/tests/sanityn.sh b/lustre/tests/sanityn.sh index b170ac7..d086e6d 100644 --- a/lustre/tests/sanityn.sh +++ b/lustre/tests/sanityn.sh @@ -2516,8 +2516,10 @@ test_55d() run_test 55d "rename file vs link" test_60() { - [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.3.0) ]] || - { skip "Need MDS version at least 2.3.0"; return; } + local MDSVER=$(lustre_build_version $SINGLEMDS) + [ $(version_code $MDSVER) -lt $(version_code 2.3.0) ] && + skip "MDS version $MDSVER must be >= 2.3.0" && return 0 + # Create a file test_mkdir -p $DIR1/$tdir file1=$DIR1/$tdir/file diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh index a04e20e..c90d3dc 100755 --- a/lustre/tests/test-framework.sh +++ b/lustre/tests/test-framework.sh @@ -354,18 +354,57 @@ check_cpt_number() { fi } +# Return a numeric version code based on a version string. The version +# code is useful for comparison two version strings to see which is newer. version_code() { - # split arguments like "1.8.6-wc3" into "1", "8", "6", "wc3" - eval set -- $(tr "[:punct:]" " " <<< $*) + # split arguments like "1.8.6-wc3" into "1", "8", "6", "wc3" + eval set -- $(tr "[:punct:]" " " <<< $*) - echo -n "$((($1 << 16) | ($2 << 8) | $3))" + echo -n "$((($1 << 16) | ($2 << 8) | $3))" } export LINUX_VERSION=$(uname -r | sed -e "s/\([0-9]*\.[0-9]*\.[0-9]*\).*/\1/") export LINUX_VERSION_CODE=$(version_code ${LINUX_VERSION//\./ }) +# Report the Lustre build version string (e.g. 1.8.7.3 or 2.4.1). +# +# usage: lustre_build_version +# +# All Lustre versions support "lctl get_param" to report the version of the +# code running in the kernel (what our tests are interested in), but it +# doesn't work without modules loaded. If that fails, use "lctl version" +# instead, which is easy to parse and works without the kernel modules, +# but was only added in 2.6.50. If that also fails, fall back to calling +# "lctl lustre_build_version" which prints either (or both) the userspace +# and kernel build versions, but is deprecated and should eventually be +# removed. +# +# output: prints version string to stdout in dotted-decimal format +lustre_build_version() { + local facet=${1:-client} + + # lustre: 2.6.52 + # kernel: patchless_client + # build: v2_6_92_0-gadb3ee4-2.6.32-431.29.2.el6_lustre.x86_64 + local VER=$(do_facet $facet $LCTL get_param -n version 2> /dev/null | + awk '/lustre: / { print $2 }') + # lctl 2.6.50 + [ -z "$VER" ] && VER=$(do_facet $facet $LCTL --version 2>/dev/null | + awk '{ print $2 }') + # Lustre version: 2.5.3-gfcfd782-CHANGED-2.6.32.26-175.fc12.x86_64 + # lctl version: 2.5.3-gfcfd782-CHANGED-2.6.32.26-175.fc12.x86_64 + [ -z "$VER" ] && VER=$(do_facet $facet $LCTL lustre_build_version | + awk '/version:/ { print $3; exit; }') + sed -e 's/^v//' -e 's/-.*//' -e 's/_/./g' <<<$VER +} + +# Report the Lustre numeric build version code for the supplied facet. +lustre_version_code() { + version_code $(lustre_build_version $1) +} + module_loaded () { - /sbin/lsmod | grep -q "^\<$1\>" + /sbin/lsmod | grep -q "^\<$1\>" } # Load a module on the system where this is running. @@ -381,12 +420,12 @@ load_module() { EXT=".ko" module=$1 shift - BASE=`basename $module $EXT` + BASE=$(basename $module $EXT) module_loaded ${BASE} && return - # If no module arguments were passed, get them from $MODOPTS_, else from - # modprobe.conf + # If no module arguments were passed, get them from $MODOPTS_, + # else from modprobe.conf if [ $# -eq 0 ]; then # $MODOPTS_; we could use associative arrays, but that's not in # Bash until 4.x, so we resort to eval. @@ -2762,13 +2801,7 @@ facet_active() { } facet_active_host() { - local facet=$1 - local active=`facet_active $facet` - if [ "$facet" == client ]; then - echo $HOSTNAME - else - echo `facet_host $active` - fi + facet_host $(facet_active $1) } # Get the passive failover partner host of facet. @@ -2949,11 +2982,11 @@ do_nodes() { } do_facet() { - local facet=$1 - shift - local HOST=`facet_active_host $facet` - [ -z $HOST ] && echo No host defined for facet ${facet} && exit 1 - do_node $HOST "$@" + local facet=$1 + shift + local HOST=$(facet_active_host $facet) + [ -z $HOST ] && echo "No host defined for facet ${facet}" && exit 1 + do_node $HOST "$@" } # Function: do_facet_random_file $FACET $FILE $SIZE @@ -4876,7 +4909,7 @@ run_test() { log() { echo "$*" >&2 - module_loaded lnet || load_modules + load_module ../libcfs/libcfs/libcfs local MSG="$*" # Get rid of ' @@ -5713,17 +5746,7 @@ convert_facet2label() { } get_clientosc_proc_path() { - echo "${1}-osc-*" -} - -get_lustre_version () { - local facet=${1:-"$SINGLEMDS"} - do_facet $facet $LCTL get_param -n version | awk '/^lustre:/ {print $2}' -} - -lustre_version_code() { - local facet=${1:-"$SINGLEMDS"} - version_code $(get_lustre_version $1) + echo "${1}-osc-*" } # If the 2.0 MDS was mounted on 1.8 device, then the OSC and LOV names diff --git a/lustre/tests/yaml.sh b/lustre/tests/yaml.sh index 7269cb8..1fcf3ce 100644 --- a/lustre/tests/yaml.sh +++ b/lustre/tests/yaml.sh @@ -89,10 +89,10 @@ release() { } yml_build_info() { - local TEST_DISTRO=$(release) - local LUSTRE_VERSION=$(lctl lustre_build_version | awk '/Lustre version:/ {print $3}') - local LUSTRE_BUILD=${LUSTRE_BUILD_SOURCE:-$(sed 's/-.*//' <<<$LUSTRE_VERSION)} - local FILE_SYSTEM=$(node_fstypes $(hostname -s)) + local TEST_DISTRO=$(release) + local LUSTRE_VERSION=$(lustre_build_version) + local LUSTRE_BUILD=${LUSTRE_BUILD_SOURCE:-$LUSTRE_VERSION} + local FILE_SYSTEM=$(node_fstypes $(hostname -s)) cat <