-use backoff for reconnects
authorChristian Grothoff <christian@grothoff.org>
Mon, 9 Feb 2015 12:17:18 +0000 (12:17 +0000)
committerChristian Grothoff <christian@grothoff.org>
Mon, 9 Feb 2015 12:17:18 +0000 (12:17 +0000)
src/ats/ats_api_connectivity.c
src/ats/ats_api_performance.c
src/ats/ats_api_scheduling.c

index f20743dc2fdb61f52d4b0d58589c059ed6337353..432f1ca359ed7d8acef13a29d66629516f6cd1cc 100644 (file)
@@ -78,6 +78,10 @@ struct GNUNET_ATS_ConnectivityHandle
    */
   struct GNUNET_SCHEDULER_Task *task;
 
+  /**
+   * Reconnect backoff delay.
+   */
+  struct GNUNET_TIME_Relative backoff;
 };
 
 
@@ -125,7 +129,8 @@ force_reconnect (struct GNUNET_ATS_ConnectivityHandle *ch)
     GNUNET_CLIENT_disconnect (ch->client);
     ch->client = NULL;
   }
-  ch->task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+  ch->backoff = GNUNET_TIME_STD_BACKOFF (ch->backoff);
+  ch->task = GNUNET_SCHEDULER_add_delayed (ch->backoff,
                                            &reconnect_task,
                                            ch);
 }
index 19e769bd38f94fdac00b4e4fb45eab721d3f7acc..e81f0d394368bfdecd01ada943ab9b35e7d73d30 100644 (file)
@@ -221,7 +221,12 @@ struct GNUNET_ATS_PerformanceHandle
   /**
    * Task to trigger reconnect.
    */
-  struct GNUNET_SCHEDULER_Task * task;
+  struct GNUNET_SCHEDULER_Task *task;
+
+  /**
+   * Reconnect backoff delay.
+   */
+  struct GNUNET_TIME_Relative backoff;
 
   /**
    * Monitor request multiplexing
@@ -609,6 +614,7 @@ process_ats_message (void *cls,
     GNUNET_break(0);
     goto reconnect;
   }
+  ph->backoff = GNUNET_TIME_UNIT_ZERO;
   GNUNET_CLIENT_receive (ph->client,
                          &process_ats_message,
                          ph,
@@ -635,8 +641,10 @@ process_ats_message (void *cls,
                       GNUNET_BANDWIDTH_value_init (0),
                       NULL, 0);
   }
-  ph->task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
-                                           &reconnect_task, ph);
+  ph->backoff = GNUNET_TIME_STD_BACKOFF (ph->backoff);
+  ph->task = GNUNET_SCHEDULER_add_delayed (ph->backoff,
+                                           &reconnect_task,
+                                           ph);
 }
 
 
index 1ed89e86e030374f43f0f65da148454c83dcb16a..fb6df4494e6cf4a91f700144bbc1fc297bbc48ab 100644 (file)
@@ -144,6 +144,11 @@ struct GNUNET_ATS_SchedulingHandle
    */
   struct GNUNET_SCHEDULER_Task *task;
 
+  /**
+   * Reconnect backoff delay.
+   */
+  struct GNUNET_TIME_Relative backoff;
+
   /**
    * Size of the @e session_array.
    */
@@ -200,7 +205,8 @@ force_reconnect (struct GNUNET_ATS_SchedulingHandle *sh)
                   NULL, NULL, NULL,
                   GNUNET_BANDWIDTH_ZERO,
                   GNUNET_BANDWIDTH_ZERO);
-  sh->task = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS,
+  sh->backoff = GNUNET_TIME_STD_BACKOFF (sh->backoff);
+  sh->task = GNUNET_SCHEDULER_add_delayed (sh->backoff,
                                            &reconnect_task,
                                            sh);
 }
@@ -432,6 +438,7 @@ process_ats_address_suggestion_message (void *cls,
     GNUNET_break (0);
     return;
   }
+  sh->backoff = GNUNET_TIME_UNIT_ZERO;
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "ATS suggests address slot %u for peer `%s' using plugin %s\n",
               ar->slot,