X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=lustre%2Ftests%2Fost-pools.sh;h=9915e07df34899deaf7c8d8891f2287a4b240e55;hb=6e985684b822324143c686e919fe7a75bb16b440;hp=104268cfe047055a2402211006d15855749d279d;hpb=9ae317d9b4fa0cd40365d0100172d0b8e0dbc828;p=fs%2Flustre-release.git diff --git a/lustre/tests/ost-pools.sh b/lustre/tests/ost-pools.sh index 104268c..9915e07 100755 --- a/lustre/tests/ost-pools.sh +++ b/lustre/tests/ost-pools.sh @@ -26,7 +26,13 @@ init_logging check_and_setup_lustre -# 9 12.5 (min)" +if ! combined_mgs_mds; then + do_facet mgs "mkdir -p $MOUNT" + zconf_mount $mgs_HOST $MOUNT $MOUNT_OPTS || + error "unable to mount $MOUNT on the MGS" +fi + +# 9 12.5 (min)" [ "$SLOW" = "no" ] && EXCEPT_SLOW="18 23b" DIR=${DIR:-$MOUNT} @@ -88,9 +94,9 @@ create_file() { osts_in_pool() { local pool=$1 local res - for i in $(do_facet mgs lctl pool_list $FSNAME.$pool | - grep -v "^Pool:" | sed -e 's/_UUID$//;s/^.*-OST//'); do - res="$res $(printf "%d" 0x$i)" + for i in $(list_pool $FSNAME.$pool | + sed -e 's/_UUID$//;s/^.*-OST//'); do + res="$res $(printf "%d" 0x$i)" done echo $res } @@ -178,40 +184,36 @@ add_pool() { local RC=$? [[ $RC -ne 0 ]] && return $RC + # wait for OSTs to be added to the pool + for mds_id in $(seq $MDSCOUNT); do + local mdt_id=$((mds_id-1)) + local lodname=$FSNAME-MDT$(printf "%04x" $mdt_id)-mdtlov + wait_update_facet mds$mds_id \ + "lctl get_param -n lod.$lodname.pools.$pool | + sort -u | tr '\n' ' ' " "$tgt" >/dev/null || + error "mds$mds_id:pool add failed $1; $2" + done wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.$pool | - sort -u | tr '\n' ' ' " "$tgt" >/dev/null || RC=1 - [[ $RC -ne 0 ]] && error "pool_add failed: $1; $2" + sort -u | tr '\n' ' ' " "$tgt" >/dev/null || + error "pool_add failed: $1; $2" return $RC } create_pool_nofail() { - create_pool $FSNAME.$1 - if [[ $? != 0 ]]; then - error "Pool creation of $1 failed" - fi + create_pool $FSNAME.$1 + [[ $? -ne 0 ]] && error "Pool creation of $1 failed" + return 0 } create_pool_fail() { - create_pool $FSNAME.$1 - if [[ $? == 0 ]]; then - error "Pool creation of $1 succeeded; should have failed" - fi -} - -cleanup_tests() { - # Destroy pools from previous test runs - for p in $(do_facet mgs lctl pool_list $FSNAME | grep $POOL); do - destroy_pool_int $p; - done - rm -rf $DIR/d0.${TESTSUITE} + create_pool $FSNAME.$1 + [[ $? -ne 0 ]] || + error "Pool creation of $1 succeeded; should have failed" + return 0 } ost_pools_init() { - cleanup_tests -} - -set_cleanup_trap() { - trap "cleanup_tests $FSNAME" EXIT + destroy_test_pools } # Initialization @@ -219,95 +221,82 @@ 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 test_1a() { - set_cleanup_trap - create_pool_nofail p - destroy_pool p + create_pool_nofail p + destroy_pool p } run_test 1a "Create a pool with a 1 character pool name" test_1b() { - set_cleanup_trap - create_pool_nofail ${POOL}12 - destroy_pool ${POOL}12 + create_pool_nofail ${POOL}12 + destroy_pool ${POOL}12 } run_test 1b "Create a pool with a 10 char pool name" test_1c() { - set_cleanup_trap - create_pool_nofail ${POOL}1234567 - destroy_pool ${POOL}1234567 + create_pool_nofail ${POOL}1234567 + destroy_pool ${POOL}1234567 } run_test 1c "Create a pool with a 15 char pool name" test_1d() { - set_cleanup_trap - create_pool_fail ${POOL}12345678 + create_pool_fail ${POOL}12345678 } run_test 1d "Create a pool with a 16 char pool name; should fail" test_1e() { - set_cleanup_trap - local pool_name="$POOL" - for ((i = 1; i <= 991; i++)); do pool_name=${pool_name}"o"; done - create_pool_fail $pool_name + local pool_name="$POOL" + for ((i = 1; i <= 991; i++)); do pool_name=${pool_name}"o"; done + create_pool_fail $pool_name } run_test 1e "Create a pool with a 1000 char pool name; should fail" test_1f() { - set_cleanup_trap - do_facet mgs lctl pool_new .$POOL 2>/dev/null + create_pool .$POOL [[ $? -ne 0 ]] || error "pool_new did not fail even though fs-name was missing" } run_test 1f "pool_new should fail if fs-name is missing" test_1g() { - set_cleanup_trap - do_facet mgs lctl pool_new $POOL 2>/dev/null + create_pool $POOL [[ $? -ne 0 ]] || error "pool_new did not fail even though fs-name was missing" } run_test 1g "pool_new should fail if fs-name is missing" test_1h() { - set_cleanup_trap - do_facet mgs lctl pool_new ${FSNAME}. 2>/dev/null + create_pool ${FSNAME}. [[ $? -ne 0 ]] || error "pool_new did not fail even though pool name was missing" } run_test 1h "pool_new should fail if poolname is missing" test_1i() { - set_cleanup_trap - do_facet mgs lctl pool_new . 2>/dev/null + create_pool . [[ $? -ne 0 ]] || - error "pool_new did not fail even if pool and fs-name were missing" + error "pool_new did not fail even if pool/fs-name was missing" } run_test 1i "pool_new should fail if poolname and fs-name are missing" test_1j() { - set_cleanup_trap - do_facet mgs lctl pool_new ${FSNAME},$POOL 2>/dev/null + create_pool ${FSNAME},$POOL [[ $? -ne 0 ]] || - error "pool_new did not fail even though pool name format was wrong" + error "pool_new did not fail even if poolname format was wrong" } run_test 1j "pool_new should fail if poolname format is wrong" test_1k() { - set_cleanup_trap - do_facet mgs lctl pool_new ${FSNAME}/$POOL 2>/dev/null + create_pool ${FSNAME}/$POOL [[ $? -ne 0 ]] || - error "pool_new did not fail even though pool name format was wrong" + error "pool_new did not fail even if poolname format was wrong" } run_test 1k "pool_new should fail if poolname format is wrong" test_1m() { - set_cleanup_trap create_pool_nofail $POOL2 - do_facet mgs lctl pool_new ${FSNAME}.$POOL2 2>/dev/null + create_pool ${FSNAME}.$POOL2 [[ $? -ne 0 ]] || error "pool_new did not fail even though $POOL2 existed" destroy_pool $POOL2 @@ -315,7 +304,6 @@ test_1m() { run_test 1m "pool_new did not fail even though $POOL2 existed" test_1n() { - set_cleanup_trap create_pool_nofail ${POOL}1234567 add_pool ${POOL}1234567 "OST0000" "$FSNAME-OST0000_UUID " @@ -332,7 +320,6 @@ test_1n() { run_test 1n "Pool with a 15 char pool name works well" test_2a() { - set_cleanup_trap destroy_pool $POOL do_facet mgs lctl pool_add $FSNAME.$POOL $FSNAME-OST0000 2>/dev/null @@ -342,7 +329,6 @@ test_2a() { run_test 2a "pool_add: non-existant pool $POOL" test_2b() { - set_cleanup_trap do_facet mgs lctl pool_add $FSNAME.${POOL}1234567890 \ $FSNAME-OST0000 2>/dev/null [[ $? -ne 0 ]] || @@ -352,7 +338,6 @@ run_test 2b "pool_add: Invalid pool name" # Testing various combinations of OST name list test_2c() { - set_cleanup_trap local TGT local RC @@ -406,7 +391,6 @@ test_2c() { run_test 2c "pool_add: OST index combinations" test_2d() { - set_cleanup_trap local TGT local RC @@ -425,7 +409,6 @@ test_2d() { run_test 2d "pool_add: OSTs that don't exist should be rejected" test_2e() { - set_cleanup_trap local TGT local RC local RESULT @@ -455,7 +438,6 @@ test_2e() { run_test 2e "pool_add: OST already in a pool should be rejected" test_3a() { - set_cleanup_trap lctl get_param -n lov.$FSNAME-*.pools.$POOL 2>/dev/null [[ $? -ne 0 ]] || destroy_pool $POOL @@ -467,7 +449,6 @@ test_3a() { run_test 3a "pool_remove: non-existant pool" test_3b() { - set_cleanup_trap do_facet mgs \ lctl pool_remove ${NON_EXISTANT_FS}.$POOL OST0000 2>/dev/null [[ $? -ne 0 ]] || @@ -476,7 +457,6 @@ test_3b() { run_test 3b "pool_remove: non-existant fsname" test_3c() { - set_cleanup_trap do_facet mgs lctl pool_remove $FSNAME.p1234567891234567890 \ $FSNAME-OST0000 2>/dev/null [[ $? -ne 0 ]] || @@ -486,7 +466,6 @@ run_test 3c "pool_remove: Invalid pool name" # Testing various combinations of OST name list test_3d() { - set_cleanup_trap lctl get_param -n lov.$FSNAME-*.pools.$POOL 2>/dev/null [[ $? -ne 0 ]] || destroy_pool $POOL @@ -517,7 +496,6 @@ test_3d() { run_test 3d "pool_remove: OST index combinations" test_4a() { - set_cleanup_trap lctl get_param -n lov.$FSNAME-*.pools.$POOL 2>/dev/null [[ $? -ne 0 ]] || destroy_pool $POOL @@ -528,7 +506,6 @@ test_4a() { run_test 4a "pool_destroy: non-existant pool" test_4b() { - set_cleanup_trap do_facet mgs lctl pool_destroy ${NON_EXISTANT_FS}.$POOL 2>/dev/null [[ $? -ne 0 ]] || error "pool_destroy did not fail even though filesystem did not exist." @@ -536,7 +513,6 @@ test_4b() { run_test 4b "pool_destroy: non-existant fs-name" test_4c() { - set_cleanup_trap create_pool_nofail $POOL add_pool $POOL "OST0000" "$FSNAME-OST0000_UUID " @@ -594,58 +570,54 @@ sub_test_5() { } test_5a() { - set_cleanup_trap - # Issue commands from client - sub_test_5 $LFS + # Issue commands from client + sub_test_5 $LFS } run_test 5a "lfs pool_list from client" test_5b() { - set_cleanup_trap - sub_test_5 "do_facet $SINGLEMDS lctl" + sub_test_5 "do_facet $SINGLEMDS lctl" } run_test 5b "lctl pool_list from MDS" test_6() { - set_cleanup_trap - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - local POOL_DIR=$POOL_ROOT/dir_tst - local POOL_FILE=$POOL_ROOT/file_tst - - create_pool_nofail $POOL + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + local POOL_DIR=$POOL_ROOT/dir_tst + local POOL_FILE=$POOL_ROOT/file_tst - do_facet $SINGLEMDS lctl pool_list $FSNAME - [[ $? -eq 0 ]] || error "pool_list $FSNAME failed." + create_pool_nofail $POOL - add_pool $POOL $TGT_ALL "$TGT_UUID" + do_facet $SINGLEMDS lctl pool_list $FSNAME + [[ $? -eq 0 ]] || error "pool_list $FSNAME failed." - mkdir -p $POOL_DIR - $SETSTRIPE -c -1 -p $POOL $POOL_DIR - [[ $? -eq 0 ]] || error "$SETSTRIPE -p $POOL failed." - check_dir_in_pool $POOL_DIR $POOL + add_pool $POOL $TGT_ALL "$TGT_UUID" - # If an invalid pool name is specified, the command should fail - $SETSTRIPE -c 2 -p $INVALID_POOL $POOL_DIR 2>/dev/null - [[ $? -ne 0 ]] || error "setstripe to invalid pool did not fail." + mkdir -p $POOL_DIR + $SETSTRIPE -c -1 -p $POOL $POOL_DIR + [[ $? -eq 0 ]] || error "$SETSTRIPE -p $POOL failed." + check_dir_in_pool $POOL_DIR $POOL - # If the pool name does not exist, the command should fail - $SETSTRIPE -c 2 -p $NON_EXISTANT_POOL $POOL_DIR 2>/dev/null - [[ $? -ne 0 ]] || error "setstripe to non-existant pool did not fail." + # If an invalid pool name is specified, the command should fail + $SETSTRIPE -c 2 -p $INVALID_POOL $POOL_DIR 2>/dev/null + [[ $? -ne 0 ]] || error "setstripe to invalid pool did not fail." - # lfs setstripe should work as before if a pool name is not specified. - $SETSTRIPE -c -1 $POOL_DIR - [[ $? -eq 0 ]] || error "$SETSTRIPE -p $POOL_DIR failed." - $SETSTRIPE -c -1 $POOL_FILE - [[ $? -eq 0 ]] || error "$SETSTRIPE -p $POOL_FILE failed." + # If the pool name does not exist, the command should fail + $SETSTRIPE -c 2 -p $NON_EXISTANT_POOL $POOL_DIR 2>/dev/null + [[ $? -ne 0 ]] || error "setstripe to non-existant pool did not fail." - # lfs setstripe should fail if a start index that is outside the - # pool is specified. - create_pool_nofail $POOL2 - add_pool $POOL2 "OST0000" "$FSNAME-OST0000_UUID " - $SETSTRIPE -i 1 -p $POOL2 $ROOT_POOL/$tfile 2>/dev/null - [[ $? -ne 0 ]] || - error "$SETSTRIPE with start index outside the pool did not fail." + # lfs setstripe should work as before if a pool name is not specified. + $SETSTRIPE -c -1 $POOL_DIR + [[ $? -eq 0 ]] || error "$SETSTRIPE -c -1 $POOL_DIR failed." + $SETSTRIPE -c -1 $POOL_FILE + [[ $? -eq 0 ]] || error "$SETSTRIPE -c -1 $POOL_FILE failed." + # lfs setstripe should fail if a start index that is outside the + # pool is specified. + create_pool_nofail $POOL2 + add_pool $POOL2 "OST0000" "$FSNAME-OST0000_UUID " + $SETSTRIPE -i 1 -p $POOL2 $ROOT_POOL/$tfile 2>/dev/null + [[ $? -ne 0 ]] || + error "$SETSTRIPE with start index outside the pool did not fail." } run_test 6 "getstripe/setstripe" @@ -657,15 +629,15 @@ helper_test_7a() pool_add $pool || error "pool_add failed" pool_add_targets $pool 0 1 || error "pool_add_targets failed" - $SETSTRIPE -c 1 $DIR/$tdir/testfile1 --pool "$pool" || \ + $SETSTRIPE -c 1 $DIR/$tdir/testfile1 --pool "$pool" || error "setstripe failed" - $SETSTRIPE -c 1 $DIR/$tdir/testfile2 --pool "$FSNAME.$pool" || \ + $SETSTRIPE -c 1 $DIR/$tdir/testfile2 --pool "$FSNAME.$pool" || error "setstripe failed" mkdir $DIR/$tdir/testdir - $SETSTRIPE -c 1 $DIR/$tdir/testdir -p "$pool" || \ + $SETSTRIPE -c 1 $DIR/$tdir/testdir -p "$pool" || error "setstripe failed" - $SETSTRIPE -c 1 $DIR/$tdir/testdir -p "$FSNAME.$pool" || \ + $SETSTRIPE -c 1 $DIR/$tdir/testdir -p "$FSNAME.$pool" || error "setstripe failed" rm -f $DIR/$tdir/testfile1 @@ -695,19 +667,19 @@ run_test 7a "create various pool name" test_7b() { # No fsname - do_facet mgs lctl pool_new qwerty + create_pool qwerty [ $? -ne 22 ] && error "can create a pool with no fsname" # No pool name - do_facet mgs lctl pool_new $FSNAME. + create_pool $FSNAME. [ $? -ne 22 ] && error "can create a pool with no name" # Invalid character - do_facet mgs lctl pool_new $FSNAME.0123456789^bdef + create_pool $FSNAME.0123456789^bdef [ $? -ne 22 ] && error "can create a pool with an invalid name" # Too long - do_facet mgs lctl pool_new $FSNAME.0123456789abdefg + create_pool $FSNAME.0123456789abdefg [ $? -ne 36 ] && error "can create a pool with a name too long" return 0 @@ -740,10 +712,9 @@ test_7c() run_test 7c "create a valid pool name and setstripe with a bad one" test_11() { - set_cleanup_trap local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 1 ]] && skip_env "Need at least 2 OSTs" && return + [[ $OSTCOUNT -le 1 ]] && skip_env "needs >= 2 OSTs" && return create_pool_nofail $POOL create_pool_nofail $POOL2 @@ -778,10 +749,9 @@ test_11() { run_test 11 "OSTs in overlapping/multiple pools" test_12() { - set_cleanup_trap local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 2 ]] && skip_env "Need at least 3 OSTs" && return + [[ $OSTCOUNT -le 2 ]] && skip_env "needs >=3 OSTs" && return create_pool_nofail $POOL create_pool_nofail $POOL2 @@ -831,22 +801,21 @@ test_12() { run_test 12 "OST Pool Membership" test_13() { - set_cleanup_trap - [[ $OSTCOUNT -le 2 ]] && skip_env "Need at least 3 OSTs" && return + [[ $OSTCOUNT -le 2 ]] && skip_env "needs >= 3 OSTs" && return - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - local numfiles=10 - local count=3 + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + local numfiles=10 + local count=3 - create_pool_nofail $POOL - add_pool $POOL $TGT_ALL "$TGT_UUID" + create_pool_nofail $POOL + add_pool $POOL $TGT_ALL "$TGT_UUID" - create_dir $POOL_ROOT/dir1 $POOL -1 - createmany -o $POOL_ROOT/dir1/$tfile $numfiles || - error "createmany $POOL_ROOT/dir1/$tfile failed!" - for file in $POOL_ROOT/dir1/*; do - check_file_in_pool $file $POOL $OSTCOUNT - done + create_dir $POOL_ROOT/dir1 $POOL -1 + createmany -o $POOL_ROOT/dir1/$tfile $numfiles || + error "createmany $POOL_ROOT/dir1/$tfile failed!" + for file in $POOL_ROOT/dir1/*; do + check_file_in_pool $file $POOL $OSTCOUNT + done create_file $POOL_ROOT/dir1/file1 $POOL 1 $TGT_FIRST create_file $POOL_ROOT/dir1/file2 $POOL 1 $((TGT_FIRST + 1)) @@ -855,26 +824,26 @@ test_13() { check_file_in_osts $POOL_ROOT/dir1/file2 "$((TGT_FIRST + 1))" check_file_in_osts $POOL_ROOT/dir1/file3 "$((TGT_FIRST + 2))" - create_dir $POOL_ROOT/dir2 $POOL $count - createmany -o $POOL_ROOT/dir2/$tfile- $numfiles || - error "createmany $POOL_ROOT/dir2/$tfile- failed!" - for file in $POOL_ROOT/dir2/*; do - check_file_in_pool $file $POOL $count - done - - create_dir $POOL_ROOT/dir3 $POOL $count $((TGT_FIRST + 1)) - createmany -o $POOL_ROOT/dir3/$tfile- $numfiles || - error "createmany $POOL_ROOT/dir3/$tfile- failed!" - for file in $POOL_ROOT/dir3/*; do - check_file_in_pool $file $POOL $count - done - - create_dir $POOL_ROOT/dir4 $POOL 1 - createmany -o $POOL_ROOT/dir4/$tfile- $numfiles || - error "createmany $POOL_ROOT/dir4/$tfile- failed!" - for file in $POOL_ROOT/dir4/*; do - check_file_in_pool $file $POOL 1 - done + create_dir $POOL_ROOT/dir2 $POOL $count + createmany -o $POOL_ROOT/dir2/$tfile- $numfiles || + error "createmany $POOL_ROOT/dir2/$tfile- failed!" + for file in $POOL_ROOT/dir2/*; do + check_file_in_pool $file $POOL $count + done + + create_dir $POOL_ROOT/dir3 $POOL $count $((TGT_FIRST + 1)) + createmany -o $POOL_ROOT/dir3/$tfile- $numfiles || + error "createmany $POOL_ROOT/dir3/$tfile- failed!" + for file in $POOL_ROOT/dir3/*; do + check_file_in_pool $file $POOL $count + done + + create_dir $POOL_ROOT/dir4 $POOL 1 + createmany -o $POOL_ROOT/dir4/$tfile- $numfiles || + error "createmany $POOL_ROOT/dir4/$tfile- failed!" + for file in $POOL_ROOT/dir4/*; do + check_file_in_pool $file $POOL 1 + done create_dir $POOL_ROOT/dir5 $POOL 1 $((TGT_FIRST + 2)) createmany -o $POOL_ROOT/dir5/$tfile- $numfiles || @@ -890,22 +859,21 @@ test_13() { run_test 13 "Striping characteristics in a pool" test_14() { - set_cleanup_trap - [[ $OSTCOUNT -le 2 ]] && skip_env "Need at least 3 OSTs" && return + [[ $OSTCOUNT -le 2 ]] && skip_env "needs >= 3 OSTs" && return - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - local numfiles=100 - local i + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + local numfiles=100 + local i - [ $OSTSIZE -gt $((MAXFREE / OSTCOUNT)) ] && - skip_env "OST size $OSTSIZE is larger than $((MAXFREE / OSTCOUNT))" && + [ $OSTSIZE -gt $((MAXFREE / OSTCOUNT)) ] && + skip_env "OST size $OSTSIZE is larger than $((MAXFREE / OSTCOUNT))" && return 0 - create_pool_nofail $POOL - create_pool_nofail $POOL2 + create_pool_nofail $POOL + create_pool_nofail $POOL2 - add_pool $POOL $TGT_HALF "$TGT_UUID2" - add_pool $POOL2 "OST0000" "$FSNAME-OST0000_UUID " + add_pool $POOL $TGT_HALF "$TGT_UUID2" + add_pool $POOL2 "OST0000" "$FSNAME-OST0000_UUID " create_dir $POOL_ROOT/dir1 $POOL 1 create_file $POOL_ROOT/dir1/file $POOL 1 @@ -921,120 +889,117 @@ test_14() { i=$((i + 1)) done - # Fill up OST0 until it is nearly full. - # Create 9 files of size OST0_SIZE/10 each. - create_dir $POOL_ROOT/dir2 $POOL2 1 - $LFS df $POOL_ROOT/dir2 - OST0_SIZE=$($LFS df $POOL_ROOT/dir2 | awk '/\[OST:0\]/ { print $4 }') - FILE_SIZE=$((OST0_SIZE/1024/10)) - echo "Filling OST0 with 9 files of ${FILE_SIZE}MB in $POOL_ROOT/dir2" - i=1 - while [[ $i -lt 10 ]]; do - dd if=/dev/zero of=$POOL_ROOT/dir2/f${i} bs=1M count=$FILE_SIZE - i=$((i + 1)) - done - sleep 1 # get new statfs info - $LFS df $POOL_ROOT/dir2 - - # OST $TGT_FIRST is no longer favored; but it may still be used. - create_dir $POOL_ROOT/dir3 $POOL 1 - create_file $POOL_ROOT/dir3/file $POOL 1 - createmany -o $POOL_ROOT/dir3/$tfile- $numfiles || - error "createmany $POOL_ROOT/dir3/$tfile- failed!" - for file in $POOL_ROOT/dir3/*; do - check_file_in_pool $file $POOL - done - - rm -rf $POOL_ROOT - - return 0 + # Fill up OST0 until it is nearly full. + # Create 9 files of size OST0_SIZE/10 each. + create_dir $POOL_ROOT/dir2 $POOL2 1 + $LFS df $POOL_ROOT/dir2 + OST0_SIZE=$($LFS df $POOL_ROOT/dir2 | awk '/\[OST:0\]/ { print $4 }') + FILE_SIZE=$((OST0_SIZE/1024/10)) + echo "Filling OST0 with 9 files of ${FILE_SIZE}MB in $POOL_ROOT/dir2" + i=1 + while [[ $i -lt 10 ]]; do + dd if=/dev/zero of=$POOL_ROOT/dir2/f${i} bs=1M count=$FILE_SIZE + i=$((i + 1)) + done + sleep 1 # get new statfs info + $LFS df $POOL_ROOT/dir2 + + # OST $TGT_FIRST is no longer favored; but it may still be used. + create_dir $POOL_ROOT/dir3 $POOL 1 + create_file $POOL_ROOT/dir3/file $POOL 1 + createmany -o $POOL_ROOT/dir3/$tfile- $numfiles || + error "createmany $POOL_ROOT/dir3/$tfile- failed!" + for file in $POOL_ROOT/dir3/*; do + check_file_in_pool $file $POOL + done + + rm -rf $POOL_ROOT + + return 0 } run_test 14 "Round robin and QOS striping within a pool" test_15() { - set_cleanup_trap - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - local numfiles=100 - local i=0 + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + local numfiles=100 + local i=0 - while [[ $i -lt $OSTCOUNT ]]; do - create_pool_nofail $POOL${i} + while [[ $i -lt $OSTCOUNT ]]; do + create_pool_nofail $POOL${i} - local tgt=$(printf "$FSNAME-OST%04x_UUID " $i) - add_pool $POOL${i} "$FSNAME-OST[$(printf %04x $i)]" "$tgt" - create_dir $POOL_ROOT/dir${i} $POOL${i} - createmany -o $POOL_ROOT/dir$i/$tfile $numfiles || - error "createmany $POOL_ROOT/dir$i/$tfile failed!" + local tgt=$(printf "$FSNAME-OST%04x_UUID " $i) + add_pool $POOL${i} "$FSNAME-OST[$(printf %04x $i)]" "$tgt" + create_dir $POOL_ROOT/dir${i} $POOL${i} + createmany -o $POOL_ROOT/dir$i/$tfile $numfiles || + error "createmany $POOL_ROOT/dir$i/$tfile failed!" - for file in $POOL_ROOT/dir$i/*; do - check_file_in_osts $file $i - done + for file in $POOL_ROOT/dir$i/*; do + check_file_in_osts $file $i + done - i=$((i + 1)) - done + i=$((i + 1)) + done - return 0 + return 0 } run_test 15 "One directory per OST/pool" test_16() { - set_cleanup_trap - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - local numfiles=10 - local i=0 + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + local numfiles=10 + local i=0 - create_pool_nofail $POOL + create_pool_nofail $POOL - add_pool $POOL $TGT_HALF "$TGT_UUID2" + add_pool $POOL $TGT_HALF "$TGT_UUID2" - local dir=$POOL_ROOT/$tdir - create_dir $dir $POOL + local dir=$POOL_ROOT/$tdir + create_dir $dir $POOL - for i in $(seq 1 10); do - dir=${dir}/dir${i} - done - mkdir -p $dir + for i in $(seq 1 10); do + dir=${dir}/dir${i} + done + mkdir -p $dir - createmany -o $dir/$tfile $numfiles || - error "createmany $dir/$tfile failed!" + createmany -o $dir/$tfile $numfiles || + error "createmany $dir/$tfile failed!" - for file in $dir/*; do - check_file_in_pool $file $POOL - done + for file in $dir/*; do + check_file_in_pool $file $POOL + done - rm -rf $POOL_ROOT/$tdir + rm -rf $POOL_ROOT/$tdir - return 0 + return 0 } run_test 16 "Inheritance of pool properties" test_17() { - set_cleanup_trap - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - local numfiles=10 - local i=0 + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + local numfiles=10 + local i=0 - create_pool_nofail $POOL + create_pool_nofail $POOL - add_pool $POOL $TGT_ALL "$TGT_UUID" + add_pool $POOL $TGT_ALL "$TGT_UUID" - local dir=$POOL_ROOT/dir - create_dir $dir $POOL + local dir=$POOL_ROOT/dir + create_dir $dir $POOL - createmany -o $dir/${tfile}1_ $numfiles || - error "createmany $dir/${tfile}1_ failed!" + createmany -o $dir/${tfile}1_ $numfiles || + error "createmany $dir/${tfile}1_ failed!" - for file in $dir/*; do - check_file_in_pool $file $POOL - done + for file in $dir/*; do + check_file_in_pool $file $POOL + done - destroy_pool $POOL + destroy_pool $POOL - createmany -o $dir/${tfile}2_ $numfiles || - error "createmany $dir/${tfile}2_ failed!" + createmany -o $dir/${tfile}2_ $numfiles || + error "createmany $dir/${tfile}2_ failed!" - rm -rf $dir - return 0 + rm -rf $dir + return 0 } run_test 17 "Referencing an empty pool" @@ -1056,7 +1021,6 @@ create_perf() { } test_18() { - set_cleanup_trap local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} local numsec=15 local iter=3 @@ -1117,96 +1081,96 @@ test_18() { run_test 18 "File create in a directory which references a deleted pool" test_19() { - set_cleanup_trap - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - local numfiles=12 - local dir1=$POOL_ROOT/dir1 - local dir2=$POOL_ROOT/dir2 - local i=0 + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + local numfiles=12 + local dir1=$POOL_ROOT/dir1 + local dir2=$POOL_ROOT/dir2 + local i=0 - create_pool_nofail $POOL + create_pool_nofail $POOL - add_pool $POOL $TGT_HALF "$TGT_UUID2" + add_pool $POOL $TGT_HALF "$TGT_UUID2" - create_dir $dir1 $POOL - createmany -o $dir1/${tfile} $numfiles || - error "createmany $dir1/${tfile} failed!" - for file in $dir1/*; do - check_file_in_pool $file $POOL - done + create_dir $dir1 $POOL + createmany -o $dir1/${tfile} $numfiles || + error "createmany $dir1/${tfile} failed!" + for file in $dir1/*; do + check_file_in_pool $file $POOL + done - mkdir -p $dir2 - createmany -o $dir2/${tfile} $numfiles || - error "createmany $dir2/${tfile} failed!" - for file in $dir2/*; do - check_file_not_in_pool $file $POOL - done + mkdir -p $dir2 + createmany -o $dir2/${tfile} $numfiles || + error "createmany $dir2/${tfile} failed!" + for file in $dir2/*; do + check_file_not_in_pool $file $POOL + done - rm -rf $dir1 $dir2 + rm -rf $dir1 $dir2 - return 0 + return 0 } run_test 19 "Pools should not come into play when not specified" test_20() { - set_cleanup_trap - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - local numfiles=12 - local dir1=$POOL_ROOT/dir1 - local dir2=$dir1/dir2 - local dir3=$dir1/dir3 - local i=0 - local TGT - - create_pool_nofail $POOL - create_pool_nofail $POOL2 - - add_pool $POOL $TGT_HALF "$TGT_UUID2" - - local start=$(printf %04x $((TGT_FIRST + 1))) - TGT=$(for i in $(seq 0x$start 2 0x$TGT_MAX); do \ - printf "$FSNAME-OST%04x_UUID " $i; done) - add_pool $POOL2 "$FSNAME-OST[$start-$TGT_MAX/2]" "$TGT" - - create_dir $dir1 $POOL - create_file $dir1/file1 $POOL2 - create_dir $dir2 $POOL2 - touch $dir2/file2 - mkdir $dir3 - $SETSTRIPE -c 1 $dir3 # No pool assignment - touch $dir3/file3 - $SETSTRIPE -c 1 $dir2/file4 # No pool assignment - - check_file_in_pool $dir1/file1 $POOL2 - check_file_in_pool $dir2/file2 $POOL2 + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + local numfiles=12 + local dir1=$POOL_ROOT/dir1 + local dir2=$dir1/dir2 + local dir3=$dir1/dir3 + local i=0 + local TGT - check_dir_not_in_pool $dir3 $POOL - check_dir_not_in_pool $dir3 $POOL2 + create_pool_nofail $POOL + create_pool_nofail $POOL2 - check_file_not_in_pool $dir3/file3 $POOL - check_file_not_in_pool $dir3/file3 $POOL2 + add_pool $POOL $TGT_HALF "$TGT_UUID2" - check_file_not_in_pool $dir2/file4 $POOL - check_file_not_in_pool $dir2/file4 $POOL2 + local start=$(printf %04x $((TGT_FIRST + 1))) + TGT=$(for i in $(seq 0x$start 2 0x$TGT_MAX); do \ + printf "$FSNAME-OST%04x_UUID " $i; done) + add_pool $POOL2 "$FSNAME-OST[$start-$TGT_MAX/2]" "$TGT" + + create_dir $dir1 $POOL + create_file $dir1/file1 $POOL2 # Should replace $dir1 pool with $POOL2 + create_dir $dir2 $POOL2 + touch $dir2/file2 # Should inherit $POOL2 from $dir2 + mkdir $dir3 # Should inherit $POOL from $dir1 + $SETSTRIPE -c 1 $dir3 # Should remain existing $POOL + touch $dir3/file3 # Should inherit $POOL from $dir3 + $SETSTRIPE -c 1 $dir2/file4 # Should inherit $POOL2 from dir2 + $SETSTRIPE -S 64K $dir1/file5 # Should inderit $POOL from $dir1 + + check_file_in_pool $dir1/file1 $POOL2 + check_file_in_pool $dir2/file2 $POOL2 + check_dir_not_in_pool $dir3 $POOL2 + check_file_not_in_pool $dir3/file3 $POOL2 + check_file_not_in_pool $dir2/file4 $POOL + check_file_not_in_pool $dir1/file5 $POOL2 + + if [ $(lustre_version_code mds1) -ge $(version_code 2.10.54) ]; then + check_dir_in_pool $dir3 $POOL + check_file_in_pool $dir3/file3 $POOL + check_file_in_pool $dir2/file4 $POOL2 + check_file_in_pool $dir1/file5 $POOL + fi - rm -rf $dir1 + rm -rf $dir1 - return 0 + return 0 } run_test 20 "Different pools in a directory hierarchy." test_21() { - set_cleanup_trap - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 1 ]] && skip_env "Need at least 2 OSTs" && return + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + [[ $OSTCOUNT -le 1 ]] && skip_env "needs >= 2 OSTs" && return - local numfiles=12 - local i=0 - local dir=$POOL_ROOT/dir + local numfiles=12 + local i=0 + local dir=$POOL_ROOT/dir - create_pool_nofail $POOL + create_pool_nofail $POOL - add_pool $POOL $TGT_HALF "$TGT_UUID2" + add_pool $POOL $TGT_HALF "$TGT_UUID2" create_dir $dir $POOL $OSTCOUNT create_file $dir/file1 $POOL $OSTCOUNT @@ -1239,53 +1203,51 @@ add_loop() { } test_22() { - set_cleanup_trap - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 1 ]] && skip_env "Need at least 2 OSTs" && return + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + [[ $OSTCOUNT -le 1 ]] && skip_env "needs >= 2 OSTs" && return - local numfiles=100 + local numfiles=100 - create_pool_nofail $POOL - add_pool $POOL "OST0000" "$FSNAME-OST0000_UUID " - create_pool_nofail $POOL2 - add_pool $POOL2 "OST0000" "$FSNAME-OST0000_UUID " + create_pool_nofail $POOL + add_pool $POOL "OST0000" "$FSNAME-OST0000_UUID " + create_pool_nofail $POOL2 + add_pool $POOL2 "OST0000" "$FSNAME-OST0000_UUID " - add_loop $POOL 1 & - add_loop $POOL2 2 & - sleep 5 - create_dir $POOL_ROOT $POOL - createmany -o $POOL_ROOT/${tfile} $numfiles || - error "createmany $POOL_ROOT/${tfile} failed!" - wait + add_loop $POOL 1 & + add_loop $POOL2 2 & + sleep 5 + create_dir $POOL_ROOT $POOL + createmany -o $POOL_ROOT/${tfile} $numfiles || + error "createmany $POOL_ROOT/${tfile} failed!" + wait - return 0 + return 0 } run_test 22 "Simultaneous manipulation of a pool" test_23a() { - set_cleanup_trap - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 1 ]] && skip_env "Need at least 2 OSTs" && return - - mkdir -p $POOL_ROOT - check_runas_id $RUNAS_ID $RUNAS_GID $RUNAS || { - skip_env "User $RUNAS_ID does not exist - skipping" - return 0 - } - - local i=0 - local TGT - local BUNIT_SZ=1024 # min block quota unit(kB) - local LIMIT=$((BUNIT_SZ * (OSTCOUNT + 1))) - local dir=$POOL_ROOT/dir - local file="$dir/$tfile-quota" - - create_pool_nofail $POOL - - local TGT=$(for i in $(seq 0x$TGT_FIRST 3 0x$TGT_MAX); do \ - printf "$FSNAME-OST%04x_UUID " $i; done) - add_pool $POOL "$FSNAME-OST[$TGT_FIRST-$TGT_MAX/3]" "$TGT" - create_dir $dir $POOL + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + [[ $OSTCOUNT -le 1 ]] && skip_env "needs >= 2 OSTs" && return + + mkdir -p $POOL_ROOT + check_runas_id $RUNAS_ID $RUNAS_GID $RUNAS || { + skip_env "User $RUNAS_ID does not exist - skipping" + return 0 + } + + local i=0 + local TGT + local BUNIT_SZ=1024 # min block quota unit(kB) + local LIMIT=$((BUNIT_SZ * (OSTCOUNT + 1))) + local dir=$POOL_ROOT/dir + local file="$dir/$tfile-quota" + + create_pool_nofail $POOL + + local TGT=$(for i in $(seq 0x$TGT_FIRST 3 0x$TGT_MAX); do \ + printf "$FSNAME-OST%04x_UUID " $i; done) + add_pool $POOL "$FSNAME-OST[$TGT_FIRST-$TGT_MAX/3]" "$TGT" + create_dir $dir $POOL # XXX remove the interoperability code once we drop the old server # ( < 2.3.50) support. @@ -1297,59 +1259,58 @@ test_23a() { sleep 5 fi - $LFS setquota -u $RUNAS_ID -b $LIMIT -B $LIMIT $dir - sleep 3 - $LFS quota -v -u $RUNAS_ID $dir - - $SETSTRIPE -c 1 -p $POOL $file - chown $RUNAS_ID.$RUNAS_GID $file - ls -l $file - - # This does two "dd" runs to ensure that the quota failure is returned - # to userspace when we check. The first "dd" might otherwise complete - # without error if it is only writing into cache. - stat=$(LOCALE=C $RUNAS dd if=/dev/zero of=$file bs=$BUNIT_SZ \ - count=$((BUNIT_SZ*2)) 2>&1) - echo $stat | grep "Disk quota exceeded" > /dev/null - if [ $? -eq 0 ]; then - $LFS quota -v -u $RUNAS_ID $dir - cancel_lru_locks osc - stat=$(LOCALE=C $RUNAS dd if=/dev/zero of=$file bs=$BUNIT_SZ \ - count=$BUNIT_SZ seek=$((BUNIT_SZ*2)) 2>&1) - RC=$? - echo $stat - [[ $RC -eq 0 ]] && error "second dd did not fail." - echo $stat | grep "Disk quota exceeded" > /dev/null - [[ $? -eq 1 ]] && error "second dd did not fail with EDQUOT." - else - log "first dd failed with EDQUOT." - fi - $LFS quota -v -u $RUNAS_ID $dir + $LFS setquota -u $RUNAS_ID -b $LIMIT -B $LIMIT $dir + sleep 3 + $LFS quota -v -u $RUNAS_ID $dir + + $SETSTRIPE -c 1 -p $POOL $file + chown $RUNAS_ID.$RUNAS_GID $file + ls -l $file + + # This does two "dd" runs to ensure that the quota failure is returned + # to userspace when we check. The first "dd" might otherwise complete + # without error if it is only writing into cache. + stat=$(LOCALE=C $RUNAS dd if=/dev/zero of=$file bs=$BUNIT_SZ \ + count=$((BUNIT_SZ*2)) 2>&1) + echo $stat | grep "Disk quota exceeded" > /dev/null + if [ $? -eq 0 ]; then + $LFS quota -v -u $RUNAS_ID $dir + cancel_lru_locks osc + stat=$(LOCALE=C $RUNAS dd if=/dev/zero of=$file bs=$BUNIT_SZ \ + count=$BUNIT_SZ seek=$((BUNIT_SZ*2)) 2>&1) + RC=$? + echo $stat + [[ $RC -eq 0 ]] && error "second dd did not fail." + echo $stat | grep "Disk quota exceeded" > /dev/null + [[ $? -eq 1 ]] && error "second dd did not fail with EDQUOT." + else + log "first dd failed with EDQUOT." + fi + $LFS quota -v -u $RUNAS_ID $dir } run_test 23a "OST pools and quota" test_23b() { - set_cleanup_trap - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 1 ]] && skip_env "Need at least 2 OSTs" && return 0 + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + [[ $OSTCOUNT -le 1 ]] && skip_env "needs >= 2 OSTs" && return 0 - mkdir -p $POOL_ROOT - check_runas_id $RUNAS_ID $RUNAS_GID $RUNAS || { - skip_env "User $RUNAS_ID does not exist - skipping" - return 0 - } + mkdir -p $POOL_ROOT + check_runas_id $RUNAS_ID $RUNAS_GID $RUNAS || { + skip_env "User $RUNAS_ID does not exist - skipping" + return 0 + } - local i=0 - local TGT - local dir=$POOL_ROOT/dir - local file="$dir/$tfile-quota" + local i=0 + local TGT + local dir=$POOL_ROOT/dir + local file="$dir/$tfile-quota" - create_pool_nofail $POOL + create_pool_nofail $POOL - local TGT=$(for i in $(seq 0x$TGT_FIRST 3 0x$TGT_MAX); do \ - printf "$FSNAME-OST%04x_UUID " $i; done) - add_pool $POOL "$FSNAME-OST[$TGT_FIRST-$TGT_MAX/3]" "$TGT" - create_dir $dir $POOL + local TGT=$(for i in $(seq 0x$TGT_FIRST 3 0x$TGT_MAX); do \ + printf "$FSNAME-OST%04x_UUID " $i; done) + add_pool $POOL "$FSNAME-OST[$TGT_FIRST-$TGT_MAX/3]" "$TGT" + create_dir $dir $POOL local maxfree=$((1024 * 1024 * 30)) # 30G local AVAIL=$(lfs_df -p $POOL $dir | awk '/summary/ { print $4 }') @@ -1414,31 +1375,34 @@ test_23b() { run_test 23b "OST pools and OOS" test_24() { - set_cleanup_trap - local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} - [[ $OSTCOUNT -le 1 ]] && skip_env "Need at least 2 OSTs" && return + local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} + [[ $OSTCOUNT -le 1 ]] && skip_env "needs >= 2 OSTs" && return - local numfiles=10 - local i=0 - local TGT - local dir - local res + local server_version=$(lustre_version_code $SINGLEMDS) + [[ $server_version -ge $(version_code 2.8.56) ]] || + { skip "Need server version newer than 2.8.55"; return 0; } - create_pool_nofail $POOL + local numfiles=10 + local i=0 + local TGT + local dir + local res + + create_pool_nofail $POOL - add_pool $POOL $TGT_ALL "$TGT_UUID" + add_pool $POOL $TGT_ALL "$TGT_UUID" - create_dir $POOL_ROOT/dir1 $POOL $OSTCOUNT + create_dir $POOL_ROOT/dir1 $POOL $OSTCOUNT - mkdir $POOL_ROOT/dir2 - $SETSTRIPE -p $POOL -S 65536 -i 0 -c 1 $POOL_ROOT/dir2 || - error "$SETSTRIPE $POOL_ROOT/dir2 failed" + mkdir $POOL_ROOT/dir2 + $SETSTRIPE -p $POOL -S 65536 -i 0 -c 1 $POOL_ROOT/dir2 || + error "$SETSTRIPE $POOL_ROOT/dir2 failed" - mkdir $POOL_ROOT/dir3 - $SETSTRIPE -S 65536 -i 0 -c 1 $POOL_ROOT/dir3 || - error "$SETSTRIPE $POOL_ROOT/dir3 failed" + mkdir $POOL_ROOT/dir3 + $SETSTRIPE -S 65536 -i 0 -c 1 $POOL_ROOT/dir3 || + error "$SETSTRIPE $POOL_ROOT/dir3 failed" - mkdir $POOL_ROOT/dir4 + mkdir $POOL_ROOT/dir4 for i in 1 2 3 4; do dir=${POOL_ROOT}/dir${i} @@ -1467,7 +1431,13 @@ test_24() { [[ "$pool" != "$pool1" ]] && error "Pool '$pool' not on $file:$pool1" [[ "$count" != "$count1" ]] && - error "Stripe count $count not on $file:$count1" + [[ "$count" != "-1" ]] && + error "Stripe count $count not on"\ + "$file:$count1" + [[ "$count1" != "$OSTCOUNT" ]] && + [[ "$count" = "-1" ]] && + error "Stripe count $count1 not on"\ + "$file:$OSTCOUNT" [[ "$size" != "$size1" ]] && [[ "$size" != "0" ]] && error "Stripe size $size not on $file:$size1" done @@ -1480,7 +1450,6 @@ test_24() { run_test 24 "Independence of pool from other setstripe parameters" test_25() { - set_cleanup_trap local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} mkdir -p $POOL_ROOT @@ -1521,8 +1490,7 @@ test_25() { run_test 25 "Create new pool and restart MDS" test_26() { - [[ $OSTCOUNT -le 2 ]] && skip_env "Need at least 3 OSTs" && return - set_cleanup_trap + [[ $OSTCOUNT -le 2 ]] && skip_env "needs >= 3 OSTs" && return local dev=$(mdsdevname ${SINGLEMDS//mds/}) local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir} @@ -1560,9 +1528,44 @@ test_26() { } run_test 26 "Choose other OSTs in the pool first in the creation remedy" +test_27() { + [[ $OSTCOUNT -le 1 ]] && skip_env "Need at least 2 OSTs" && return + + local osts + local pid + local count=$OSTCOUNT + + create_pool_nofail $POOL + do_facet mgs lctl pool_add $FSNAME.$POOL $TGT_ALL + osts=$(list_pool $FSNAME.$POOL) + for ost in ${osts}; do + ((count--)) + if [[ $count -eq 0 ]]; then + #define OBD_FAIL_OST_LIST_ASSERT 0x239 + do_facet $SINGLEMDS \ + $LCTL set_param fail_loc=0x239 fail_val=10 + list_pool $FSNAME.$POOL & + pid=$! + sleep 5 + do_facet $SINGLEMDS $LCTL set_param fail_loc=0 + do_facet mgs $LCTL pool_remove $FSNAME.$POOL $ost + wait $pid + do_facet $SINGLEMDS $LCTL set_param fail_val=0 + else + do_facet mgs $LCTL pool_remove $FSNAME.$POOL $ost + fi + done + destroy_pool $POOL +} +run_test 27 "Race pool_list and pool_remove" + cd $ORIG_PWD complete $SECONDS -cleanup_pools $FSNAME +destroy_test_pools $FSNAME +if ! combined_mgs_mds; then + zconf_umount $mgs_HOST $MOUNT + do_facet mgs "rm -rf $MOUNT" +fi check_and_cleanup_lustre exit_status