gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r30766 - gnunet/src/ats
Date: Mon, 18 Nov 2013 12:39:27 +0100

Author: wachs
Date: 2013-11-18 12:39:27 +0100 (Mon, 18 Nov 2013)
New Revision: 30766

Modified:
   gnunet/src/ats/gnunet-service-ats_addresses.c
Log:
allocation evaluation


Modified: gnunet/src/ats/gnunet-service-ats_addresses.c
===================================================================
--- gnunet/src/ats/gnunet-service-ats_addresses.c       2013-11-18 11:20:12 UTC 
(rev 30765)
+++ gnunet/src/ats/gnunet-service-ats_addresses.c       2013-11-18 11:39:27 UTC 
(rev 30766)
@@ -292,16 +292,21 @@
   /**
    * Address suggestion requests DLL head
    */
-  struct GAS_Addresses_Suggestion_Requests *r_head;
+  struct GAS_Addresses_Suggestion_Requests *pending_requests_head;
 
   /**
    * Address suggestion requests DLL tail
    */
-  struct GAS_Addresses_Suggestion_Requests *r_tail;
+  struct GAS_Addresses_Suggestion_Requests *pending_requests_tail;
 
-  /* Solver functions */
+  /**
+   * Solver functions
+   */
   struct GNUNET_ATS_PluginEnvironment env;
 
+  /**
+   * Solver plugin name as string
+   */
   char *plugin;
 };
 
@@ -1130,7 +1135,7 @@
 GAS_addresses_request_address_cancel (struct GAS_Addresses_Handle *handle,
     const struct GNUNET_PeerIdentity *peer)
 {
-  struct GAS_Addresses_Suggestion_Requests *cur = handle->r_head;
+  struct GAS_Addresses_Suggestion_Requests *cur = 
handle->pending_requests_head;
 
   GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Received request: `%s' for peer %s\n",
       "request_address_cancel", GNUNET_i2s (peer));
@@ -1153,7 +1158,7 @@
   GAS_addresses_handle_backoff_reset (handle, peer);
   GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Removed request pending for peer `%s\n",
       GNUNET_i2s (peer));
-  GNUNET_CONTAINER_DLL_remove(handle->r_head, handle->r_tail, cur);
+  GNUNET_CONTAINER_DLL_remove(handle->pending_requests_head, 
handle->pending_requests_tail, cur);
   GNUNET_free(cur);
 }
 
@@ -1168,7 +1173,7 @@
 GAS_addresses_request_address (struct GAS_Addresses_Handle *handle,
     const struct GNUNET_PeerIdentity *peer)
 {
-  struct GAS_Addresses_Suggestion_Requests *cur = handle->r_head;
+  struct GAS_Addresses_Suggestion_Requests *cur = 
handle->pending_requests_head;
   struct ATS_Address *aa;
 
   GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Received `%s' for peer `%s'\n",
@@ -1189,16 +1194,9 @@
     GNUNET_log(GNUNET_ERROR_TYPE_DEBUG,
         "Adding new address suggestion request for `%s'\n",
          GNUNET_i2s (peer));
-    GNUNET_CONTAINER_DLL_insert(handle->r_head, handle->r_tail, cur);
+    GNUNET_CONTAINER_DLL_insert(handle->pending_requests_head, 
handle->pending_requests_tail, cur);
   }
 
-  /*
-   * Debuging information about addresses
-   *
-   * GNUNET_CONTAINER_multihashmap_get_multiple(handle->addresses,
-   *  &peer->hashPubKey, &addrinfo_it, (void *) peer);
-   */
-
   /* Get prefered address from solver */
   aa = (struct ATS_Address *) handle->env.sf.s_get (handle->solver, peer);
   if (NULL == aa)
@@ -1273,15 +1271,55 @@
                                                                   
&reset_address_it, NULL));
 }
 
+static int
+eval_count_active_it (void *cls, const struct GNUNET_PeerIdentity *id, void 
*obj)
+{
+  int *request_fulfilled = cls;
+  struct ATS_Address *addr = obj;
+
+  if (GNUNET_YES == addr->active)
+    (*request_fulfilled) = GNUNET_YES;
+
+  if (*request_fulfilled == GNUNET_YES)
+    return GNUNET_NO;
+  else
+    return GNUNET_YES;
+}
+
 /**
- * Evaluathe current bandwidth assignment
+ * Evaluate current bandwidth assignment
+ *
+ * @param ah address handle
  */
 void
 GAS_addresses_evaluate_assignment (struct GAS_Addresses_Handle *ah)
 {
+  struct GAS_Addresses_Suggestion_Requests *cur;
+  unsigned int requests_pending;
+  unsigned int requests_fulfilled;
+
   GNUNET_assert (NULL != ah);
-  GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Current assignment has quality: Not 
implemented!\n");
+  GNUNET_assert (NULL != ah->addresses);
 
+  requests_pending = 0;
+  requests_fulfilled = 0;
+  /* 1) How many requests could be fulfilled? */
+  for (cur = ah->pending_requests_head; NULL != cur; cur = cur->next)
+  {
+
+    GNUNET_CONTAINER_multipeermap_get_multiple (ah->addresses,
+        &cur->id, &eval_count_active_it, &requests_fulfilled);
+    if (GNUNET_YES == requests_fulfilled)
+      requests_fulfilled ++;
+    requests_pending ++;
+  }
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%u pending requests, %u requests 
fullfilled\n",
+      requests_pending, requests_fulfilled);
+
+
+  /* 2) How well is bandwidth utilized? */
+
+  /* 3) How well does selection match application requirements */
 }
 
 /**
@@ -1677,7 +1715,7 @@
   GAS_performance_notify_all_clients (&address->peer, address->plugin,
       address->addr, address->addr_len, address->session_id, address->atsi,
       address->atsi_count, address->assigned_bw_out, address->assigned_bw_in);
-  cur = handle->r_head;
+  cur = handle->pending_requests_head;
   while (NULL != cur)
   {
     if (0 == memcmp (&address->peer, &cur->id, sizeof(cur->id)))
@@ -1789,7 +1827,7 @@
 
   load_quotas (cfg, quotas_in, quotas_out, GNUNET_ATS_NetworkTypeCount);
   ah->env.info_cb = &solver_info_cb;
-  ah->env.info_cb_cls = &ah;
+  ah->env.info_cb_cls = ah;
   ah->env.bandwidth_changed_cb = &bandwidth_changed_cb;
   ah->env.bw_changed_cb_cls = ah;
   ah->env.get_preferences = &get_preferences_cb;
@@ -1914,9 +1952,9 @@
   handle->running = GNUNET_NO;
   GNUNET_CONTAINER_multipeermap_destroy (handle->addresses);
   handle->addresses = NULL;
-  while (NULL != (cur = handle->r_head))
+  while (NULL != (cur = handle->pending_requests_head))
   {
-    GNUNET_CONTAINER_DLL_remove(handle->r_head, handle->r_tail, cur);
+    GNUNET_CONTAINER_DLL_remove(handle->pending_requests_head, 
handle->pending_requests_tail, cur);
     GNUNET_free(cur);
   }
 




reply via email to

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