Whamcloud - gitweb
LU-3089 tests: Give ZFS more time to complete dd's
authorNathaniel Clark <nathaniel.l.clark@intel.com>
Tue, 30 Apr 2013 19:33:21 +0000 (15:33 -0400)
committerOleg Drokin <oleg.drokin@intel.com>
Thu, 6 Jun 2013 03:19:08 +0000 (23:19 -0400)
Due to LU-2887 and ilk, give zfs more time to do disk transfers.  Also
cleanup test formatting.

Signed-off-by: Nathaniel Clark <nathaniel.l.clark@intel.com>
Change-Id: Ia22f2244ccec552046d2efeaeaa6e2194547c96c
Reviewed-on: http://review.whamcloud.com/6217
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-by: Jian Yu <jian.yu@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/tests/recovery-small.sh

index be0c6a1..18cfcc0 100755 (executable)
@@ -1060,57 +1060,58 @@ test_55() {
 
        mkdir -p $DIR/$tdir
 
+       # Minimum pass speed is 2MBps
+       local ddtimeout=64
+       # LU-2887/LU-3089 - set min pass speed to 500KBps
+       [ "$(facet_fstype ost1)" = "zfs" ] && ddtimeout=256
+
        # first dd should be finished quickly
        $LFS setstripe -c 1 -i 0 $DIR/$tdir/$tfile-1
-       dd if=/dev/zero of=$DIR/$tdir/$tfile-1 bs=32M count=4  &
+       dd if=/dev/zero of=$DIR/$tdir/$tfile-1 bs=32M count=4 &
        DDPID=$!
        count=0
        echo  "step1: testing ......"
-       while [ true ]; do
-           if [ -z `ps x | awk '$1 == '$DDPID' { print $5 }'` ]; then break; fi
-           count=$[count+1]
-           if [ $count -gt 64 ]; then
-               error "dd should be finished!"
-           fi
-           sleep 1
-       done    
+       while kill -0 $DDPID 2> /dev/null; do
+               let count++
+               if [ $count -gt $ddtimeout ]; then
+                       error "dd should be finished!"
+               fi
+               sleep 1
+       done
        echo "(dd_pid=$DDPID, time=$count)successful"
 
        $LFS setstripe -c 1 -i 0 $DIR/$tdir/$tfile-2
        #define OBD_FAIL_OST_DROP_REQ            0x21d
        do_facet ost1 lctl set_param fail_loc=0x0000021d
        # second dd will be never finished
-       dd if=/dev/zero of=$DIR/$tdir/$tfile-2 bs=32M count=4  &        
+       dd if=/dev/zero of=$DIR/$tdir/$tfile-2 bs=32M count=4 &
        DDPID=$!
        count=0
        echo  "step2: testing ......"
-       while [ $count -le 64 ]; do
-           dd_name="`ps x | awk '$1 == '$DDPID' { print $5 }'`"            
-           if [ -z  $dd_name ]; then 
-                ls -l $DIR/$tdir
-               echo  "debug: (dd_name=$dd_name, dd_pid=$DDPID, time=$count)"
-               error "dd shouldn't be finished!"
-           fi
-           count=$[count+1]
-           sleep 1
-       done    
+       while [ $count -le $ddtimeout ]; do
+               if ! kill -0 $DDPID 2> /dev/null; then
+                       ls -l $DIR/$tdir
+                       error "dd shouldn't be finished! (time=$count)"
+               fi
+               let count++
+               sleep 1
+       done
        echo "(dd_pid=$DDPID, time=$count)successful"
 
        #Recover fail_loc and dd will finish soon
        do_facet ost1 lctl set_param fail_loc=0
        count=0
        echo  "step3: testing ......"
-       while [ true ]; do
-           if [ -z `ps x | awk '$1 == '$DDPID' { print $5 }'` ]; then break; fi
-           count=$[count+1]
-           if [ $count -gt 500 ]; then
-               error "dd should be finished!"
-           fi
-           sleep 1
-       done    
+       while kill -0 $DDPID 2> /dev/null; do
+               let count++
+               if [ $count -gt $((ddtimeout + 440)) ]; then
+                       error "dd should be finished!"
+               fi
+               sleep 1
+       done
        echo "(dd_pid=$DDPID, time=$count)successful"
 
-        rm -rf $DIR/$tdir
+       rm -rf $DIR/$tdir
 }
 run_test 55 "ost_brw_read/write drops timed-out read/write request"