gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r34971 - gnunet/src/rps


From: gnunet
Subject: [GNUnet-SVN] r34971 - gnunet/src/rps
Date: Fri, 23 Jan 2015 00:08:42 +0100

Author: ch3
Date: 2015-01-23 00:08:42 +0100 (Fri, 23 Jan 2015)
New Revision: 34971

Modified:
   gnunet/src/rps/gnunet-service-rps.c
Log:
moved the client request rate estimation in fkt of its own

Modified: gnunet/src/rps/gnunet-service-rps.c
===================================================================
--- gnunet/src/rps/gnunet-service-rps.c 2015-01-22 23:07:14 UTC (rev 34970)
+++ gnunet/src/rps/gnunet-service-rps.c 2015-01-22 23:08:42 UTC (rev 34971)
@@ -683,6 +683,7 @@
   RPS_sampler_update_list (peer);
 }
 
+
 /**
  * Check whether #insert_in_sampler was already scheduled
  */
@@ -725,6 +726,45 @@
 }
 
 
+/**
+ * Estimate request rate
+ * 
+ * Called every time we receive a request from the client.
+ */
+  void
+est_request_rate()
+{
+  struct GNUNET_TIME_Relative max_round_duration;
+
+  if (request_deltas_size > req_counter)
+    req_counter++;
+  if ( 1 < req_counter)
+  {
+    /* Shift last request deltas to the right */
+    memcpy (&request_deltas[1],
+        request_deltas,
+        (req_counter - 1) * sizeof (struct GNUNET_TIME_Relative));
+
+    /* Add current delta to beginning */
+    request_deltas[0] = GNUNET_TIME_absolute_get_difference (last_request,
+        GNUNET_TIME_absolute_get ());
+    request_rate = T_relative_avg (request_deltas, req_counter);
+
+    /* Compute the duration a round will maximally take */
+    max_round_duration = GNUNET_TIME_relative_add (round_interval,
+        GNUNET_TIME_relative_divide (round_interval, 2));
+
+    /* Set the estimated size the sampler has to have to
+     * satisfy the current client request rate */
+    sampler_size_client_need = max_round_duration.rel_value_us / 
request_rate.rel_value_us;
+
+    /* Resize the sampler */
+    resize_wrapper ();
+  }
+  last_request = GNUNET_TIME_absolute_get ();
+}
+
+
 /***********************************************************************
  * /Util functions
 ***********************************************************************/
@@ -812,37 +852,15 @@
 {
   struct GNUNET_RPS_CS_RequestMessage *msg;
   uint32_t num_peers;
-  struct GNUNET_TIME_Relative max_round_duration;
+  uint32_t i;
 
-
-  /* Estimate request rate */
-  if (request_deltas_size > req_counter)
-    req_counter++;
-  if ( 1 < req_counter)
-  {
-    /* Shift last request deltas to the right */
-    memcpy (&request_deltas[1],
-        request_deltas,
-        (req_counter - 1) * sizeof (struct GNUNET_TIME_Relative));
-    /* Add current delta to beginning */
-    request_deltas[0] = GNUNET_TIME_absolute_get_difference (last_request,
-        GNUNET_TIME_absolute_get ());
-    request_rate = T_relative_avg (request_deltas, req_counter);
-
-    max_round_duration = GNUNET_TIME_relative_add (round_interval,
-        GNUNET_TIME_relative_divide (round_interval, 2));
-    sampler_size_client_need = max_round_duration.rel_value_us / 
request_rate.rel_value_us;
-
-    resize_wrapper ();
-  }
-  last_request = GNUNET_TIME_absolute_get ();
-
-
-  // TODO check message size
   msg = (struct GNUNET_RPS_CS_RequestMessage *) message;
 
   num_peers = ntohl (msg->num_peers);
 
+  for (i = 0 ; i < num_peers ; i++)
+    est_request_rate();
+
   LOG (GNUNET_ERROR_TYPE_DEBUG, "Client requested %" PRIX32 " random 
peer(s).\n", num_peers);
 
   RPS_sampler_get_n_rand_peers (client_respond, client, num_peers, GNUNET_YES);




reply via email to

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