diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2013-05-29 13:20:41 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2013-05-29 13:20:41 +0000 |
commit | 0f821828934dfa4959c75f8ca06be651fd535001 (patch) | |
tree | f3b8f82803895847a097afb3455fd5cfb84e1b0e | |
parent | 1bdbb8bc0cec3650843daf5eb559ed46e9a69fd7 (diff) | |
download | gnunet-0f821828934dfa4959c75f8ca06be651fd535001.tar.gz gnunet-0f821828934dfa4959c75f8ca06be651fd535001.zip |
changes
-rw-r--r-- | src/experimentation/Makefile.am | 8 | ||||
-rw-r--r-- | src/experimentation/gnunet-daemon-experimentation.h | 2 | ||||
-rw-r--r-- | src/experimentation/gnunet-daemon-experimentation_nodes.c | 14 | ||||
-rw-r--r-- | src/experimentation/gnunet-daemon-experimentation_scheduler.c | 76 | ||||
-rw-r--r-- | src/experimentation/test_experimentation_clique_connect.c (renamed from src/experimentation/test_experimentation_clique.c) | 8 |
5 files changed, 87 insertions, 21 deletions
diff --git a/src/experimentation/Makefile.am b/src/experimentation/Makefile.am index aaa205460..49876adc1 100644 --- a/src/experimentation/Makefile.am +++ b/src/experimentation/Makefile.am | |||
@@ -18,7 +18,7 @@ endif | |||
18 | 18 | ||
19 | 19 | ||
20 | if HAVE_EXPERIMENTAL | 20 | if HAVE_EXPERIMENTAL |
21 | TEXT_EXP_CLIQUE = test_experimentation_clique | 21 | TEXT_EXP_CLIQUE = test_experimentation_clique_connect |
22 | endif | 22 | endif |
23 | 23 | ||
24 | check_PROGRAMS = \ | 24 | check_PROGRAMS = \ |
@@ -44,9 +44,9 @@ gnunet_daemon_experimentation_LDADD = \ | |||
44 | $(top_builddir)/src/statistics/libgnunetstatistics.la \ | 44 | $(top_builddir)/src/statistics/libgnunetstatistics.la \ |
45 | $(top_builddir)/src/util/libgnunetutil.la | 45 | $(top_builddir)/src/util/libgnunetutil.la |
46 | 46 | ||
47 | test_experimentation_clique_SOURCES = \ | 47 | test_experimentation_clique_connect_SOURCES = \ |
48 | test_experimentation_clique.c | 48 | test_experimentation_clique_connect.c |
49 | test_experimentation_clique_LDADD = \ | 49 | test_experimentation_clique_connect_LDADD = \ |
50 | $(top_builddir)/src/util/libgnunetutil.la \ | 50 | $(top_builddir)/src/util/libgnunetutil.la \ |
51 | $(top_builddir)/src/statistics/libgnunetstatistics.la \ | 51 | $(top_builddir)/src/statistics/libgnunetstatistics.la \ |
52 | $(top_builddir)/src/testbed/libgnunettestbed.la | 52 | $(top_builddir)/src/testbed/libgnunettestbed.la |
diff --git a/src/experimentation/gnunet-daemon-experimentation.h b/src/experimentation/gnunet-daemon-experimentation.h index 8be39fa93..2d19720d0 100644 --- a/src/experimentation/gnunet-daemon-experimentation.h +++ b/src/experimentation/gnunet-daemon-experimentation.h | |||
@@ -291,7 +291,7 @@ GNUNET_EXPERIMENTATION_experiments_stop (); | |||
291 | * Start the scheduler component | 291 | * Start the scheduler component |
292 | */ | 292 | */ |
293 | void | 293 | void |
294 | GNUNET_EXPERIMENTATION_scheduler_add (struct Experiment *e); | 294 | GNUNET_EXPERIMENTATION_scheduler_add (struct Node *n, struct Experiment *e); |
295 | 295 | ||
296 | /** | 296 | /** |
297 | * Start the scheduler component | 297 | * Start the scheduler component |
diff --git a/src/experimentation/gnunet-daemon-experimentation_nodes.c b/src/experimentation/gnunet-daemon-experimentation_nodes.c index 2e8628088..8631e5d58 100644 --- a/src/experimentation/gnunet-daemon-experimentation_nodes.c +++ b/src/experimentation/gnunet-daemon-experimentation_nodes.c | |||
@@ -225,7 +225,7 @@ size_t send_request_cb (void *cls, size_t bufsize, void *buf) | |||
225 | msg.capabilities = htonl (GSE_node_capabilities); | 225 | msg.capabilities = htonl (GSE_node_capabilities); |
226 | msg.issuer_count = htonl (GSE_my_issuer_count); | 226 | msg.issuer_count = htonl (GSE_my_issuer_count); |
227 | memcpy (buf, &msg, msg_size); | 227 | memcpy (buf, &msg, msg_size); |
228 | memcpy (&buf[msg_size], GSE_my_issuer, ri_size); | 228 | memcpy (&((char *) buf)[msg_size], GSE_my_issuer, ri_size); |
229 | 229 | ||
230 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Sending request to peer %s\n"), | 230 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Sending request to peer %s\n"), |
231 | GNUNET_i2s (&n->id)); | 231 | GNUNET_i2s (&n->id)); |
@@ -292,7 +292,7 @@ size_t send_response_cb (void *cls, size_t bufsize, void *buf) | |||
292 | msg.capabilities = htonl (GSE_node_capabilities); | 292 | msg.capabilities = htonl (GSE_node_capabilities); |
293 | msg.issuer_count = htonl (GSE_my_issuer_count); | 293 | msg.issuer_count = htonl (GSE_my_issuer_count); |
294 | memcpy (buf, &msg, msg_size); | 294 | memcpy (buf, &msg, msg_size); |
295 | memcpy (&buf[msg_size], GSE_my_issuer, ri_size); | 295 | memcpy (&((char *) buf)[msg_size], GSE_my_issuer, ri_size); |
296 | 296 | ||
297 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Sending response to peer %s\n"), | 297 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Sending response to peer %s\n"), |
298 | GNUNET_i2s (&n->id)); | 298 | GNUNET_i2s (&n->id)); |
@@ -304,6 +304,7 @@ static void | |||
304 | get_experiments_cb (struct Node *n, struct Experiment *e) | 304 | get_experiments_cb (struct Node *n, struct Experiment *e) |
305 | { | 305 | { |
306 | static int counter = 0; | 306 | static int counter = 0; |
307 | //size_t start_size; | ||
307 | if (NULL == e) | 308 | if (NULL == e) |
308 | { | 309 | { |
309 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Added %u experiments for peer %s\n"), | 310 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Added %u experiments for peer %s\n"), |
@@ -314,7 +315,14 @@ get_experiments_cb (struct Node *n, struct Experiment *e) | |||
314 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Starting experiment `%s' with peer %s\n"), | 315 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, _("Starting experiment `%s' with peer %s\n"), |
315 | e->name, | 316 | e->name, |
316 | GNUNET_i2s (&n->id)); | 317 | GNUNET_i2s (&n->id)); |
317 | //GNUNET_EXPERIMENTATION_scheduler_add (e); | 318 | |
319 | /* Request experiment */ | ||
320 | /* start_size = sizeof (struct Experimentation_Start); | ||
321 | GNUNET_CORE_notify_transmit_ready (ch, GNUNET_NO, 0, EXP_RESPONSE_TIMEOUT, | ||
322 | n->id, start_size, send_start_cb, n);*/ | ||
323 | |||
324 | GNUNET_EXPERIMENTATION_scheduler_add (n, e); | ||
325 | |||
318 | counter ++; | 326 | counter ++; |
319 | } | 327 | } |
320 | 328 | ||
diff --git a/src/experimentation/gnunet-daemon-experimentation_scheduler.c b/src/experimentation/gnunet-daemon-experimentation_scheduler.c index 39b541574..37f4f0640 100644 --- a/src/experimentation/gnunet-daemon-experimentation_scheduler.c +++ b/src/experimentation/gnunet-daemon-experimentation_scheduler.c | |||
@@ -31,11 +31,21 @@ | |||
31 | #include "gnunet_statistics_service.h" | 31 | #include "gnunet_statistics_service.h" |
32 | #include "gnunet-daemon-experimentation.h" | 32 | #include "gnunet-daemon-experimentation.h" |
33 | 33 | ||
34 | enum ExperimentState | ||
35 | { | ||
36 | NOT_RUNNING, | ||
37 | REQUESTED, | ||
38 | STARTED, | ||
39 | STOPPED | ||
40 | }; | ||
41 | |||
34 | struct ScheduledExperiment { | 42 | struct ScheduledExperiment { |
35 | struct ScheduledExperiment *next; | 43 | struct ScheduledExperiment *next; |
36 | struct ScheduledExperiment *prev; | 44 | struct ScheduledExperiment *prev; |
37 | 45 | ||
38 | struct Experiment *e; | 46 | struct Experiment *e; |
47 | struct Node *n; | ||
48 | int state; | ||
39 | GNUNET_SCHEDULER_TaskIdentifier task; | 49 | GNUNET_SCHEDULER_TaskIdentifier task; |
40 | }; | 50 | }; |
41 | 51 | ||
@@ -43,27 +53,70 @@ struct ScheduledExperiment *list_head; | |||
43 | struct ScheduledExperiment *list_tail; | 53 | struct ScheduledExperiment *list_tail; |
44 | 54 | ||
45 | 55 | ||
56 | static void | ||
57 | request_timeout (void *cls,const struct GNUNET_SCHEDULER_TaskContext* tc) | ||
58 | { | ||
59 | struct ScheduledExperiment *se = cls; | ||
60 | se->task = GNUNET_SCHEDULER_NO_TASK; | ||
61 | |||
62 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Peer `%s' did not respond to request for experiment `%s'\n", | ||
63 | GNUNET_i2s (&se->n->id), se->e->name); | ||
64 | |||
65 | GNUNET_CONTAINER_DLL_remove (list_head, list_tail, se); | ||
66 | GNUNET_free (se); | ||
67 | |||
68 | /* Remove experiment */ | ||
69 | } | ||
70 | |||
46 | static void run (void *cls,const struct GNUNET_SCHEDULER_TaskContext* tc) | 71 | static void run (void *cls,const struct GNUNET_SCHEDULER_TaskContext* tc) |
47 | { | 72 | { |
48 | struct ScheduledExperiment *se = cls; | 73 | struct ScheduledExperiment *se = cls; |
49 | //struct GNUNET_TIME_Relative end; | 74 | struct GNUNET_TIME_Relative end; |
50 | se->task = GNUNET_SCHEDULER_NO_TASK; | 75 | se->task = GNUNET_SCHEDULER_NO_TASK; |
51 | 76 | ||
52 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Running `%s'\n", se->e->name); | 77 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Executing `%s'\n", se->e->name); |
78 | |||
53 | 79 | ||
54 | // end = GNUNET_TIME_absolute_get_remaining(se->e->stop); | 80 | if (NOT_RUNNING == se->state) |
55 | // if (0 < end.rel_value) | 81 | { |
56 | // return; /* End of experiment is reached */ | 82 | /* Send start message */ |
83 | //GNUNET_EXPERIMENT_nodes_request_start (se->e); | ||
84 | se->state = REQUESTED; | ||
85 | se->task = GNUNET_SCHEDULER_add_delayed (EXP_RESPONSE_TIMEOUT, &request_timeout, se); | ||
86 | return; | ||
87 | } | ||
88 | else if (REQUESTED == se->state) | ||
89 | { | ||
90 | /* Already requested */ | ||
91 | return; | ||
92 | } | ||
93 | else if (STARTED == se->state) | ||
94 | { | ||
95 | /* Experiment is running */ | ||
96 | |||
97 | /* do work here */ | ||
57 | 98 | ||
58 | //GNUNET_break (0); | 99 | /* Reschedule */ |
59 | se->task = GNUNET_SCHEDULER_add_delayed (se->e->frequency, &run, se); | 100 | end = GNUNET_TIME_absolute_get_remaining(GNUNET_TIME_absolute_add (se->e->stop, se->e->frequency)); |
101 | if (0 == end.rel_value) | ||
102 | { | ||
103 | se->state = STOPPED; | ||
104 | return; /* End of experiment is reached */ | ||
105 | } | ||
106 | se->task = GNUNET_SCHEDULER_add_delayed (se->e->frequency, &run, se); | ||
107 | } | ||
108 | |||
109 | else if (STOPPED == se->state) | ||
110 | { | ||
111 | /* Experiment expired */ | ||
112 | } | ||
60 | } | 113 | } |
61 | 114 | ||
62 | /** | 115 | /** |
63 | * Start the scheduler component | 116 | * Start the scheduler component |
64 | */ | 117 | */ |
65 | void | 118 | void |
66 | GNUNET_EXPERIMENTATION_scheduler_add (struct Experiment *e) | 119 | GNUNET_EXPERIMENTATION_scheduler_add (struct Node *n, struct Experiment *e) |
67 | { | 120 | { |
68 | struct ScheduledExperiment *se; | 121 | struct ScheduledExperiment *se; |
69 | struct GNUNET_TIME_Relative start; | 122 | struct GNUNET_TIME_Relative start; |
@@ -72,18 +125,23 @@ GNUNET_EXPERIMENTATION_scheduler_add (struct Experiment *e) | |||
72 | start = GNUNET_TIME_absolute_get_remaining(e->start); | 125 | start = GNUNET_TIME_absolute_get_remaining(e->start); |
73 | end = GNUNET_TIME_absolute_get_remaining(e->stop); | 126 | end = GNUNET_TIME_absolute_get_remaining(e->stop); |
74 | 127 | ||
128 | /* Add additional checks here if required */ | ||
129 | |||
75 | if (0 == end.rel_value) | 130 | if (0 == end.rel_value) |
76 | return; /* End of experiment is reached */ | 131 | return; /* End of experiment is reached */ |
77 | 132 | ||
78 | se = GNUNET_malloc (sizeof (struct ScheduledExperiment)); | 133 | se = GNUNET_malloc (sizeof (struct ScheduledExperiment)); |
134 | se->state = NOT_RUNNING; | ||
79 | se->e = e; | 135 | se->e = e; |
136 | se->n = n; | ||
80 | if (0 == start.rel_value) | 137 | if (0 == start.rel_value) |
81 | se->task = GNUNET_SCHEDULER_add_now (&run, se); | 138 | se->task = GNUNET_SCHEDULER_add_now (&run, se); |
82 | else | 139 | else |
83 | se->task = GNUNET_SCHEDULER_add_delayed (start, &run, se); | 140 | se->task = GNUNET_SCHEDULER_add_delayed (start, &run, se); |
84 | 141 | ||
85 | GNUNET_CONTAINER_DLL_insert (list_head, list_tail, se); | 142 | GNUNET_CONTAINER_DLL_insert (list_head, list_tail, se); |
86 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Scheduled `%s'\n", e->name); | 143 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Added experiment `%s' for node to be scheduled\n", |
144 | e->name, GNUNET_i2s(&se->n->id)); | ||
87 | } | 145 | } |
88 | 146 | ||
89 | /** | 147 | /** |
diff --git a/src/experimentation/test_experimentation_clique.c b/src/experimentation/test_experimentation_clique_connect.c index 0913c1a7f..9b4d0117b 100644 --- a/src/experimentation/test_experimentation_clique.c +++ b/src/experimentation/test_experimentation_clique_connect.c | |||
@@ -19,7 +19,7 @@ | |||
19 | */ | 19 | */ |
20 | 20 | ||
21 | /** | 21 | /** |
22 | * @file src/testbed/test_testbed_api_topology.c | 22 | * @file src/experimentation/test_experimentation_clique_connect.c |
23 | * @brief test case to connect experimentation daemons in a clique | 23 | * @brief test case to connect experimentation daemons in a clique |
24 | * @author Sree Harsha Totakura <sreeharsha@totakura.in> | 24 | * @author Sree Harsha Totakura <sreeharsha@totakura.in> |
25 | * @author Matthias Wachs | 25 | * @author Matthias Wachs |
@@ -33,7 +33,7 @@ | |||
33 | /** | 33 | /** |
34 | * Number of peers we want to start | 34 | * Number of peers we want to start |
35 | */ | 35 | */ |
36 | #define NUM_PEERS 20 | 36 | #define NUM_PEERS 2 |
37 | 37 | ||
38 | #define NUM_ISSUER 1 | 38 | #define NUM_ISSUER 1 |
39 | 39 | ||
@@ -401,7 +401,7 @@ main (int argc, char **argv) | |||
401 | event_mask = 0; | 401 | event_mask = 0; |
402 | event_mask |= (1LL << GNUNET_TESTBED_ET_CONNECT); | 402 | event_mask |= (1LL << GNUNET_TESTBED_ET_CONNECT); |
403 | event_mask |= (1LL << GNUNET_TESTBED_ET_OPERATION_FINISHED); | 403 | event_mask |= (1LL << GNUNET_TESTBED_ET_OPERATION_FINISHED); |
404 | (void) GNUNET_TESTBED_test_run ("test_experimentation_clique", | 404 | (void) GNUNET_TESTBED_test_run ("test_experimentation_clique_connect", |
405 | "test_experimentation_clique.conf", NUM_PEERS, | 405 | "test_experimentation_clique.conf", NUM_PEERS, |
406 | event_mask, &controller_event_cb, NULL, | 406 | event_mask, &controller_event_cb, NULL, |
407 | &test_master, NULL); | 407 | &test_master, NULL); |
@@ -410,4 +410,4 @@ main (int argc, char **argv) | |||
410 | return 0; | 410 | return 0; |
411 | } | 411 | } |
412 | 412 | ||
413 | /* end of test_testbed_api_topology.c */ | 413 | /* end of test_experimentation_clique_connect.c */ |