From 01eb60d5f389fc933174298c55f771cdbee010aa Mon Sep 17 00:00:00 2001 From: Matthias Wachs Date: Wed, 29 May 2013 13:56:29 +0000 Subject: [PATCH] changes --- src/experimentation/Makefile.am | 10 +++++- .../gnunet-daemon-experimentation.h | 5 ++- .../gnunet-daemon-experimentation_nodes.c | 12 ++++--- .../gnunet-daemon-experimentation_scheduler.c | 32 ++++++++++++++----- 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/src/experimentation/Makefile.am b/src/experimentation/Makefile.am index 49876adc1..02fe9cc1f 100644 --- a/src/experimentation/Makefile.am +++ b/src/experimentation/Makefile.am @@ -18,7 +18,7 @@ endif if HAVE_EXPERIMENTAL - TEXT_EXP_CLIQUE = test_experimentation_clique_connect + TEXT_EXP_CLIQUE = test_experimentation_clique_connect test_experimentation_clique_run endif check_PROGRAMS = \ @@ -51,6 +51,14 @@ test_experimentation_clique_connect_LDADD = \ $(top_builddir)/src/statistics/libgnunetstatistics.la \ $(top_builddir)/src/testbed/libgnunettestbed.la +test_experimentation_clique_run_SOURCES = \ + test_experimentation_clique_run.c +test_experimentation_clique_run_LDADD = \ + $(top_builddir)/src/util/libgnunetutil.la \ + $(top_builddir)/src/statistics/libgnunetstatistics.la \ + $(top_builddir)/src/testbed/libgnunettestbed.la + + EXTRA_DIST = \ test_experimentation_clique.conf \ test_experiments.exp \ No newline at end of file diff --git a/src/experimentation/gnunet-daemon-experimentation.h b/src/experimentation/gnunet-daemon-experimentation.h index 2d19720d0..999c565ad 100644 --- a/src/experimentation/gnunet-daemon-experimentation.h +++ b/src/experimentation/gnunet-daemon-experimentation.h @@ -34,7 +34,7 @@ /** * Timeout between request and expected response */ -#define EXP_RESPONSE_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 1) +#define EXP_RESPONSE_TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 5) /** * Default experiment frequency @@ -205,6 +205,9 @@ struct Experimentation_Response uint32_t issuer_count; }; +void +GNUNET_EXPERIMENT_nodes_request_start (struct Node *n, struct Experiment *e); + /** * Start the nodes management diff --git a/src/experimentation/gnunet-daemon-experimentation_nodes.c b/src/experimentation/gnunet-daemon-experimentation_nodes.c index 8631e5d58..ac1d00ce0 100644 --- a/src/experimentation/gnunet-daemon-experimentation_nodes.c +++ b/src/experimentation/gnunet-daemon-experimentation_nodes.c @@ -304,7 +304,6 @@ static void get_experiments_cb (struct Node *n, struct Experiment *e) { static int counter = 0; - //size_t start_size; if (NULL == e) { GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Added %u experiments for peer %s\n"), @@ -317,10 +316,6 @@ get_experiments_cb (struct Node *n, struct Experiment *e) GNUNET_i2s (&n->id)); /* Request experiment */ -/* start_size = sizeof (struct Experimentation_Start); - GNUNET_CORE_notify_transmit_ready (ch, GNUNET_NO, 0, EXP_RESPONSE_TIMEOUT, - n->id, start_size, send_start_cb, n);*/ - GNUNET_EXPERIMENTATION_scheduler_add (n, e); counter ++; @@ -633,6 +628,13 @@ core_receive_handler (void *cls, } +void +GNUNET_EXPERIMENT_nodes_request_start (struct Node *n, struct Experiment *e) +{ + GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Sending start request to peer `%s' for experiment `%s'\n"), + GNUNET_i2s(&n->id), e->name); +} + /** * Start the nodes management diff --git a/src/experimentation/gnunet-daemon-experimentation_scheduler.c b/src/experimentation/gnunet-daemon-experimentation_scheduler.c index 37f4f0640..502c65229 100644 --- a/src/experimentation/gnunet-daemon-experimentation_scheduler.c +++ b/src/experimentation/gnunet-daemon-experimentation_scheduler.c @@ -52,6 +52,8 @@ struct ScheduledExperiment { struct ScheduledExperiment *list_head; struct ScheduledExperiment *list_tail; +static unsigned int experiments_scheduled; +static unsigned int experiments_requested; static void request_timeout (void *cls,const struct GNUNET_SCHEDULER_TaskContext* tc) @@ -66,6 +68,10 @@ request_timeout (void *cls,const struct GNUNET_SCHEDULER_TaskContext* tc) GNUNET_free (se); /* Remove experiment */ + + GNUNET_assert (experiments_requested > 0); + experiments_requested --; + GNUNET_STATISTICS_set (GSE_stats, "# experiments requested", experiments_requested, GNUNET_NO); } static void run (void *cls,const struct GNUNET_SCHEDULER_TaskContext* tc) @@ -74,15 +80,18 @@ static void run (void *cls,const struct GNUNET_SCHEDULER_TaskContext* tc) struct GNUNET_TIME_Relative end; se->task = GNUNET_SCHEDULER_NO_TASK; - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Executing `%s'\n", se->e->name); - if (NOT_RUNNING == se->state) { /* Send start message */ - //GNUNET_EXPERIMENT_nodes_request_start (se->e); + GNUNET_EXPERIMENT_nodes_request_start (se->n, se->e); se->state = REQUESTED; se->task = GNUNET_SCHEDULER_add_delayed (EXP_RESPONSE_TIMEOUT, &request_timeout, se); + + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Sending start request to peer `%s' for `%s'\n", + GNUNET_i2s (&se->n->id), se->e->name); + experiments_requested ++; + GNUNET_STATISTICS_set (GSE_stats, "# experiments requested", experiments_requested, GNUNET_NO); return; } else if (REQUESTED == se->state) @@ -93,6 +102,8 @@ static void run (void *cls,const struct GNUNET_SCHEDULER_TaskContext* tc) else if (STARTED == se->state) { /* Experiment is running */ + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Running experiment `%s' peer for `%s'\n", + GNUNET_i2s (&se->n->id), se->e->name); /* do work here */ @@ -124,12 +135,11 @@ GNUNET_EXPERIMENTATION_scheduler_add (struct Node *n, struct Experiment *e) start = GNUNET_TIME_absolute_get_remaining(e->start); end = GNUNET_TIME_absolute_get_remaining(e->stop); - - /* Add additional checks here if required */ - if (0 == end.rel_value) return; /* End of experiment is reached */ + /* Add additional checks here if required */ + se = GNUNET_malloc (sizeof (struct ScheduledExperiment)); se->state = NOT_RUNNING; se->e = e; @@ -140,8 +150,10 @@ GNUNET_EXPERIMENTATION_scheduler_add (struct Node *n, struct Experiment *e) se->task = GNUNET_SCHEDULER_add_delayed (start, &run, se); GNUNET_CONTAINER_DLL_insert (list_head, list_tail, se); - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Added experiment `%s' for node to be scheduled\n", + GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Added experiment `%s' for node to be scheduled\n", e->name, GNUNET_i2s(&se->n->id)); + experiments_scheduled ++; + GNUNET_STATISTICS_set (GSE_stats, "# experiments scheduled", experiments_scheduled, GNUNET_NO); } /** @@ -150,7 +162,8 @@ GNUNET_EXPERIMENTATION_scheduler_add (struct Node *n, struct Experiment *e) void GNUNET_EXPERIMENTATION_scheduler_start () { - + experiments_requested = 0; + experiments_scheduled = 0; } @@ -174,6 +187,9 @@ GNUNET_EXPERIMENTATION_scheduler_stop () cur->task = GNUNET_SCHEDULER_NO_TASK; } GNUNET_free (cur); + GNUNET_assert (experiments_scheduled > 0); + experiments_scheduled --; + GNUNET_STATISTICS_set (GSE_stats, "# experiments scheduled", experiments_scheduled, GNUNET_NO); } } -- 2.25.1