gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r29337 - gnunet/src/ats
Date: Mon, 16 Sep 2013 22:23:53 +0200

Author: wachs
Date: 2013-09-16 22:23:52 +0200 (Mon, 16 Sep 2013)
New Revision: 29337

Modified:
   gnunet/src/ats/gnunet-service-ats-solver_proportional.c
   gnunet/src/ats/gnunet-service-ats_addresses.c
Log:
speed up address suggestions


Modified: gnunet/src/ats/gnunet-service-ats-solver_proportional.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats-solver_proportional.c     2013-09-16 
19:47:40 UTC (rev 29336)
+++ gnunet/src/ats/gnunet-service-ats-solver_proportional.c     2013-09-16 
20:23:52 UTC (rev 29337)
@@ -229,6 +229,11 @@
   const struct GNUNET_CONTAINER_MultiHashMap *addresses;
 
   /**
+   * Pending address requests
+   */
+  struct GNUNET_CONTAINER_MultiHashMap *requests;
+
+  /**
    * Bandwidth changed callback
    */
   GAS_bandwidth_changed_cb bw_changed;
@@ -533,44 +538,44 @@
 
   }
   LOG (GNUNET_ERROR_TYPE_DEBUG,
-                          "Total bandwidth assigned is (in/out): %llu /%llu\n",
-                          quota_in_used,
-                          quota_out_used);
+    "Total bandwidth assigned is (in/out): %llu /%llu\n",
+    quota_in_used,
+    quota_out_used);
   if (quota_out_used > net->total_quota_out + 1) /* +1 is required due to 
rounding errors */
   {
-      LOG (GNUNET_ERROR_TYPE_ERROR,
-                            "Total outbound bandwidth assigned is larger than 
allowed (used/allowed) for %u active addresses: %llu / %llu\n",
-                            net->active_addresses,
-                            quota_out_used,
-                            net->total_quota_out);
+    LOG (GNUNET_ERROR_TYPE_ERROR,
+      "Total outbound bandwidth assigned is larger than allowed (used/allowed) 
for %u active addresses: %llu / %llu\n",
+      net->active_addresses,
+      quota_out_used,
+      net->total_quota_out);
   }
   if (quota_in_used > net->total_quota_in + 1) /* +1 is required due to 
rounding errors */
   {
       LOG (GNUNET_ERROR_TYPE_ERROR,
-                            "Total inbound bandwidth assigned is larger than 
allowed (used/allowed) for %u active addresses: %llu / %llu\n",
-                            net->active_addresses,
-                            quota_in_used,
-                            net->total_quota_in);
+        "Total inbound bandwidth assigned is larger than allowed 
(used/allowed) for %u active addresses: %llu / %llu\n",
+        net->active_addresses,
+        quota_in_used,
+        net->total_quota_in);
   }
 }
 
 
 struct FindBestAddressCtx
 {
-       struct GAS_PROPORTIONAL_Handle *s;
-       struct ATS_Address *best;
+  struct GAS_PROPORTIONAL_Handle *s;
+  struct ATS_Address *best;
 };
 
 
 static int
 find_property_index (uint32_t type)
 {
-       int existing_types[] = GNUNET_ATS_QualityProperties;
-       int c;
-       for (c = 0; c < GNUNET_ATS_QualityPropertiesCount; c++)
-               if (existing_types[c] == type)
-                       return c;
-       return GNUNET_SYSERR;
+  int existing_types[] = GNUNET_ATS_QualityProperties;
+  int c;
+  for (c = 0; c < GNUNET_ATS_QualityPropertiesCount; c++)
+          if (existing_types[c] == type)
+                  return c;
+  return GNUNET_SYSERR;
 }
 
 /**
@@ -586,7 +591,7 @@
 static int
 find_best_address_it (void *cls, const struct GNUNET_HashCode * key, void 
*value)
 {
-       struct FindBestAddressCtx *fba_ctx = (struct FindBestAddressCtx *) cls;
+  struct FindBestAddressCtx *fba_ctx = (struct FindBestAddressCtx *) cls;
   struct ATS_Address *current = (struct ATS_Address *) value;
   struct GNUNET_TIME_Absolute now;
   struct Network *net = (struct Network *) current->solver_information;
@@ -695,11 +700,9 @@
 static void
 distribute_bandwidth_in_all_networks (struct GAS_PROPORTIONAL_Handle *s)
 {
-       int i;
-
-       for (i = 0; i < s->networks; i++)
-               distribute_bandwidth_in_network (s, &s->network_entries[i], 
NULL);
-
+  int i;
+  for (i = 0; i < s->networks; i++)
+          distribute_bandwidth_in_network (s, &s->network_entries[i], NULL);
 }
 
 
@@ -932,6 +935,11 @@
   GNUNET_assert (s != NULL);
   GNUNET_assert (peer != NULL);
 
+  /* Add to list of pending requests */
+  if (GNUNET_NO == GNUNET_CONTAINER_multihashmap_contains (s->requests, 
&peer->hashPubKey))
+    GNUNET_CONTAINER_multihashmap_put (s->requests, &peer->hashPubKey,
+        NULL, GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
+
   /* Get address with: stick to current address, lower distance, lower latency 
*/
   fba_ctx.s = s;
   fba_ctx.best = NULL;
@@ -940,11 +948,11 @@
                                               &find_best_address_it, &fba_ctx);
   if (NULL == fba_ctx.best)
   {
-    LOG (GNUNET_ERROR_TYPE_DEBUG, "Cannot suggest address for peer `%s'\n", 
GNUNET_i2s (peer));
+    LOG (GNUNET_ERROR_TYPE_INFO, "Cannot suggest address for peer `%s'\n", 
GNUNET_i2s (peer));
     return NULL;
   }
 
-  LOG (GNUNET_ERROR_TYPE_DEBUG, "Suggesting %s address %p for peer `%s'\n",
+  LOG (GNUNET_ERROR_TYPE_INFO, "Suggesting %s address %p for peer `%s'\n",
       (GNUNET_NO == fba_ctx.best->active) ? "inactive" : "active",
                fba_ctx.best, GNUNET_i2s (peer));
   net_cur = (struct Network *) fba_ctx.best->solver_information;
@@ -976,7 +984,7 @@
       prev->assigned_bw_out = BANDWIDTH_ZERO; /* no bandwidth assigned */
       if (GNUNET_SYSERR == addresse_decrement (s, net_prev, GNUNET_NO, 
GNUNET_YES))
         GNUNET_break (0);
-       distribute_bandwidth_in_network (s, net_prev, NULL);
+      distribute_bandwidth_in_network (s, net_prev, NULL);
   }
 
   if (GNUNET_NO == (is_bandwidth_available_in_network 
(fba_ctx.best->solver_information)))
@@ -987,7 +995,7 @@
 
   fba_ctx.best->active = GNUNET_YES;
   addresse_increment (s, net_cur, GNUNET_NO, GNUNET_YES);
-  distribute_bandwidth_in_network (s, net_cur, fba_ctx.best);
+  distribute_bandwidth_in_network (s, net_cur, NULL);
   return fba_ctx.best;
 }
 
@@ -1005,19 +1013,23 @@
   struct GAS_PROPORTIONAL_Handle *s = solver;
        struct ATS_Address *cur;
        struct Network *cur_net;
+
+  if (GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains (s->requests, 
&peer->hashPubKey))
+    GNUNET_CONTAINER_multihashmap_remove (s->requests, &peer->hashPubKey, 
NULL);
+
   cur = get_active_address (s, (struct GNUNET_CONTAINER_MultiHashMap *) 
s->addresses, peer);
   if (NULL != cur)
   {
-       /* Disabling current address */
-       cur_net = (struct Network *) cur->solver_information;
-       cur->active = GNUNET_NO; /* No active any longer */
-       cur->assigned_bw_in = BANDWIDTH_ZERO; /* no bandwidth assigned */
-       cur->assigned_bw_out = BANDWIDTH_ZERO; /* no bandwidth assigned */
-               if (GNUNET_SYSERR == addresse_decrement (s, cur_net, GNUNET_NO, 
GNUNET_YES))
-                       GNUNET_break (0);
-               distribute_bandwidth_in_network (s, cur_net, NULL);
+    /* Disabling current address */
+    cur_net = (struct Network *) cur->solver_information;
+    cur->active = GNUNET_NO; /* No active any longer */
+    cur->assigned_bw_in = BANDWIDTH_ZERO; /* no bandwidth assigned */
+    cur->assigned_bw_out = BANDWIDTH_ZERO; /* no bandwidth assigned */
+    if (GNUNET_SYSERR == addresse_decrement (s, cur_net, GNUNET_NO, 
GNUNET_YES))
+      GNUNET_break (0);
+    distribute_bandwidth_in_network (s, cur_net, NULL);
   }
-       return;
+  return;
 }
 
 
@@ -1162,10 +1174,10 @@
  */
 void
 GAS_proportional_address_property_changed (void *solver,
-                                                                               
                                        struct ATS_Address *address,
-                                                                               
                                        uint32_t type,
-                                                                               
                                        uint32_t abs_value,
-                                                                               
                                        double rel_value)
+                                          struct ATS_Address *address,
+                                          uint32_t type,
+                                          uint32_t abs_value,
+                                          double rel_value)
 {
        struct GAS_PROPORTIONAL_Handle *s;
        struct Network *n;
@@ -1214,9 +1226,9 @@
  */
 void
 GAS_proportional_address_session_changed (void *solver,
-                                                                               
                                        struct ATS_Address *address,
-                                                                               
                                        uint32_t cur_session,
-                                                                               
                                        uint32_t new_session)
+struct ATS_Address *address,
+uint32_t cur_session,
+uint32_t new_session)
 {
   if (cur_session!= new_session)
   {
@@ -1237,8 +1249,8 @@
  */
 void
 GAS_proportional_address_inuse_changed (void *solver,
-                                                                               
                                        struct ATS_Address *address,
-                                                                               
                                        int in_use)
+struct ATS_Address *address,
+int in_use)
 {
        LOG (GNUNET_ERROR_TYPE_DEBUG,
                                                        "Usage changed to %s\n",
@@ -1340,8 +1352,8 @@
  */
 void
 GAS_proportional_address_add (void *solver,
-                                                                               
                                        struct ATS_Address *address,
-                                                                               
                                        uint32_t network)
+                              struct ATS_Address *address,
+                              uint32_t network)
 {
   struct GAS_PROPORTIONAL_Handle *s = solver;
   struct Network *net = NULL;
@@ -1361,6 +1373,11 @@
   addresse_increment (s, net, GNUNET_YES, GNUNET_NO);
   aw->addr->solver_information = net;
 
+  if ((GNUNET_YES == GNUNET_CONTAINER_multihashmap_contains(s->requests, 
&address->peer.hashPubKey)) &&
+      (NULL == get_active_address (s,
+          (struct GNUNET_CONTAINER_MultiHashMap *) s->addresses, 
&address->peer)))
+      GAS_proportional_get_preferred_address (s, &address->peer);
+
   LOG (GNUNET_ERROR_TYPE_DEBUG, "After adding address now total %u and active 
%u addresses in network `%s'\n",
       net->total_addresses,
       net->active_addresses,
@@ -1438,6 +1455,8 @@
   s->bulk_lock = GNUNET_NO;
   s->addresses = addresses;
 
+  s->requests = GNUNET_CONTAINER_multihashmap_create (10, GNUNET_YES);
+
   for (c = 0; c < dest_length; c++)
   {
       cur = &s->network_entries[c];
@@ -1515,6 +1534,7 @@
     GNUNET_break (0);
   }
   GNUNET_free (s->network_entries);
+  GNUNET_CONTAINER_multihashmap_destroy (s->requests);
   GNUNET_free (s);
 }
 

Modified: gnunet/src/ats/gnunet-service-ats_addresses.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.c       2013-09-16 19:47:40 UTC 
(rev 29336)
+++ gnunet/src/ats/gnunet-service-ats_addresses.c       2013-09-16 20:23:52 UTC 
(rev 29337)
@@ -1332,7 +1332,7 @@
     return;
   }
 
-  GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
               "Suggesting address %p for peer `%s'\n", aa, GNUNET_i2s (peer));
 
   GAS_scheduling_transmit_address_suggestion (peer,




reply via email to

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