From 722b0ddc8689072c705d10411440961aaf0d57eb Mon Sep 17 00:00:00 2001 From: grev Date: Wed, 2 Dec 2009 07:20:50 +0000 Subject: [PATCH] b=20863 i=Brian i=Manoj cleanup pools created --- lustre/tests/ost-pools.sh | 39 ++++++++------------ lustre/tests/sanity.sh | 37 ++++++++++--------- lustre/tests/test-framework.sh | 82 ++++++++++++++++++++++++++++++++++++++---- 3 files changed, 108 insertions(+), 50 deletions(-) diff --git a/lustre/tests/ost-pools.sh b/lustre/tests/ost-pools.sh index d646123..f9baaa5 100644 --- a/lustre/tests/ost-pools.sh +++ b/lustre/tests/ost-pools.sh @@ -173,18 +173,6 @@ check_dir_not_in_pool() { fi } -create_pool() { - do_facet $SINGLEMDS lctl pool_new $FSNAME.$1 - local RC=$? - # get param should return err until pool is created - [[ $RC -ne 0 ]] && return $RC - - wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$1 \ - 2>/dev/null || echo foo" "" || RC=1 - [[ $RC -ne 0 ]] && error "pool_new failed" - return $RC -} - drain_pool() { pool=$1 wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$pool" ""\ @@ -208,7 +196,7 @@ add_pool() { } create_pool_nofail() { - create_pool $1 + create_pool $FSNAME.$1 if [[ $? != 0 ]] then error "Pool creation of $1 failed" @@ -216,7 +204,7 @@ create_pool_nofail() { } create_pool_fail() { - create_pool $1 + create_pool $FSNAME.$1 if [[ $? == 0 ]] then error "Pool creation of $1 succeeded; should have failed" @@ -242,8 +230,9 @@ remote_mds_nodsh && skip "remote MDS with nodsh" && exit 0 remote_ost_nodsh && skip "remote OST with nodsh" && exit 0 ost_pools_init -# Tests for new commands added +trap "cleanup_pools $FSNAME" EXIT +# Tests for new commands added test_1() { echo "Creating a pool with a 1 character pool name" create_pool_nofail p @@ -621,7 +610,7 @@ run_test 6 "getstripe/setstripe" test_11() { local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 1 ]] && skip "Need atleast 2 OSTs" && return + [[ $OSTCOUNT -le 1 ]] && skip_env "Need atleast 2 OSTs" && return create_pool_nofail $POOL create_pool_nofail $POOL2 @@ -663,7 +652,7 @@ run_test 11 "OSTs in overlapping/multiple pools" test_12() { local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 2 ]] && skip "Need atleast 3 OSTs" && return + [[ $OSTCOUNT -le 2 ]] && skip_env "Need atleast 3 OSTs" && return create_pool_nofail $POOL create_pool_nofail $POOL2 @@ -718,7 +707,7 @@ test_12() { run_test 12 "OST Pool Membership" test_13() { - [[ $OSTCOUNT -le 2 ]] && skip "Need atleast 3 OSTs" && return + [[ $OSTCOUNT -le 2 ]] && skip_env "Need atleast 3 OSTs" && return local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} local numfiles=10 @@ -781,7 +770,7 @@ test_13() { run_test 13 "Striping characteristics in a pool" test_14() { - [[ $OSTCOUNT -le 2 ]] && skip "Need atleast 3 OSTs" && return + [[ $OSTCOUNT -le 2 ]] && skip_env "Need atleast 3 OSTs" && return local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} local numfiles=100 @@ -1084,7 +1073,7 @@ run_test 20 "Different pools in a directory hierarchy." test_21() { local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 1 ]] && skip "Need atleast 2 OSTs" && return + [[ $OSTCOUNT -le 1 ]] && skip_env "Need atleast 2 OSTs" && return local numfiles=12 local i=0 @@ -1126,7 +1115,7 @@ add_loop() { test_22() { local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 1 ]] && skip "Need at least 2 OSTs" && return + [[ $OSTCOUNT -le 1 ]] && skip_env "Need at least 2 OSTs" && return local numfiles=100 @@ -1152,11 +1141,11 @@ run_test 22 "Simultaneous manipulation of a pool" test_23() { local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 1 ]] && skip "Need atleast 2 OSTs" && return + [[ $OSTCOUNT -le 1 ]] && skip_env "Need atleast 2 OSTs" && return mkdir -p $POOL_ROOT check_runas_id $TSTID $TSTID $RUNAS || { - skip "User $RUNAS_ID does not exist - skipping" + skip_env "User $RUNAS_ID does not exist - skipping" return 0 } @@ -1234,7 +1223,7 @@ run_test 23 "OST pools and quota" test_24() { local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 1 ]] && skip "Need atleast 2 OSTs" && return + [[ $OSTCOUNT -le 1 ]] && skip_env "Need atleast 2 OSTs" && return local numfiles=10 local i=0 @@ -1340,7 +1329,7 @@ run_test 25 "Create new pool and restart MDS =======================" log "cleanup: ======================================================" cd $ORIG_PWD -cleanup_tests +cleanup_pools $FSNAME check_and_cleanup_lustre echo '=========================== finished ===============================' [ -f "$POOLSLOG" ] && cat $POOLSLOG && grep -q FAIL $POOLSLOG && exit 1 || true diff --git a/lustre/tests/sanity.sh b/lustre/tests/sanity.sh index 654a530..7832b78 100644 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -6283,31 +6283,25 @@ check_file_in_pool() export mdtlov= -cleanup_200 () { - trap 0 - test_pools || return 0 - destroy_pool $POOL -} +trap "cleanup_pools $FSNAME" EXIT test_200a() { test_pools || return 0 - do_facet mgs $LCTL pool_new $FSNAME.$POOL - - trap cleanup_200 EXIT - CLEANUP_200=yes - - # get param should return err until pool is created - wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$POOL 2>/dev/null || echo foo" "" || error "Pool creation of $POOL failed" + create_pool $FSNAME.$POOL || return $? + [ $($LFS pool_list $FSNAME | grep -c $POOL) -eq 1 ] || + error "$POOL not in lfs pool_list" } run_test 200a "Create new pool ==========================================" test_200b() { test_pools || return 0 - TGT=$(for i in `seq $TGTPOOL_FIRST $TGTPOOL_STEP $TGTPOOL_MAX`; do printf "$FSNAME-OST%04x_UUID " $i; done) + TGT=$(for i in $TGTPOOL_LIST; do printf "$FSNAME-OST%04x_UUID " $i; done) do_facet mgs $LCTL pool_add $FSNAME.$POOL \ $FSNAME-OST[$TGTPOOL_FIRST-$TGTPOOL_MAX/$TGTPOOL_STEP] - wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$POOL | sort -u | tr '\n' ' ' " "$TGT" || error "Add to pool failed" + + wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$POOL | sort -u | tr '\n' ' ' " "$TGT" || + error "Add to pool failed" } run_test 200b "Add targets to a pool ====================================" @@ -6371,7 +6365,8 @@ test_201a() { TGT=$($LCTL get_param -n lov.$FSNAME-*.pools.$POOL | head -1) do_facet mgs $LCTL pool_remove $FSNAME.$POOL $TGT - wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$POOL | grep $TGT" "" || error "$TGT not removed from $FSNAME.$POOL" + wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$POOL | grep $TGT" "" || + error "$TGT not removed from $FSNAME.$POOL" } run_test 201a "Remove a target from a pool =============================" @@ -6382,8 +6377,8 @@ test_201b() { do do_facet mgs $LCTL pool_remove $FSNAME.$POOL $TGT done - wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$POOL" ""\ - || error "Pool $FSNAME.$POOL cannot be drained" + wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$POOL" "" || + error "Pool $FSNAME.$POOL cannot be drained" # striping on an empty/nonexistant pool should fall back to "pool of everything" touch ${POOL_DIR}/$tfile || error "failed to use fallback striping for empty pool" # setstripe on an empty pool should fail @@ -6406,12 +6401,16 @@ test_201c() { error "expected failure when creating file with missing pool" # get param should return err once pool is gone - wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$POOL 2>/dev/null || echo foo" "foo" && unset CLEANUP_200 && trap 0 && return 0 + if wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$POOL 2>/dev/null || + echo foo" "foo"; then + remove_pool_from_list $FSNAME.$POOL + return 0 + fi error "Pool $FSNAME.$POOL is not destroyed" } run_test 201c "Remove a pool ============================================" -[ "$CLEANUP_200" ] && cleanup_200 +cleanup_pools $FSNAME test_202() { $LFS setstripe -c 2 -s 1048576 $DIR/$tfile diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh index bb112d5..4b54a1c 100644 --- a/lustre/tests/test-framework.sh +++ b/lustre/tests/test-framework.sh @@ -164,6 +164,44 @@ case `uname -r` in *) EXT=".ko"; USE_QUOTA=yes;; esac +pool_list () { + do_facet mgs lctl pool_list $1 +} + +create_pool() { + local fsname=${1%%.*} + local poolname=${1##$fsname.} + + do_facet mgs lctl pool_new $1 + local RC=$? + # get param should return err unless pool is created + [[ $RC -ne 0 ]] && return $RC + + wait_update $HOSTNAME "lctl get_param -n lov.$fsname-*.pools.$poolname \ + 2>/dev/null || echo foo" "" || RC=1 + if [[ $RC -eq 0 ]]; then + add_pool_to_list $1 + else + error "pool_new failed $1" + fi + return $RC +} + +add_pool_to_list () { + local fsname=${1%%.*} + local poolname=${1##$fsname.} + + local listvar=${fsname}_CREATED_POOLS + eval export ${listvar}=$(expand_list ${!listvar} $poolname) +} + +remove_pool_from_list () { + local fsname=${1%%.*} + local poolname=${1##$fsname.} + + local listvar=${fsname}_CREATED_POOLS + eval export ${listvar}=$(exclude_items_from_list ${!listvar} $poolname) +} module_loaded () { /sbin/lsmod | grep -q $1 @@ -2819,19 +2857,51 @@ destroy_pool_int() { do_facet mgs lctl pool_destroy $1 } +# . or destroy_pool() { + local fsname=${1%%.*} + local poolname=${1##$fsname.} + + [[ x$fsname = x$poolname ]] && fsname=$FSNAME + local RC - do_facet mds lctl pool_list $FSNAME.$1 - RC=$? - [[ $RC -ne 0 ]] && return $RC + pool_list $fsname.$poolname || return $? - destroy_pool_int $FSNAME.$1 + destroy_pool_int $fsname.$poolname RC=$? [[ $RC -ne 0 ]] && return $RC - wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$1 \ - 2>/dev/null || echo foo" "foo" && return 0 + wait_update $HOSTNAME "lctl get_param -n lov.$fsname-*.pools.$poolname \ + 2>/dev/null || echo foo" "foo" || RC=1 + + if [[ $RC -eq 0 ]]; then + remove_pool_from_list $fsname.$poolname + else + error "destroy pool failed $1" + fi + return $RC +} + +destroy_pools () { + local fsname=${1:-$FSNAME} + local poolname + local listvar=${fsname}_CREATED_POOLS + + pool_list $fsname + + [ x${!listvar} = x ] && return 0 + + echo destroy the created pools: ${!listvar} + for poolname in ${!listvar//,/ }; do + destroy_pool $fsname.$poolname + done +} + +cleanup_pools () { + local fsname=${1:-$FSNAME} + trap 0 + destroy_pools $fsname } gather_logs () { -- 1.8.3.1