From f4d727d04dd22831d2c037271894036826230cbd Mon Sep 17 00:00:00 2001 From: grev Date: Tue, 1 Dec 2009 17:33:19 +0000 Subject: [PATCH] b=20863 i=Brian i=Manoj cleanup pools created --- lustre/tests/ost-pools.sh | 39 +++++++------------- lustre/tests/sanity.sh | 40 ++++++++++---------- lustre/tests/test-framework.sh | 84 ++++++++++++++++++++++++++++++++++++++---- 3 files changed, 110 insertions(+), 53 deletions(-) diff --git a/lustre/tests/ost-pools.sh b/lustre/tests/ost-pools.sh index a59f19e..99c1073 100644 --- a/lustre/tests/ost-pools.sh +++ b/lustre/tests/ost-pools.sh @@ -172,18 +172,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" ""\ @@ -207,7 +195,7 @@ add_pool() { } create_pool_nofail() { - create_pool $1 + create_pool $FSNAME.$1 if [[ $? != 0 ]] then error "Pool creation of $1 failed" @@ -215,7 +203,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" @@ -241,8 +229,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 @@ -620,7 +609,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 @@ -662,7 +651,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 @@ -717,7 +706,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 @@ -780,7 +769,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 @@ -1083,7 +1072,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 @@ -1125,7 +1114,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 @@ -1151,11 +1140,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 } @@ -1233,7 +1222,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 8830c6e..ac9f21c 100644 --- a/lustre/tests/sanity.sh +++ b/lustre/tests/sanity.sh @@ -6693,33 +6693,27 @@ check_file_in_pool() return 0 } -cleanup_200 () { - trap 0 - destroy_pool $POOL -} +trap "cleanup_pools $FSNAME" EXIT test_200a() { remote_mgs_nodsh && skip "remote MGS with nodsh" && return - 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" - [ $($LFS pool_list $FSNAME | grep -c $POOL) -eq 1 ] || error "$POOL not in lfs pool_list" + 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() { remote_mgs_nodsh && skip "remote MGS with nodsh" && return - 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" local lfscount=$($LFS pool_list $FSNAME.$POOL | grep -c "\-OST") local addcount=$((($TGTPOOL_MAX - $TGTPOOL_FIRST) / $TGTPOOL_STEP + 1)) - [ $lfscount -eq $addcount ] || error "lfs pool_list bad ost count $lfscount != $addcount" + [ $lfscount -eq $addcount ] || + error "lfs pool_list bad ost count $lfscount != $addcount" } run_test 200b "Add targets to a pool ====================================" @@ -6785,7 +6779,8 @@ test_201a() { remote_mgs_nodsh && skip "remote MGS with nodsh" && return 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 =============================" @@ -6795,8 +6790,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 @@ -6818,13 +6813,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_212() { size=`date +%s` diff --git a/lustre/tests/test-framework.sh b/lustre/tests/test-framework.sh index 07ab9ca..747d111 100644 --- a/lustre/tests/test-framework.sh +++ b/lustre/tests/test-framework.sh @@ -3136,7 +3136,6 @@ wait_clients_import_state () { *) error "unknown facet!" ;; esac - if ! do_rpc_nodes $list wait_import_state $expected $proc_path; then error "import is not in ${expected} state" return 1 @@ -3160,6 +3159,45 @@ oos_full() { return $OSCFULL } +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) +} + destroy_pool_int() { local ost local OSTS=$(do_facet $SINGLEMDS lctl pool_list $1 | \ @@ -3170,19 +3208,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 $SINGLEMDS 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