add nick name for cached records
[oweals/gnunet.git] / src / regex / gnunet-regex-profiler.c
index 04c8a8e71b7a7213eb426a9b51571429e010a1cc..5a7cb9acdfd9f053b178ad20fe4ae3126729d755 100644 (file)
@@ -31,7 +31,7 @@
 #include "platform.h"
 #include "gnunet_applications.h"
 #include "gnunet_util_lib.h"
-#include "gnunet_regex_lib.h"
+#include "regex_internal_lib.h"
 #include "gnunet_arm_service.h"
 #include "gnunet_dht_service.h"
 #include "gnunet_testbed_service.h"
@@ -150,7 +150,7 @@ struct RegexPeer
   /**
    * Handle to a running regex search.
    */
-   struct GNUNET_REGEX_search_handle *search_handle;
+   struct REGEX_INTERNAL_Search *search_handle;
 
   /**
    * Testbed operation handle for DHT.
@@ -596,10 +596,13 @@ stats_cb (void *cls,
   peer_cnt++;
   peer = &peers[peer_cnt];
 
+  fprintf (stderr, "s");
   if (peer_cnt == num_peers)
   {
     struct GNUNET_TIME_Relative delay = { 100 };
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO, "\nCollecting stats finished. Shutting down.\n");
     shutdown_task = GNUNET_SCHEDULER_add_delayed (delay, &do_shutdown, NULL);
+    result = GNUNET_OK;
   }
   else
   {
@@ -701,7 +704,7 @@ find_string (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc);
  * Method called when we've found a peer that announced a regex
  * that matches our search string. Now get the statistics.
  *
- * @param cls Closure provided in GNUNET_REGEX_search.
+ * @param cls Closure provided in REGEX_INTERNAL_search.
  * @param id Peer providing a regex that matches the string.
  * @param get_path Path of the get request.
  * @param get_path_length Lenght of get_path.
@@ -722,7 +725,7 @@ regex_found_handler (void *cls,
 
   if (GNUNET_YES == peer->search_str_matched)
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, 
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 "String %s on peer %u already matched!\n",
                 peer->search_str, peer->id);
     return;
@@ -789,9 +792,12 @@ regex_found_handler (void *cls,
                 GNUNET_STRINGS_relative_time_to_string (prof_time, GNUNET_NO));
 
     if (GNUNET_SCHEDULER_NO_TASK != search_timeout_task)
+    {
       GNUNET_SCHEDULER_cancel (search_timeout_task);
+      search_timeout_task = GNUNET_SCHEDULER_NO_TASK;
+    }
 
-    GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Collecting stats and shutting down.\n");
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Collecting stats.\n");
     GNUNET_SCHEDULER_add_now (&do_collect_stats, NULL);
   }
 }
@@ -818,7 +824,7 @@ search_timed_out (void *cls, const struct GNUNET_SCHEDULER_TaskContext * tc)
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO,
               "Search timed out after %s."
-              "Collecting stats and shutting down.\n", 
+              "Collecting stats and shutting down.\n",
               GNUNET_STRINGS_relative_time_to_string (search_timeout_time,
                                                       GNUNET_NO));
 
@@ -852,11 +858,9 @@ find_timed_out (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   if ((tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) != 0)
     return;
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-              "Searching for string \"%s\" on peer %d timed out."
-              "Starting new search: %d.\n",
+              "Searching for string \"%s\" on peer %d timed out.\n",
               p->search_str,
-              p->id,
-              !in_shutdown);
+              p->id);
   if (GNUNET_NO == in_shutdown)
     GNUNET_SCHEDULER_add_now (&announce_next_regex, NULL);
 }
@@ -925,6 +929,11 @@ daemon_started (void *cls, struct GNUNET_TESTBED_Operation *op,
                 "Failed to start/stop daemon at peer %u: %s\n", peer->id, emsg);
     GNUNET_abort ();
   }
+  else
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Deamon %u started successfully\n", peer->id);
+  }
 
   /* Find a peer to look for a string matching the regex announced */
   search_peer = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK,
@@ -980,13 +989,26 @@ announce_next_regex (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct RegexPeer *peer;
 
-  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN) ||
-            next_search >= num_peers)
+  if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
     return;
+  if (next_search >= num_peers)
+  {
+    if (strings_found != num_peers)
+    {
+      struct GNUNET_TIME_Relative new_delay;
+      if (GNUNET_SCHEDULER_NO_TASK != search_timeout_task)
+        GNUNET_SCHEDULER_cancel (search_timeout_task);
+      new_delay = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 15);
+      search_timeout_task = GNUNET_SCHEDULER_add_delayed (new_delay,
+                                                          &search_timed_out,
+                                                          NULL);
+    }
+    return;
+  }
 
   GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Starting daemon %u\n", next_search);
   peer = &peers[next_search];
-  peer->daemon_op = 
+  peer->daemon_op =
   GNUNET_TESTBED_peer_manage_service (NULL,
                                       peer->peer_handle,
                                       "regexprofiler",
@@ -1024,7 +1046,7 @@ dht_connect_cb (void *cls, struct GNUNET_TESTBED_Operation *op,
   GNUNET_assert (peer->dht_handle == ca_result);
 
   peer->search_str_matched = GNUNET_NO;
-  peer->search_handle = GNUNET_REGEX_search (peer->dht_handle,
+  peer->search_handle = REGEX_INTERNAL_search (peer->dht_handle,
                                              peer->search_str,
                                              &regex_found_handler, peer,
                                              NULL);
@@ -1066,7 +1088,7 @@ dht_da (void *cls, void *op_result)
 
   if (NULL != peer->search_handle)
   {
-    GNUNET_REGEX_search_cancel (peer->search_handle);
+    REGEX_INTERNAL_search_cancel (peer->search_handle);
     peer->search_handle = NULL;
   }
 
@@ -1082,16 +1104,18 @@ dht_da (void *cls, void *op_result)
  * Signature of a main function for a testcase.
  *
  * @param cls NULL
+ * @param h the run handle
  * @param num_peers_ number of peers in 'peers'
- * @param peers handle to peers run in the testbed.  NULL upon timeout (see
+ * @param testbed_peers handle to peers run in the testbed.  NULL upon timeout (see
  *          GNUNET_TESTBED_test_run()).
  * @param links_succeeded the number of overlay link connection attempts that
  *          succeeded
  * @param links_failed the number of overlay link connection attempts that
  *          failed
  */
-static void 
+static void
 test_master (void *cls,
+             struct GNUNET_TESTBED_RunHandle *h,
              unsigned int num_peers_,
              struct GNUNET_TESTBED_Peer **testbed_peers,
              unsigned int links_succeeded,
@@ -1116,7 +1140,23 @@ test_master (void *cls,
   {
     peers[i].peer_handle = testbed_peers[i];
   }
-  GNUNET_SCHEDULER_add_now (&do_announce, NULL);
+  if (GNUNET_NO ==
+      GNUNET_CONFIGURATION_get_value_yesno (cfg, "DHT", "DISABLE_TRY_CONNECT"))
+  {
+    struct GNUNET_TIME_Relative settle_time;
+
+    settle_time =
+      GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS,
+                                     10 * num_peers);
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Waiting for DHT for %s to settle new connections.\n\n",
+                GNUNET_STRINGS_relative_time_to_string(settle_time, GNUNET_NO));
+    GNUNET_SCHEDULER_add_delayed (settle_time, &do_announce, NULL);
+  }
+  else
+  {
+    GNUNET_SCHEDULER_add_now (&do_announce, NULL);
+  }
   search_timeout_task =
       GNUNET_SCHEDULER_add_delayed (search_timeout_time, &search_timed_out, NULL);
 }
@@ -1128,7 +1168,7 @@ test_master (void *cls,
  * @param event information on what is happening
  */
 static void
-master_controller_cb (void *cls, 
+master_controller_cb (void *cls,
                       const struct GNUNET_TESTBED_EventInformation *event)
 {
   switch (event->type)
@@ -1237,6 +1277,7 @@ run (void *cls, char *const *args, const char *cfgfile,
 {
   unsigned int nsearchstrs;
   unsigned int i;
+  struct GNUNET_TIME_Relative abort_time;
 
   in_shutdown = GNUNET_NO;
 
@@ -1274,7 +1315,7 @@ run (void *cls, char *const *args, const char *cfgfile,
                                            "REANNOUNCE_PERIOD_MAX",
                                            &reannounce_period_max))
   {
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
                 "reannounce_period_max not given. Using 10 minutes.\n");
     reannounce_period_max =
       GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 10);
@@ -1294,7 +1335,7 @@ run (void *cls, char *const *args, const char *cfgfile,
     shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
     return;
   }
-  if (-1 == (num_peers = GNUNET_DISK_directory_scan (policy_dir, NULL, NULL)))
+  if (0 >= (int) (num_peers = GNUNET_DISK_directory_scan (policy_dir, NULL, NULL)))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 _("No files found in `%s'\n"),
@@ -1316,12 +1357,14 @@ run (void *cls, char *const *args, const char *cfgfile,
   if (num_peers != nsearchstrs)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
-                _("Error loading search strings."
-                  "Given file does not contain enough strings. Exiting.\n"));
+                "Error loading search strings.\n");
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "File (%s) does not contain enough strings (%u/%u).\n",
+                strings_file, nsearchstrs, num_peers);
     shutdown_task = GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
     return;
   }
-  if (0 >= num_peers || NULL == search_strings)
+  if ( (0 == num_peers) || (NULL == search_strings))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
                 _("Error loading search strings. Exiting.\n"));
@@ -1352,10 +1395,15 @@ run (void *cls, char *const *args, const char *cfgfile,
   /* Initialize peers */
   peers = GNUNET_malloc (sizeof (struct RegexPeer) * num_peers);
   for (i = 0; i < num_peers; i++)
-  {
     peers[i].id = i;
-  }
 
+  GNUNET_CONFIGURATION_set_value_number (cfg,
+                                         "TESTBED", "OVERLAY_RANDOM_LINKS",
+                                         num_peers * 20);
+  GNUNET_CONFIGURATION_set_value_number (cfg,
+                                         "DHT", "FORCE_NSE",
+                                         (long long unsigned)
+                                         (log (num_peers) / log (2.0)));
   event_mask = 0LL;
 /* For feedback about the start process activate these and pass master_cb */
   event_mask |= (1LL << GNUNET_TESTBED_ET_PEER_START);
@@ -1371,11 +1419,24 @@ run (void *cls, char *const *args, const char *cfgfile,
                       NULL,     /* master_controller_cb cls */
                       &test_master,
                       NULL);    /* test_master cls */
+  if (GNUNET_OK !=
+      GNUNET_CONFIGURATION_get_value_time (cfg, "TESTBED",
+                                           "SETUP_TIMEOUT",
+                                           &abort_time))
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+                "SETUP_TIMEOUT not given. Using 15 minutes.\n");
+    abort_time =
+      GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MINUTES, 15);
+  }
+  abort_time = GNUNET_TIME_relative_add (abort_time, GNUNET_TIME_UNIT_MINUTES);
   abort_task =
-      GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply
-                                    (GNUNET_TIME_UNIT_MINUTES, 15),
+      GNUNET_SCHEDULER_add_delayed (abort_time,
                                     &do_abort,
                                     (void*) __LINE__);
+  GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+              "setup_timeout: %s\n",
+              GNUNET_STRINGS_relative_time_to_string (abort_time, GNUNET_YES));
 }
 
 
@@ -1404,7 +1465,7 @@ main (int argc, char *const *argv)
       GNUNET_YES, &GNUNET_GETOPT_set_filename, &strings_file},
     {'H', "hosts-file", "FILENAME",
       gettext_noop ("name of file with hosts' names"),
-      GNUNET_NO, &GNUNET_GETOPT_set_filename, &hosts_file},
+      GNUNET_YES, &GNUNET_GETOPT_set_filename, &hosts_file},
     GNUNET_GETOPT_OPTION_END
   };
   int ret;