]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test: wait_for_clean() add sleep backoff
authorDavid Zafman <dzafman@redhat.com>
Tue, 15 Nov 2016 20:33:01 +0000 (12:33 -0800)
committerDavid Zafman <dzafman@redhat.com>
Wed, 16 Nov 2016 19:01:43 +0000 (11:01 -0800)
Reduce size of log on timeout by doing a backoff so that
we don't log 3000 loops at 1/10 second sleeps.

Signed-off-by: David Zafman <dzafman@redhat.com>
qa/workunits/ceph-helpers.sh

index f441830a142c8f3447edf72978674bb020c8ecda..e1825b72cab07c3ba330b3fddbd2cdab4aeee4e1 100755 (executable)
@@ -1085,8 +1085,14 @@ function wait_for_clean() {
     local num_active_clean=-1
     local cur_active_clean
     local -i timer=0
+    local -i loops=0
+    local -i phase=0
     local num_pgs=$(get_num_pgs)
     test $num_pgs != 0 || return 1
+    local TENTH_TIMEOUT=($TIMEOUT * 10)
+    # The first phase 10 times (1 second) second phase an additional 15 times (15 seconds)
+    local backoff_phases=( 10 15 -1 )
+    local sleep_backoff=( .1    1   10)
 
     while true ; do
         # Comparing get_num_active_clean & get_num_pgs is used to determine
@@ -1095,16 +1101,21 @@ function wait_for_clean() {
         cur_active_clean=$(get_num_active_clean)
         test $cur_active_clean = $num_pgs && break
         if test $cur_active_clean != $num_active_clean ; then
-            timer=0
+            timer=0 ; loops=0 ; phase=0
             num_active_clean=$cur_active_clean
         elif get_is_making_recovery_progress ; then
-            timer=0
-        elif (( timer >= $(($TIMEOUT * 10)))) ; then
+            timer=0 ; loops=0 ; phase=0
+        elif (( timer >= $TENTH_TIMEOUT)) ; then
             ceph report
             return 1
         fi
-        sleep .1
-        timer=$(expr $timer + 1)
+        sleep ${sleep_backoff[$phase]}
+        timer="$(echo $timer + ${sleep_backoff[$phase]} \* 10 | bc | cut -d. -f1)"
+        loops=$(expr $loops + 1)
+        if (( $loops == ${backoff_phases[$phase]} )); then
+          phase=$(expr $phase + 1)
+          loop=0
+        fi
     done
     return 0
 }