gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r35287 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r35287 - gnunet/src/util
Date: Fri, 20 Feb 2015 13:46:17 +0100

Author: wachs
Date: 2015-02-20 13:46:17 +0100 (Fri, 20 Feb 2015)
New Revision: 35287

Modified:
   gnunet/src/util/helper.c
Log:
implement linear back off for restart attempts


Modified: gnunet/src/util/helper.c
===================================================================
--- gnunet/src/util/helper.c    2015-02-20 08:48:19 UTC (rev 35286)
+++ gnunet/src/util/helper.c    2015-02-20 12:46:17 UTC (rev 35287)
@@ -159,6 +159,10 @@
    */
   int with_control_pipe;
 
+  /**
+   * Count start attempts to increase linear back off
+   */
+  unsigned int retry_back_off;
 };
 
 
@@ -346,8 +350,9 @@
     }
     stop_helper (h, GNUNET_NO);
     /* Restart the helper */
-    h->restart_task =
-       GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, &restart_task, 
h);
+    h->restart_task = GNUNET_SCHEDULER_add_delayed(
+        GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
+            h->retry_back_off), &restart_task, h);
     return;
   }
   if (0 == t)
@@ -365,9 +370,9 @@
     }
     stop_helper (h, GNUNET_NO);
     /* Restart the helper */
-    h->restart_task =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
-                                   &restart_task, h);
+    h->restart_task = GNUNET_SCHEDULER_add_delayed(
+        GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
+            h->retry_back_off), &restart_task, h);
     return;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -390,9 +395,9 @@
     }
     stop_helper (h, GNUNET_NO);
     /* Restart the helper */
-    h->restart_task =
-        GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
-                                      &restart_task, h);
+    h->restart_task = GNUNET_SCHEDULER_add_delayed(
+        GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
+            h->retry_back_off), &restart_task, h);
     return;
   }
 }
@@ -413,8 +418,9 @@
     /* out of file descriptors? try again later... */
     stop_helper (h, GNUNET_NO);
     h->restart_task =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
-                                   &restart_task, h);
+      GNUNET_SCHEDULER_add_delayed(
+          GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
+              h->retry_back_off), &restart_task, h);
     return;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -433,9 +439,9 @@
   {
     /* failed to start process? try again later... */
     stop_helper (h, GNUNET_NO);
-    h->restart_task =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
-                                   &restart_task, h);
+    h->restart_task = GNUNET_SCHEDULER_add_delayed(
+        GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
+            h->retry_back_off), &restart_task, h);
     return;
   }
   GNUNET_DISK_pipe_close_end (h->helper_out, GNUNET_DISK_PIPE_END_WRITE);
@@ -461,6 +467,8 @@
   struct GNUNET_HELPER_Handle*h = cls;
 
   h->restart_task = NULL;
+  h->retry_back_off++;
+  GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%u\n",h->retry_back_off);
   start_helper (h);
 }
 
@@ -508,6 +516,7 @@
   if (NULL != cb)
     h->mst = GNUNET_SERVER_mst_create (cb, h->cb_cls);
   h->exp_cb = exp_cb;
+  h->retry_back_off = 0;
   start_helper (h);
   return h;
 }
@@ -619,9 +628,9 @@
                "Stopping and restarting helper task!\n");
     stop_helper (h, GNUNET_NO);
     /* Restart the helper */
-    h->restart_task =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
-                                   &restart_task, h);
+      h->restart_task = GNUNET_SCHEDULER_add_delayed(
+          GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_SECONDS,
+              h->retry_back_off), &restart_task, h);
     return;
   }
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,




reply via email to

[Prev in Thread] Current Thread [Next in Thread]