}
run_test 17 "Referencing an empty pool"
-create_perf_one() {
- local dir=$1/d
+create_perf() {
+ local cdir=$1/d
local numfiles=$2
local time
- mkdir -p $dir
+ mkdir -p $cdir
sync; sleep 5 # give pending IO a chance to go to disk
- stat=$(createmany -o $dir/${tfile} $numfiles)
- rm -rf $dir
+ stat=$(createmany -o $cdir/${tfile} $numfiles)
+ rm -rf $cdir
sync
time=$(echo $stat | cut -f 5 -d ' ')
- echo $stat > /dev/stderr
+ echo $stat >> /dev/stderr
echo $time
}
-create_perf() {
- local t1=$(create_perf_one $1 $2)
- local t2=$(create_perf_one $1 $2)
- local t3=$(create_perf_one $1 $2)
- local time=$(echo "scale=2; ( $t1 + $t2 + $t3 ) / 3" | bc)
-
- echo "$time"
-}
-
test_18() {
set_cleanup_trap
local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir}
- local numfiles=10000
- local i=0
- local time1
- local time2
- local time3
- local dir=$POOL_ROOT/dir
- local stat
- local diff
-
- time1=$(create_perf $dir $numfiles)
-
- create_pool_nofail $POOL
-
- add_pool $POOL $TGT_ALL "$TGT_UUID"
-
- create_dir $dir $POOL
- time2=$(create_perf $dir $numfiles)
-
- destroy_pool $POOL
-
- time3=$(create_perf $dir $numfiles)
-
- echo Time taken for $numfiles creates without pools: $time1
- echo Time taken for $numfiles creates with pools: $time2
- echo Time taken for $numfiles creates without pools: $time3
-
- deg=$(echo "scale=2; (($time2 - $time3) * 100 / $time3) > 5" | bc)
- diff=$(echo "scale=2; ($time2 - $time3) * 100 / $time3" | bc)
+ local numfiles=9877
+ local plaindir=$POOL_ROOT/plaindir
+ local pooldir=$POOL_ROOT/pooldir
+ local t1=0
+ local t2=0
+ local t3=0
+ local diff
+
+ for i in $(seq 1 3);
+ do
+ echo "Create performance, iteration $i, $numfiles files x 3"
+
+ time1=$(create_perf $plaindir $numfiles)
+ echo "iter $i: $numfiles creates without pool: $time1"
+ t1=$(echo "scale=2; $t1 + $time1" | bc)
+
+ create_pool_nofail $POOL > /dev/null
+ add_pool $POOL $TGT_ALL "$TGT_UUID" > /dev/null
+ create_dir $pooldir $POOL
+ time2=$(create_perf $pooldir $numfiles)
+ echo "iter $i: $numfiles creates with pool: $time2"
+ t2=$(echo "scale=2; $t2 + $time2" | bc)
+
+ destroy_pool $POOL > /dev/null
+ time3=$(create_perf $pooldir $numfiles)
+ echo "iter $i: $numfiles creates with missing pool: $time3"
+ t3=$(echo "scale=2; $t3 + $time3" | bc)
+
+ echo
+ done
+
+ time1=$(echo "scale=2; $t1 / $i" | bc)
+ echo Avg time taken for $numfiles creates without pool: $time1
+ time2=$(echo "scale=2; $t2 / $i" | bc)
+ echo Avg time taken for $numfiles creates with pool: $time2
+ time3=$(echo "scale=2; $t3 / $i" | bc)
+ echo Avg time taken for $numfiles creates with missing pool: $time3
+
+ # Set this high until we establish a baseline for what the degradation
+ # is / should be
+ max=30
+ diff=$(echo "scale=2; ($time2 - $time1) * 100 / $time1" | bc)
+ echo "No pool to wide pool: $diff %."
+ deg=$(echo "scale=2; $diff > $max" | bc)
+ [ "$deg" == "1" ] && error_ignore 23408 "Degradation with wide pool is $diff % (> $max %)"
+
+ max=15
+ diff=$(echo "scale=2; ($time3 - $time1) * 100 / $time1" | bc)
+ echo "No pool to missing pool: $diff %."
+ deg=$(echo "scale=2; $diff > $max" | bc)
+ [ "$deg" == "1" ] && error_ignore 23408 "Degradation with missing pool is $diff % (> $max %)"
- if [[ "$deg" == "1" ]]; then
- error "Performance degradation with pools is $diff %."
- else
- echo "Performance degradation with pools is $diff %."
- fi
return 0
}
run_test 18 "File create in a directory which references a deleted pool"
wait_osc_import_state mds ost FULL
clients_up
+ wait_mds_ost_sync
# Veriy that the pool got created and is usable
df $POOL_ROOT > /dev/null
- sleep 5
- # Make sure OST0 can be striped on
- $SETSTRIPE -o 0 -c 1 $POOL_ROOT/$tfile
- STR=$($GETSTRIPE $POOL_ROOT/$tfile | grep 0x | cut -f2 | tr -d " ")
- rm $POOL_ROOT/$tfile
- if [[ "$STR" == "0" ]]; then
- echo "Creating a file in pool$i"
- create_file $POOL_ROOT/file$i pool$i || break
- check_file_in_pool $POOL_ROOT/file$i pool$i || break
- else
- echo "OST 0 seems to be unavailable. Try later."
- fi
+ sleep 5
+ # Make sure OST0 can be striped on
+ $SETSTRIPE -o 0 -c 1 $POOL_ROOT/$tfile
+ STR=$($GETSTRIPE $POOL_ROOT/$tfile | grep 0x | cut -f2 | tr -d " ")
+ rm $POOL_ROOT/$tfile
+ if [[ "$STR" == "0" ]]; then
+ echo "Creating a file in pool$i"
+ create_file $POOL_ROOT/file$i pool$i || break
+ check_file_in_pool $POOL_ROOT/file$i pool$i || break
+ else
+ echo "OST 0 seems to be unavailable. Try later."
+ fi
done
rm -rf $POOL_ROOT
}
run_test 25 "Create new pool and restart MDS ======================="
+test_26() {
+ local OSTCOUNT=`lctl get_param -n lov.$LOVNAME.*clilov*.numobd`
+ [[ $OSTCOUNT -le 2 ]] && skip_env "Need at least 3 OSTs" && return
+ set_cleanup_trap
+ local dev=$(mdsdevname ${SINGLEMDS//mds/})
+ local POOL_ROOT=${POOL_ROOT:-$DIR/$tdir}
+
+ mkdir -p $POOL_ROOT
+
+ create_pool_nofail $POOL
+
+ do_facet $SINGLEMDS "lctl pool_add $FSNAME.pool1 OST0000; sync"
+ wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.pool1 | \
+ sort -u | grep $FSNAME-OST0000_UUID " "$FSNAME-OST0000_UUID" || \
+ error "pool_add failed: $1; $2"
+
+ do_facet $SINGLEMDS "lctl pool_add $FSNAME.pool1 OST0002; sync"
+ wait_update $HOSTNAME "lctl get_param -n lov.$FSNAME-*.pools.pool1 | \
+ sort -u | grep $FSNAME-OST0002_UUID" "$FSNAME-OST0002_UUID" || \
+ error "pool_add failed: $1; $2"
+
+ # Veriy that the pool got created and is usable
+ df $POOL_ROOT
+ echo "Creating files in $POOL"
+
+ for ((i=0;i<10;i++)); do
+ #OBD_FAIL_MDS_OSC_CREATE_FAIL 0x147
+ #Fail OST0000 to make sure the objects create on the other ost in the pool
+ do_facet $SINGLEMDS lctl set_param fail_loc=0x147
+ do_facet $SINGLEMDS lctl set_param fail_val=0
+ create_file $POOL_ROOT/file$i $POOL 1 -1 || break
+ do_facet $SINGLEMDS lctl set_param fail_loc=0
+ check_file_in_pool $POOL_ROOT/file$i $POOL || break
+ done
+ rm -rf $POOL_ROOT
+}
+run_test 26 "Choose other OSTs in the pool first in the creation remedy"
+
log "cleanup: ======================================================"
cd $ORIG_PWD
cleanup_pools $FSNAME