diff options
author | Christian Grothoff <christian@grothoff.org> | 2016-04-30 08:17:37 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2016-04-30 08:17:37 +0000 |
commit | 95f9076a2139f5fb042b944a0658b6cda2fa35db (patch) | |
tree | b0826a2a1dcf812e6b4450fe6b05d47cd53ae49d /src/cadet/test_cadet.c | |
parent | 7746f68db77b9ca3c4aaca24ab2ce5253461240b (diff) | |
download | gnunet-95f9076a2139f5fb042b944a0658b6cda2fa35db.tar.gz gnunet-95f9076a2139f5fb042b944a0658b6cda2fa35db.zip |
implementing new scheduler shutdown semantics
Diffstat (limited to 'src/cadet/test_cadet.c')
-rw-r--r-- | src/cadet/test_cadet.c | 118 |
1 files changed, 53 insertions, 65 deletions
diff --git a/src/cadet/test_cadet.c b/src/cadet/test_cadet.c index 39bfc5fed..b3ded1bdf 100644 --- a/src/cadet/test_cadet.c +++ b/src/cadet/test_cadet.c | |||
@@ -144,17 +144,17 @@ struct GNUNET_CADET_TEST_Context *test_ctx; | |||
144 | /** | 144 | /** |
145 | * Task called to disconnect peers. | 145 | * Task called to disconnect peers. |
146 | */ | 146 | */ |
147 | static struct GNUNET_SCHEDULER_Task * disconnect_task; | 147 | static struct GNUNET_SCHEDULER_Task *disconnect_task; |
148 | 148 | ||
149 | /** | 149 | /** |
150 | * Task To perform tests | 150 | * Task To perform tests |
151 | */ | 151 | */ |
152 | static struct GNUNET_SCHEDULER_Task * test_task; | 152 | static struct GNUNET_SCHEDULER_Task *test_task; |
153 | 153 | ||
154 | /** | 154 | /** |
155 | * Task called to shutdown test. | 155 | * Task runnining #data_task(). |
156 | */ | 156 | */ |
157 | static struct GNUNET_SCHEDULER_Task * shutdown_handle; | 157 | static struct GNUNET_SCHEDULER_Task *data_job; |
158 | 158 | ||
159 | /** | 159 | /** |
160 | * Cadet handle for the root peer | 160 | * Cadet handle for the root peer |
@@ -230,6 +230,7 @@ get_expected_target () | |||
230 | return peers_requested - 1; | 230 | return peers_requested - 1; |
231 | } | 231 | } |
232 | 232 | ||
233 | |||
233 | /** | 234 | /** |
234 | * Show the results of the test (banwidth acheived) and log them to GAUGER | 235 | * Show the results of the test (banwidth acheived) and log them to GAUGER |
235 | */ | 236 | */ |
@@ -256,20 +257,6 @@ show_end_data (void) | |||
256 | 257 | ||
257 | 258 | ||
258 | /** | 259 | /** |
259 | * Shut down peergroup, clean up. | ||
260 | * | ||
261 | * @param cls Closure (unused). | ||
262 | * @param tc Task Context. | ||
263 | */ | ||
264 | static void | ||
265 | shutdown_task (void *cls) | ||
266 | { | ||
267 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ending test.\n"); | ||
268 | shutdown_handle = NULL; | ||
269 | } | ||
270 | |||
271 | |||
272 | /** | ||
273 | * Disconnect from cadet services af all peers, call shutdown. | 260 | * Disconnect from cadet services af all peers, call shutdown. |
274 | * | 261 | * |
275 | * @param cls Closure (line number from which termination was requested). | 262 | * @param cls Closure (line number from which termination was requested). |
@@ -280,18 +267,11 @@ disconnect_cadet_peers (void *cls) | |||
280 | { | 267 | { |
281 | long line = (long) cls; | 268 | long line = (long) cls; |
282 | unsigned int i; | 269 | unsigned int i; |
283 | const struct GNUNET_SCHEDULER_TaskContext *tc; | ||
284 | 270 | ||
285 | tc = GNUNET_SCHEDULER_get_task_context (); | ||
286 | if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0) | ||
287 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
288 | "disconnecting cadet peers due to SHUTDOWN! called from %ld\n", | ||
289 | line); | ||
290 | else | ||
291 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
292 | "disconnecting cadet service of peers, called from line %ld\n", | ||
293 | line); | ||
294 | disconnect_task = NULL; | 271 | disconnect_task = NULL; |
272 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
273 | "disconnecting cadet service of peers, called from line %ld\n", | ||
274 | line); | ||
295 | for (i = 0; i < 2; i++) | 275 | for (i = 0; i < 2; i++) |
296 | { | 276 | { |
297 | GNUNET_TESTBED_operation_done (t_op[i]); | 277 | GNUNET_TESTBED_operation_done (t_op[i]); |
@@ -317,15 +297,39 @@ disconnect_cadet_peers (void *cls) | |||
317 | incoming_ch = NULL; | 297 | incoming_ch = NULL; |
318 | } | 298 | } |
319 | GNUNET_CADET_TEST_cleanup (test_ctx); | 299 | GNUNET_CADET_TEST_cleanup (test_ctx); |
320 | if (NULL != shutdown_handle) | 300 | GNUNET_SCHEDULER_shutdown (); |
301 | } | ||
302 | |||
303 | |||
304 | /** | ||
305 | * Shut down peergroup, clean up. | ||
306 | * | ||
307 | * @param cls Closure (unused). | ||
308 | * @param tc Task Context. | ||
309 | */ | ||
310 | static void | ||
311 | shutdown_task (void *cls) | ||
312 | { | ||
313 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Ending test.\n"); | ||
314 | if (NULL != data_job) | ||
321 | { | 315 | { |
322 | GNUNET_SCHEDULER_cancel (shutdown_handle); | 316 | GNUNET_SCHEDULER_cancel (data_job); |
317 | data_job = NULL; | ||
318 | } | ||
319 | if (NULL != test_task) | ||
320 | { | ||
321 | GNUNET_SCHEDULER_cancel (test_task); | ||
322 | test_task = NULL; | ||
323 | } | ||
324 | if (NULL != disconnect_task) | ||
325 | { | ||
326 | GNUNET_SCHEDULER_cancel (disconnect_task); | ||
327 | disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers, | ||
328 | (void *) __LINE__); | ||
323 | } | 329 | } |
324 | shutdown_handle = GNUNET_SCHEDULER_add_now (&shutdown_task, NULL); | ||
325 | } | 330 | } |
326 | 331 | ||
327 | 332 | ||
328 | |||
329 | /** | 333 | /** |
330 | * Stats callback. Finish the stats testbed operation and when all stats have | 334 | * Stats callback. Finish the stats testbed operation and when all stats have |
331 | * been iterated, shutdown the test. | 335 | * been iterated, shutdown the test. |
@@ -346,8 +350,8 @@ stats_cont (void *cls, struct GNUNET_TESTBED_Operation *op, const char *emsg) | |||
346 | 350 | ||
347 | if (NULL != disconnect_task) | 351 | if (NULL != disconnect_task) |
348 | GNUNET_SCHEDULER_cancel (disconnect_task); | 352 | GNUNET_SCHEDULER_cancel (disconnect_task); |
349 | disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers, cls); | 353 | disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers, |
350 | 354 | cls); | |
351 | } | 355 | } |
352 | 356 | ||
353 | 357 | ||
@@ -393,19 +397,11 @@ static void | |||
393 | gather_stats_and_exit (void *cls) | 397 | gather_stats_and_exit (void *cls) |
394 | { | 398 | { |
395 | long l = (long) cls; | 399 | long l = (long) cls; |
396 | const struct GNUNET_SCHEDULER_TaskContext *tc; | ||
397 | 400 | ||
398 | disconnect_task = NULL; | 401 | disconnect_task = NULL; |
399 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, "gathering statistics from line %d\n", l); | 402 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
400 | tc = GNUNET_SCHEDULER_get_task_context (); | 403 | "gathering statistics from line %d\n", |
401 | if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0) | 404 | l); |
402 | { | ||
403 | disconnect_task = GNUNET_SCHEDULER_add_now (&disconnect_cadet_peers, | ||
404 | (void *) __LINE__); | ||
405 | return; | ||
406 | } | ||
407 | |||
408 | |||
409 | if (NULL != ch) | 405 | if (NULL != ch) |
410 | { | 406 | { |
411 | if (NULL != th) | 407 | if (NULL != th) |
@@ -463,14 +459,10 @@ data_task (void *cls) | |||
463 | { | 459 | { |
464 | struct GNUNET_CADET_Channel *channel; | 460 | struct GNUNET_CADET_Channel *channel; |
465 | static struct GNUNET_CADET_TransmitHandle **pth; | 461 | static struct GNUNET_CADET_TransmitHandle **pth; |
466 | const struct GNUNET_SCHEDULER_TaskContext *tc; | ||
467 | long src; | 462 | long src; |
468 | 463 | ||
464 | data_job = NULL; | ||
469 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Data task\n"); | 465 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Data task\n"); |
470 | tc = GNUNET_SCHEDULER_get_task_context (); | ||
471 | if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0) | ||
472 | return; | ||
473 | |||
474 | if (GNUNET_YES == test_backwards) | 466 | if (GNUNET_YES == test_backwards) |
475 | { | 467 | { |
476 | channel = incoming_ch; | 468 | channel = incoming_ch; |
@@ -499,17 +491,16 @@ data_task (void *cls) | |||
499 | if (0 == i) | 491 | if (0 == i) |
500 | { | 492 | { |
501 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, " in 1 ms\n"); | 493 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, " in 1 ms\n"); |
502 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS, | 494 | data_job = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_MILLISECONDS, |
503 | &data_task, (void *) 1L); | 495 | &data_task, (void *) 1L); |
504 | } | 496 | } |
505 | else | 497 | else |
506 | { | 498 | { |
507 | i++; | 499 | i++; |
508 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "in %u ms\n", i); | 500 | GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "in %u ms\n", i); |
509 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply ( | 501 | data_job = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, |
510 | GNUNET_TIME_UNIT_MILLISECONDS, | 502 | i), |
511 | i), | 503 | &data_task, (void *) i); |
512 | &data_task, (void *) i); | ||
513 | } | 504 | } |
514 | } | 505 | } |
515 | } | 506 | } |
@@ -574,7 +565,7 @@ tmt_rdy (void *cls, size_t size, void *buf) | |||
574 | { | 565 | { |
575 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " Scheduling message %d\n", | 566 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, " Scheduling message %d\n", |
576 | counter + 1); | 567 | counter + 1); |
577 | GNUNET_SCHEDULER_add_now (&data_task, NULL); | 568 | data_job = GNUNET_SCHEDULER_add_now (&data_task, NULL); |
578 | } | 569 | } |
579 | } | 570 | } |
580 | 571 | ||
@@ -661,7 +652,7 @@ data_callback (void *cls, struct GNUNET_CADET_Channel *channel, | |||
661 | if (SPEED == test) | 652 | if (SPEED == test) |
662 | { | 653 | { |
663 | GNUNET_assert (peers_requested - 1 == client); | 654 | GNUNET_assert (peers_requested - 1 == client); |
664 | GNUNET_SCHEDULER_add_now (&data_task, NULL); | 655 | data_job = GNUNET_SCHEDULER_add_now (&data_task, NULL); |
665 | return GNUNET_OK; | 656 | return GNUNET_OK; |
666 | } | 657 | } |
667 | } | 658 | } |
@@ -842,17 +833,14 @@ static void | |||
842 | do_test (void *cls) | 833 | do_test (void *cls) |
843 | { | 834 | { |
844 | enum GNUNET_CADET_ChannelOption flags; | 835 | enum GNUNET_CADET_ChannelOption flags; |
845 | const struct GNUNET_SCHEDULER_TaskContext *tc; | ||
846 | |||
847 | tc = GNUNET_SCHEDULER_get_task_context (); | ||
848 | if ((GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason) != 0) | ||
849 | return; | ||
850 | 836 | ||
837 | test_task = NULL; | ||
851 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "do_test\n"); | 838 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "do_test\n"); |
852 | 839 | ||
853 | if (NULL != disconnect_task) | 840 | if (NULL != disconnect_task) |
854 | { | 841 | { |
855 | GNUNET_SCHEDULER_cancel (disconnect_task); | 842 | GNUNET_SCHEDULER_cancel (disconnect_task); |
843 | disconnect_task = NULL; | ||
856 | } | 844 | } |
857 | 845 | ||
858 | flags = GNUNET_CADET_OPTION_DEFAULT; | 846 | flags = GNUNET_CADET_OPTION_DEFAULT; |
@@ -880,6 +868,7 @@ do_test (void *cls) | |||
880 | &tmt_rdy, (void *) 0L); | 868 | &tmt_rdy, (void *) 0L); |
881 | } | 869 | } |
882 | 870 | ||
871 | |||
883 | /** | 872 | /** |
884 | * Callback to be called when the requested peer information is available | 873 | * Callback to be called when the requested peer information is available |
885 | * | 874 | * |
@@ -942,8 +931,7 @@ tmain (void *cls, | |||
942 | disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME, | 931 | disconnect_task = GNUNET_SCHEDULER_add_delayed (SHORT_TIME, |
943 | &disconnect_cadet_peers, | 932 | &disconnect_cadet_peers, |
944 | (void *) __LINE__); | 933 | (void *) __LINE__); |
945 | shutdown_handle = GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, | 934 | GNUNET_SCHEDULER_add_shutdown (&shutdown_task, NULL); |
946 | &shutdown_task, NULL); | ||
947 | t_op[0] = GNUNET_TESTBED_peer_get_information (peers[0], | 935 | t_op[0] = GNUNET_TESTBED_peer_get_information (peers[0], |
948 | GNUNET_TESTBED_PIT_IDENTITY, | 936 | GNUNET_TESTBED_PIT_IDENTITY, |
949 | &pi_cb, (void *) 0L); | 937 | &pi_cb, (void *) 0L); |