aboutsummaryrefslogtreecommitdiff
path: root/src/ats
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-11-19 12:40:04 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-11-19 12:40:04 +0000
commitf2554d328813646fe2bf6771ea269578b9961622 (patch)
tree04e82cd9bb13dac95b91ed9bcaad228ae66d3dcc /src/ats
parent8dda13088674ec864e3133e8a5770e01704e8409 (diff)
downloadgnunet-f2554d328813646fe2bf6771ea269578b9961622.tar.gz
gnunet-f2554d328813646fe2bf6771ea269578b9961622.zip
- reduce debug level in proportional
- store pref client in DLL - remove disconnected clients
Diffstat (limited to 'src/ats')
-rw-r--r--src/ats/gnunet-service-ats_addresses.c99
-rw-r--r--src/ats/gnunet-service-ats_addresses.h14
-rw-r--r--src/ats/gnunet-service-ats_normalization.c54
-rw-r--r--src/ats/gnunet-service-ats_normalization.h10
-rw-r--r--src/ats/gnunet-service-ats_performance.c3
-rw-r--r--src/ats/libgnunet_plugin_ats_proportional.c6
6 files changed, 164 insertions, 22 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c
index 154838a00..746dbd7e3 100644
--- a/src/ats/gnunet-service-ats_addresses.c
+++ b/src/ats/gnunet-service-ats_addresses.c
@@ -249,6 +249,27 @@ struct GAS_Addresses_Suggestion_Requests
249 struct GNUNET_PeerIdentity id; 249 struct GNUNET_PeerIdentity id;
250}; 250};
251 251
252 /**
253 * Pending Address suggestion requests
254 */
255 struct GAS_Addresses_Preference_Clients
256 {
257 /**
258 * Next in DLL
259 */
260 struct GAS_Addresses_Preference_Clients *next;
261
262 /**
263 * Previous in DLL
264 */
265 struct GAS_Addresses_Preference_Clients *prev;
266
267 /**
268 * Peer ID
269 */
270 void *client;
271 };
272
252/** 273/**
253 * Handle for ATS address component 274 * Handle for ATS address component
254 */ 275 */
@@ -290,6 +311,16 @@ struct GAS_Addresses_Handle
290 struct GAS_Addresses_Suggestion_Requests *pending_requests_tail; 311 struct GAS_Addresses_Suggestion_Requests *pending_requests_tail;
291 312
292 /** 313 /**
314 * Address suggestion requests DLL head
315 */
316 struct GAS_Addresses_Preference_Clients *preference_clients_head;
317
318 /**
319 * Address suggestion requests DLL head
320 */
321 struct GAS_Addresses_Preference_Clients *preference_clients_tail;
322
323 /**
293 * Solver functions 324 * Solver functions
294 */ 325 */
295 struct GNUNET_ATS_PluginEnvironment env; 326 struct GNUNET_ATS_PluginEnvironment env;
@@ -636,7 +667,7 @@ find_exact_address (struct GAS_Addresses_Handle *handle,
636const double * 667const double *
637get_preferences_cb (void *cls, const struct GNUNET_PeerIdentity *id) 668get_preferences_cb (void *cls, const struct GNUNET_PeerIdentity *id)
638{ 669{
639 return GAS_normalization_get_preferences (id); 670 return GAS_normalization_get_preferences_by_peer (id);
640} 671}
641 672
642/** 673/**
@@ -1365,7 +1396,7 @@ struct RelativityContext {
1365 struct GAS_Addresses_Handle *ah; 1396 struct GAS_Addresses_Handle *ah;
1366}; 1397};
1367 1398
1368 1399#if 0
1369static int 1400static int
1370eval_preference_relativity (void *cls, const struct GNUNET_PeerIdentity *id, void *obj) 1401eval_preference_relativity (void *cls, const struct GNUNET_PeerIdentity *id, void *obj)
1371{ 1402{
@@ -1390,6 +1421,7 @@ eval_preference_relativity (void *cls, const struct GNUNET_PeerIdentity *id, voi
1390 1421
1391 return GNUNET_OK; 1422 return GNUNET_OK;
1392} 1423}
1424#endif
1393 1425
1394 1426
1395/** 1427/**
@@ -1401,6 +1433,7 @@ void
1401GAS_addresses_evaluate_assignment (struct GAS_Addresses_Handle *ah) 1433GAS_addresses_evaluate_assignment (struct GAS_Addresses_Handle *ah)
1402{ 1434{
1403 struct GAS_Addresses_Suggestion_Requests *cur; 1435 struct GAS_Addresses_Suggestion_Requests *cur;
1436 struct GAS_Addresses_Preference_Clients *pcur;
1404 int c; 1437 int c;
1405 1438
1406 float quality_requests_fulfilled = 0.0; 1439 float quality_requests_fulfilled = 0.0;
@@ -1491,11 +1524,13 @@ GAS_addresses_evaluate_assignment (struct GAS_Addresses_Handle *ah)
1491 } 1524 }
1492 1525
1493 /* 3) How well does selection match application requirements */ 1526 /* 3) How well does selection match application requirements */
1494 for (cur = ah->pending_requests_head; NULL != cur; cur = cur->next) 1527 include_requirements = GNUNET_NO;
1528 for (pcur = ah->preference_clients_head; NULL != pcur; pcur = pcur->next)
1495 { 1529 {
1496 GNUNET_CONTAINER_multipeermap_get_multiple (ah->addresses, 1530 /* V metrics*/
1497 &cur->id, &eval_preference_relativity, ah); 1531 {
1498 include_requirements = GNUNET_NO; 1532 /* V peers */
1533 }
1499 } 1534 }
1500 /* GUQ */ 1535 /* GUQ */
1501 1536
@@ -1656,7 +1691,40 @@ normalized_property_changed_cb (void *cls, struct ATS_Address *address,
1656 ah->env.sf.s_address_update_property (ah->solver, address, type, 0, prop_rel); 1691 ah->env.sf.s_address_update_property (ah->solver, address, type, 0, prop_rel);
1657} 1692}
1658 1693
1694static struct GAS_Addresses_Preference_Clients *
1695find_preference_client (struct GAS_Addresses_Handle *handle, void *client)
1696{
1697 struct GAS_Addresses_Preference_Clients *cur;
1698
1699 for (cur = handle->preference_clients_head; NULL != cur; cur = cur->next)
1700 {
1701 if (cur->client == client)
1702 return cur;
1703 }
1704 return NULL;
1705}
1706
1707/**
1708 * A performance client disconnected
1709 *
1710 * @param handle address handle
1711 * @param client the client
1712 */
1713
1714void
1715GAS_addresses_preference_client_disconnect (struct GAS_Addresses_Handle *handle,
1716 void *client)
1717{
1718 struct GAS_Addresses_Preference_Clients * pc;
1719 if (NULL != (pc = find_preference_client (handle, client)))
1720 {
1721 GNUNET_CONTAINER_DLL_remove (handle->preference_clients_head,
1722 handle->preference_clients_tail, pc);
1723 GNUNET_free (pc);
1724 }
1659 1725
1726 GAS_normalization_preference_client_disconnect (client);
1727}
1660 1728
1661/** 1729/**
1662 * Change the preference for a peer 1730 * Change the preference for a peer
@@ -1668,10 +1736,11 @@ normalized_property_changed_cb (void *cls, struct ATS_Address *address,
1668 * @param score_abs the new preference score 1736 * @param score_abs the new preference score
1669 */ 1737 */
1670void 1738void
1671GAS_addresses_change_preference (struct GAS_Addresses_Handle *handle, 1739GAS_addresses_preference_change (struct GAS_Addresses_Handle *handle,
1672 void *client, const struct GNUNET_PeerIdentity *peer, 1740 void *client, const struct GNUNET_PeerIdentity *peer,
1673 enum GNUNET_ATS_PreferenceKind kind, float score_abs) 1741 enum GNUNET_ATS_PreferenceKind kind, float score_abs)
1674{ 1742{
1743 struct GAS_Addresses_Preference_Clients * pc;
1675 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, 1744 GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
1676 "Received `%s' for peer `%s' for client %p\n", "CHANGE PREFERENCE", 1745 "Received `%s' for peer `%s' for client %p\n", "CHANGE PREFERENCE",
1677 GNUNET_i2s (peer), client); 1746 GNUNET_i2s (peer), client);
@@ -1689,6 +1758,14 @@ GAS_addresses_change_preference (struct GAS_Addresses_Handle *handle,
1689 return; 1758 return;
1690 } 1759 }
1691 1760
1761 if (NULL == find_preference_client (handle, client))
1762 {
1763 pc = GNUNET_malloc (sizeof (struct GAS_Addresses_Preference_Clients));
1764 pc->client = client;
1765 GNUNET_CONTAINER_DLL_insert (handle->preference_clients_head,
1766 handle->preference_clients_tail, pc);
1767 }
1768
1692 handle->env.sf.s_bulk_start (handle->solver); 1769 handle->env.sf.s_bulk_start (handle->solver);
1693 /* Tell normalization about change, normalization will call callback if preference changed */ 1770 /* Tell normalization about change, normalization will call callback if preference changed */
1694 GAS_normalization_normalize_preference (client, peer, kind, score_abs); 1771 GAS_normalization_normalize_preference (client, peer, kind, score_abs);
@@ -2110,6 +2187,7 @@ void
2110GAS_addresses_done (struct GAS_Addresses_Handle *handle) 2187GAS_addresses_done (struct GAS_Addresses_Handle *handle)
2111{ 2188{
2112 struct GAS_Addresses_Suggestion_Requests *cur; 2189 struct GAS_Addresses_Suggestion_Requests *cur;
2190 struct GAS_Addresses_Preference_Clients *pcur;
2113 2191
2114 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Shutting down addresses\n"); 2192 GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Shutting down addresses\n");
2115 GNUNET_assert(NULL != handle); 2193 GNUNET_assert(NULL != handle);
@@ -2123,6 +2201,13 @@ GAS_addresses_done (struct GAS_Addresses_Handle *handle)
2123 GNUNET_free(cur); 2201 GNUNET_free(cur);
2124 } 2202 }
2125 2203
2204 while (NULL != (pcur = handle->preference_clients_head))
2205 {
2206 GNUNET_CONTAINER_DLL_remove (handle->preference_clients_head,
2207 handle->preference_clients_tail, pcur);
2208 GNUNET_free (pcur);
2209 }
2210
2126 GNUNET_PLUGIN_unload (handle->plugin, handle->solver); 2211 GNUNET_PLUGIN_unload (handle->plugin, handle->solver);
2127 GNUNET_free (handle->plugin); 2212 GNUNET_free (handle->plugin);
2128 GNUNET_free(handle); 2213 GNUNET_free(handle);
diff --git a/src/ats/gnunet-service-ats_addresses.h b/src/ats/gnunet-service-ats_addresses.h
index 2f1c58705..887eeee81 100644
--- a/src/ats/gnunet-service-ats_addresses.h
+++ b/src/ats/gnunet-service-ats_addresses.h
@@ -523,6 +523,18 @@ void
523GAS_addresses_handle_backoff_reset (struct GAS_Addresses_Handle *handle, 523GAS_addresses_handle_backoff_reset (struct GAS_Addresses_Handle *handle,
524 const struct GNUNET_PeerIdentity *peer); 524 const struct GNUNET_PeerIdentity *peer);
525 525
526
527/**
528 * A performance client disconnected
529 *
530 * @param handle address handle
531 * @param client the client
532 */
533
534void
535GAS_addresses_preference_client_disconnect (struct GAS_Addresses_Handle *handle,
536 void *client);
537
526/** 538/**
527 * Change the preference for a peer 539 * Change the preference for a peer
528 * 540 *
@@ -533,7 +545,7 @@ GAS_addresses_handle_backoff_reset (struct GAS_Addresses_Handle *handle,
533 * @param score_abs the new preference score 545 * @param score_abs the new preference score
534 */ 546 */
535void 547void
536GAS_addresses_change_preference (struct GAS_Addresses_Handle *handle, 548GAS_addresses_preference_change (struct GAS_Addresses_Handle *handle,
537 void *client, const struct GNUNET_PeerIdentity *peer, 549 void *client, const struct GNUNET_PeerIdentity *peer,
538 enum GNUNET_ATS_PreferenceKind kind, float score_abs); 550 enum GNUNET_ATS_PreferenceKind kind, float score_abs);
539 551
diff --git a/src/ats/gnunet-service-ats_normalization.c b/src/ats/gnunet-service-ats_normalization.c
index 954f2b5f5..96936332a 100644
--- a/src/ats/gnunet-service-ats_normalization.c
+++ b/src/ats/gnunet-service-ats_normalization.c
@@ -404,6 +404,7 @@ preference_aging (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
404 404
405} 405}
406 406
407
407/** 408/**
408 * Normalize an updated preference value 409 * Normalize an updated preference value
409 * 410 *
@@ -502,7 +503,7 @@ GAS_normalization_normalize_preference (void *src,
502 * default preferences if peer does not exist 503 * default preferences if peer does not exist
503 */ 504 */
504const double * 505const double *
505GAS_normalization_get_preferences (const struct GNUNET_PeerIdentity *id) 506GAS_normalization_get_preferences_by_peer (const struct GNUNET_PeerIdentity *id)
506{ 507{
507 GNUNET_assert(NULL != preference_peers); 508 GNUNET_assert(NULL != preference_peers);
508 GNUNET_assert(NULL != id); 509 GNUNET_assert(NULL != id);
@@ -809,6 +810,48 @@ GAS_normalization_normalize_property (struct GNUNET_CONTAINER_MultiPeerMap *addr
809 } 810 }
810} 811}
811 812
813
814static void
815free_client (struct PreferenceClient *pc)
816{
817 struct PreferencePeer *next_p;
818 struct PreferencePeer *p;
819 next_p = pc->p_head;
820 while (NULL != (p = next_p))
821 {
822 next_p = p->next;
823 GNUNET_CONTAINER_DLL_remove(pc->p_head, pc->p_tail, p);
824 GNUNET_free(p);
825 }
826 GNUNET_free(pc);
827}
828
829
830/**
831 * A performance client disconnected
832 *
833 * @param client the client
834 */
835
836void
837GAS_normalization_preference_client_disconnect (void *client)
838{
839 struct PreferenceClient *c_cur;
840 /* Find preference client */
841
842 for (c_cur = pc_head; NULL != c_cur; c_cur = c_cur->next)
843 {
844 if (client == c_cur->client)
845 break;
846 }
847 if (NULL == c_cur)
848 return;
849
850 GNUNET_CONTAINER_DLL_remove (pc_head, pc_tail, c_cur);
851 free_client (c_cur);
852}
853
854
812/** 855/**
813 * Start the normalization component 856 * Start the normalization component
814 * 857 *
@@ -893,14 +936,7 @@ GAS_normalization_stop ()
893 { 936 {
894 next_pc = pc->next; 937 next_pc = pc->next;
895 GNUNET_CONTAINER_DLL_remove(pc_head, pc_tail, pc); 938 GNUNET_CONTAINER_DLL_remove(pc_head, pc_tail, pc);
896 next_p = pc->p_head; 939 free_client (pc);
897 while (NULL != (p = next_p))
898 {
899 next_p = p->next;
900 GNUNET_CONTAINER_DLL_remove(pc->p_head, pc->p_tail, p);
901 GNUNET_free(p);
902 }
903 GNUNET_free(pc);
904 } 940 }
905 941
906 GNUNET_CONTAINER_multipeermap_iterate (preference_peers, &free_peer, NULL ); 942 GNUNET_CONTAINER_multipeermap_iterate (preference_peers, &free_peer, NULL );
diff --git a/src/ats/gnunet-service-ats_normalization.h b/src/ats/gnunet-service-ats_normalization.h
index 1f0d081d4..43b07910f 100644
--- a/src/ats/gnunet-service-ats_normalization.h
+++ b/src/ats/gnunet-service-ats_normalization.h
@@ -55,7 +55,7 @@ typedef void
55 * with GNUNET_ATS_PreferenceKind, NULL if peer does not exist 55 * with GNUNET_ATS_PreferenceKind, NULL if peer does not exist
56 */ 56 */
57const double * 57const double *
58GAS_normalization_get_preferences (const struct GNUNET_PeerIdentity *id); 58GAS_normalization_get_preferences_by_peer (const struct GNUNET_PeerIdentity *id);
59 59
60 60
61/** 61/**
@@ -99,6 +99,14 @@ GAS_normalization_normalize_property (struct GNUNET_CONTAINER_MultiPeerMap *addr
99 99
100 100
101/** 101/**
102 * A performance client disconnected
103 *
104 * @param client the disconnecting client
105 */
106void
107GAS_normalization_preference_client_disconnect (void *client);
108
109/**
102 * Start the normalization component 110 * Start the normalization component
103 * 111 *
104 * @param pref_ch_cb callback to call on relative preference changing 112 * @param pref_ch_cb callback to call on relative preference changing
diff --git a/src/ats/gnunet-service-ats_performance.c b/src/ats/gnunet-service-ats_performance.c
index d94b0a7e6..8aad96eea 100644
--- a/src/ats/gnunet-service-ats_performance.c
+++ b/src/ats/gnunet-service-ats_performance.c
@@ -129,6 +129,7 @@ GAS_performance_remove_client (struct GNUNET_SERVER_Client *client)
129 if (NULL == pc) 129 if (NULL == pc)
130 return; 130 return;
131 GNUNET_CONTAINER_DLL_remove (pc_head, pc_tail, pc); 131 GNUNET_CONTAINER_DLL_remove (pc_head, pc_tail, pc);
132 GAS_addresses_preference_client_disconnect (GSA_addresses, client);
132 GNUNET_free (pc); 133 GNUNET_free (pc);
133} 134}
134 135
@@ -639,7 +640,7 @@ GAS_handle_preference_change (void *cls,
639 1, GNUNET_NO); 640 1, GNUNET_NO);
640 pi = (const struct PreferenceInformation *) &msg[1]; 641 pi = (const struct PreferenceInformation *) &msg[1];
641 for (i = 0; i < nump; i++) 642 for (i = 0; i < nump; i++)
642 GAS_addresses_change_preference (GSA_addresses, 643 GAS_addresses_preference_change (GSA_addresses,
643 client, 644 client,
644 &msg->peer, 645 &msg->peer,
645 (enum GNUNET_ATS_PreferenceKind) 646 (enum GNUNET_ATS_PreferenceKind)
diff --git a/src/ats/libgnunet_plugin_ats_proportional.c b/src/ats/libgnunet_plugin_ats_proportional.c
index 39524a17d..6118329b6 100644
--- a/src/ats/libgnunet_plugin_ats_proportional.c
+++ b/src/ats/libgnunet_plugin_ats_proportional.c
@@ -479,7 +479,7 @@ libgnunet_plugin_ats_proportional_done (void *cls)
479 479
480 if (s->network_entries[c].active_addresses > 0) 480 if (s->network_entries[c].active_addresses > 0)
481 { 481 {
482 LOG(GNUNET_ERROR_TYPE_ERROR, 482 LOG(GNUNET_ERROR_TYPE_DEBUG,
483 "Had %u active addresses for network `%s' not deleted during shutdown\n", 483 "Had %u active addresses for network `%s' not deleted during shutdown\n",
484 s->network_entries[c].active_addresses, s->network_entries[c].desc); 484 s->network_entries[c].active_addresses, s->network_entries[c].desc);
485 GNUNET_break(0); 485 GNUNET_break(0);
@@ -499,13 +499,13 @@ libgnunet_plugin_ats_proportional_done (void *cls)
499 } 499 }
500 if (s->total_addresses > 0) 500 if (s->total_addresses > 0)
501 { 501 {
502 LOG(GNUNET_ERROR_TYPE_ERROR, 502 LOG(GNUNET_ERROR_TYPE_DEBUG,
503 "Had %u addresses not deleted during shutdown\n", s->total_addresses); 503 "Had %u addresses not deleted during shutdown\n", s->total_addresses);
504 GNUNET_break(0); 504 GNUNET_break(0);
505 } 505 }
506 if (s->active_addresses > 0) 506 if (s->active_addresses > 0)
507 { 507 {
508 LOG(GNUNET_ERROR_TYPE_ERROR, 508 LOG(GNUNET_ERROR_TYPE_DEBUG,
509 "Had %u active addresses not deleted during shutdown\n", 509 "Had %u active addresses not deleted during shutdown\n",
510 s->active_addresses); 510 s->active_addresses);
511 GNUNET_break (0); 511 GNUNET_break (0);