[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,
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r29337 - gnunet/src/ats,
gnunet <=