bozo: cap retry delay
authorMichael Meffie <mmeffie@sinenomine.net>
Tue, 20 Aug 2013 20:48:34 +0000 (16:48 -0400)
committerDerrick Brashear <shadow@your-file-system.com>
Mon, 23 Sep 2013 02:17:25 +0000 (19:17 -0700)
Cap the retry delay to a reasonable amount of time instead
of just doubling the delay until it reaches 16 hours.

Change-Id: Ibc7dd75670a9b02f34050842b6e54df4f5a7c315
Reviewed-on: http://gerrit.openafs.org/10148
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
Tested-by: BuildBot <buildbot@rampaginggeek.com>

src/bozo/bnode.c

index 6f8f99b..7527474 100644 (file)
@@ -32,6 +32,7 @@
 
 #define BNODE_LWP_STACKSIZE    (16 * 1024)
 #define BNODE_ERROR_COUNT_MAX   16   /* maximum number of retries */
+#define BNODE_ERROR_DELAY_MAX   60   /* maximum retry delay (seconds) */
 
 int bnode_waiting = 0;
 static PROCESS bproc_pid;      /* pid of waker-upper */
@@ -657,9 +658,12 @@ bproc(void *unused)
                        } else {
                            tb->errorStopCount++;
                            if (!tb->errorStopDelay) {
-                               tb->errorStopDelay = 1;
+                               tb->errorStopDelay = 1;   /* wait a second, then retry */
                            } else {
-                               tb->errorStopDelay *= 2;
+                               tb->errorStopDelay *= 2;  /* ramp up the retry delays */
+                           }
+                           if (tb->errorStopDelay > BNODE_ERROR_DELAY_MAX) {
+                               tb->errorStopDelay = BNODE_ERROR_DELAY_MAX; /* cap the delay */
                            }
                        }
                        tb->flags |= BNODE_ERRORSTOP;