gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r21536 - gnunet/src/ats


From: gnunet
Subject: [GNUnet-SVN] r21536 - gnunet/src/ats
Date: Wed, 16 May 2012 18:49:44 +0200

Author: wachs
Date: 2012-05-16 18:49:44 +0200 (Wed, 16 May 2012)
New Revision: 21536

Modified:
   gnunet/src/ats/gnunet-service-ats_addresses.c
   gnunet/src/ats/gnunet-service-ats_addresses.h
Log:
- suggestion throtteling as described in 2362


Modified: gnunet/src/ats/gnunet-service-ats_addresses.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.c       2012-05-16 15:43:30 UTC 
(rev 21535)
+++ gnunet/src/ats/gnunet-service-ats_addresses.c       2012-05-16 16:49:44 UTC 
(rev 21536)
@@ -37,6 +37,8 @@
 
 #define VERBOSE GNUNET_NO
 
+#define ATS_BLOCKING_DELTA 
GNUNET_TIME_relative_multiply(GNUNET_TIME_UNIT_MILLISECONDS, 100)
+
 enum ATS_Mode
 {
   /*
@@ -169,6 +171,8 @@
   aa->plugin = GNUNET_strdup (plugin_name);
   aa->session_id = session_id;
   aa->mlp_information = NULL;
+  aa->blocked_until = GNUNET_TIME_absolute_get_zero();
+  aa->block_interval = GNUNET_TIME_relative_get_zero();
   aa->next = NULL;
   aa->prev = NULL;
   return aa;
@@ -546,7 +550,27 @@
   struct ATS_Address **ap = cls;
   struct ATS_Address *aa = (struct ATS_Address *) value;
   struct ATS_Address *ab = *ap;
+  struct GNUNET_TIME_Absolute now;
 
+  now = GNUNET_TIME_absolute_get();
+
+  if (aa->blocked_until.abs_value == GNUNET_TIME_absolute_max (now, 
aa->blocked_until).abs_value)
+  {
+    /* This address is blocked for suggestion */
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Address %p blocked for suggestion for %llu ms \n",
+                aa,
+                GNUNET_TIME_absolute_get_difference(now, 
aa->blocked_until).rel_value);
+    return GNUNET_OK;
+  }
+
+
+  aa->block_interval = GNUNET_TIME_relative_add (aa->block_interval, 
ATS_BLOCKING_DELTA);
+  aa->blocked_until = GNUNET_TIME_absolute_add (now, aa->block_interval);
+
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Address %p ready for suggestion, block interval now %llu \n", 
aa, aa->block_interval);
+
   if (NULL == ab)
   {
     *ap = aa;
@@ -678,6 +702,9 @@
     return;
   }
 
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG | GNUNET_ERROR_TYPE_BULK,
+              "Suggesting address %p for peer `%s'\n", aa, GNUNET_i2s (peer));
+
   if (aa->active == GNUNET_NO)
   {
     aa->active = GNUNET_YES;

Modified: gnunet/src/ats/gnunet-service-ats_addresses.h
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.h       2012-05-16 15:43:30 UTC 
(rev 21535)
+++ gnunet/src/ats/gnunet-service-ats_addresses.h       2012-05-16 16:49:44 UTC 
(rev 21536)
@@ -75,6 +75,16 @@
   struct GNUNET_BANDWIDTH_Value32NBO assigned_bw_out;
 
   /**
+   * Blocking interval
+   */
+  struct GNUNET_TIME_Relative block_interval;
+
+  /**
+   * Time when address can be suggested again
+   */
+  struct GNUNET_TIME_Absolute blocked_until;
+
+  /**
    * Is this the active address for this peer?
    */
   int active;




reply via email to

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