Whamcloud - gitweb
b=23408 disable failure temporarily while we collect performance stats
[fs/lustre-release.git] / lustre / tests / ost-pools.sh
index 7f512bf..6b48a2a 100644 (file)
@@ -930,67 +930,76 @@ test_17() {
 }
 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"
@@ -1323,26 +1332,65 @@ test_25() {
         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