Whamcloud - gitweb
b=20863
authorgrev <grev>
Tue, 1 Dec 2009 17:33:19 +0000 (17:33 +0000)
committergrev <grev>
Tue, 1 Dec 2009 17:33:19 +0000 (17:33 +0000)
i=Brian
i=Manoj
cleanup pools created

lustre/tests/ost-pools.sh
lustre/tests/sanity.sh
lustre/tests/test-framework.sh

index a59f19e..99c1073 100644 (file)
@@ -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
index 8830c6e..ac9f21c 100644 (file)
@@ -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`
index 07ab9ca..747d111 100644 (file)
@@ -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
 }
 
+# <fsname>.<poolname> or <poolname>
 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 () {