aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2013-05-29 13:20:41 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2013-05-29 13:20:41 +0000
commit0f821828934dfa4959c75f8ca06be651fd535001 (patch)
treef3b8f82803895847a097afb3455fd5cfb84e1b0e
parent1bdbb8bc0cec3650843daf5eb559ed46e9a69fd7 (diff)
downloadgnunet-0f821828934dfa4959c75f8ca06be651fd535001.tar.gz
gnunet-0f821828934dfa4959c75f8ca06be651fd535001.zip
changes
-rw-r--r--src/experimentation/Makefile.am8
-rw-r--r--src/experimentation/gnunet-daemon-experimentation.h2
-rw-r--r--src/experimentation/gnunet-daemon-experimentation_nodes.c14
-rw-r--r--src/experimentation/gnunet-daemon-experimentation_scheduler.c76
-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
20if HAVE_EXPERIMENTAL 20if HAVE_EXPERIMENTAL
21 TEXT_EXP_CLIQUE = test_experimentation_clique 21 TEXT_EXP_CLIQUE = test_experimentation_clique_connect
22endif 22endif
23 23
24check_PROGRAMS = \ 24check_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
47test_experimentation_clique_SOURCES = \ 47test_experimentation_clique_connect_SOURCES = \
48 test_experimentation_clique.c 48 test_experimentation_clique_connect.c
49test_experimentation_clique_LDADD = \ 49test_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 */
293void 293void
294GNUNET_EXPERIMENTATION_scheduler_add (struct Experiment *e); 294GNUNET_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
304get_experiments_cb (struct Node *n, struct Experiment *e) 304get_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
34enum ExperimentState
35{
36 NOT_RUNNING,
37 REQUESTED,
38 STARTED,
39 STOPPED
40};
41
34struct ScheduledExperiment { 42struct 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;
43struct ScheduledExperiment *list_tail; 53struct ScheduledExperiment *list_tail;
44 54
45 55
56static void
57request_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
46static void run (void *cls,const struct GNUNET_SCHEDULER_TaskContext* tc) 71static 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 */
65void 118void
66GNUNET_EXPERIMENTATION_scheduler_add (struct Experiment *e) 119GNUNET_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 */