diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2016-10-27 13:00:37 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2016-10-27 13:00:37 +0000 |
commit | 251c9287514c0e3a2cf6a3f6f978a27a49e65085 (patch) | |
tree | 0516668b8721fe2f320d3f2afcd014239ac6fe2b /src | |
parent | 7c5d2c6f7da4a48cbb997791d1dc514c842097a9 (diff) | |
download | gnunet-251c9287514c0e3a2cf6a3f6f978a27a49e65085.tar.gz gnunet-251c9287514c0e3a2cf6a3f6f978a27a49e65085.zip |
Fix #4718: Do not echo BARRIER_STATUS messages back to the main controller/test driverAlso add a few FIXMEs to be fixed and fix testcase logic to accommodate new scheduler shutdown semantics
Diffstat (limited to 'src')
-rw-r--r-- | src/testbed/gnunet-service-testbed_barriers.c | 16 | ||||
-rw-r--r-- | src/testbed/test_testbed_api_barriers.c | 44 |
2 files changed, 35 insertions, 25 deletions
diff --git a/src/testbed/gnunet-service-testbed_barriers.c b/src/testbed/gnunet-service-testbed_barriers.c index 831bc3c6d..638263103 100644 --- a/src/testbed/gnunet-service-testbed_barriers.c +++ b/src/testbed/gnunet-service-testbed_barriers.c | |||
@@ -1,6 +1,6 @@ | |||
1 | /* | 1 | /* |
2 | This file is part of GNUnet. | 2 | This file is part of GNUnet. |
3 | Copyright (C) 2008--2013 GNUnet e.V. | 3 | Copyright (C) 2008--2016 GNUnet e.V. |
4 | 4 | ||
5 | GNUnet is free software; you can redistribute it and/or modify | 5 | GNUnet is free software; you can redistribute it and/or modify |
6 | it under the terms of the GNU General Public License as published | 6 | it under the terms of the GNU General Public License as published |
@@ -234,7 +234,7 @@ remove_barrier (struct Barrier *barrier) | |||
234 | GNUNET_CONTAINER_DLL_remove (barrier->head, | 234 | GNUNET_CONTAINER_DLL_remove (barrier->head, |
235 | barrier->tail, | 235 | barrier->tail, |
236 | ctx); | 236 | ctx); |
237 | GNUNET_free (ctx); | 237 | ctx->barrier = NULL; |
238 | } | 238 | } |
239 | GNUNET_free (barrier->name); | 239 | GNUNET_free (barrier->name); |
240 | GNUNET_free (barrier); | 240 | GNUNET_free (barrier); |
@@ -546,6 +546,8 @@ wbarrier_status_cb (void *cls, | |||
546 | struct WBarrier *wrapper = cls; | 546 | struct WBarrier *wrapper = cls; |
547 | struct Barrier *barrier = wrapper->barrier; | 547 | struct Barrier *barrier = wrapper->barrier; |
548 | 548 | ||
549 | //FIXME: why are we removing the wrapper? They should only be removed if they | ||
550 | //barrier is crossed or errored out | ||
549 | GNUNET_assert (b_ == wrapper->hbarrier); | 551 | GNUNET_assert (b_ == wrapper->hbarrier); |
550 | wrapper->hbarrier = NULL; | 552 | wrapper->hbarrier = NULL; |
551 | GNUNET_CONTAINER_DLL_remove (barrier->whead, | 553 | GNUNET_CONTAINER_DLL_remove (barrier->whead, |
@@ -713,6 +715,7 @@ handle_barrier_init (void *cls, | |||
713 | GNUNET_CONTAINER_DLL_insert_tail (barrier->whead, | 715 | GNUNET_CONTAINER_DLL_insert_tail (barrier->whead, |
714 | barrier->wtail, | 716 | barrier->wtail, |
715 | wrapper); | 717 | wrapper); |
718 | //FIXME: Increment barrier->num_wbarriers | ||
716 | wrapper->hbarrier = GNUNET_TESTBED_barrier_init_ (slave->controller, | 719 | wrapper->hbarrier = GNUNET_TESTBED_barrier_init_ (slave->controller, |
717 | barrier->name, | 720 | barrier->name, |
718 | barrier->quorum, | 721 | barrier->quorum, |
@@ -898,16 +901,13 @@ handle_barrier_status (void *cls, | |||
898 | return; | 901 | return; |
899 | } | 902 | } |
900 | GNUNET_SERVICE_client_continue (client); | 903 | GNUNET_SERVICE_client_continue (client); |
901 | while (NULL != (client_ctx = barrier->head)) /* Notify peers */ | 904 | for(client_ctx = barrier->head; NULL != client_ctx; client_ctx = client_ctx->next) /* Notify peers */ |
902 | { | 905 | { |
903 | env = GNUNET_MQ_msg_copy (&msg->header); | 906 | env = GNUNET_MQ_msg_copy (&msg->header); |
904 | GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client), | 907 | GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client_ctx->client), |
905 | env); | 908 | env); |
906 | GNUNET_CONTAINER_DLL_remove (barrier->head, | ||
907 | barrier->tail, | ||
908 | client_ctx); | ||
909 | client_ctx->barrier = NULL; | ||
910 | } | 909 | } |
910 | //FIXME: Send status to wrappers if they exist | ||
911 | } | 911 | } |
912 | 912 | ||
913 | /* end of gnunet-service-testbed_barriers.c */ | 913 | /* end of gnunet-service-testbed_barriers.c */ |
diff --git a/src/testbed/test_testbed_api_barriers.c b/src/testbed/test_testbed_api_barriers.c index 01c745a75..e712e2d5a 100644 --- a/src/testbed/test_testbed_api_barriers.c +++ b/src/testbed/test_testbed_api_barriers.c | |||
@@ -50,7 +50,7 @@ struct GNUNET_TESTBED_Barrier *barrier; | |||
50 | /** | 50 | /** |
51 | * Identifier for the shutdown task | 51 | * Identifier for the shutdown task |
52 | */ | 52 | */ |
53 | static struct GNUNET_SCHEDULER_Task *shutdown_task; | 53 | static struct GNUNET_SCHEDULER_Task *timeout_task; |
54 | 54 | ||
55 | /** | 55 | /** |
56 | * Result of this test case | 56 | * Result of this test case |
@@ -59,20 +59,30 @@ static int result; | |||
59 | 59 | ||
60 | 60 | ||
61 | /** | 61 | /** |
62 | * Shutdown this test case when it takes too long | 62 | * Handle SIGINT and SIGTERM |
63 | * | ||
64 | * @param cls NULL | ||
65 | */ | 63 | */ |
66 | static void | 64 | static void |
67 | do_shutdown (void *cls) | 65 | shutdown_handler(void *cls) |
68 | { | 66 | { |
69 | shutdown_task = NULL; | 67 | if (NULL != timeout_task) |
70 | if (NULL != barrier) | ||
71 | { | 68 | { |
72 | GNUNET_TESTBED_barrier_cancel (barrier); | 69 | GNUNET_SCHEDULER_cancel(timeout_task); |
73 | barrier = NULL; | 70 | timeout_task = NULL; |
74 | } | 71 | } |
72 | } | ||
75 | 73 | ||
74 | |||
75 | /** | ||
76 | * Shutdown this test case when it takes too long | ||
77 | * | ||
78 | * @param cls NULL | ||
79 | */ | ||
80 | static void | ||
81 | do_timeout (void *cls) | ||
82 | { | ||
83 | timeout_task = NULL; | ||
84 | if (barrier != NULL) | ||
85 | GNUNET_TESTBED_barrier_cancel (barrier); | ||
76 | GNUNET_SCHEDULER_shutdown (); | 86 | GNUNET_SCHEDULER_shutdown (); |
77 | } | 87 | } |
78 | 88 | ||
@@ -112,20 +122,19 @@ barrier_cb (void *cls, | |||
112 | LOG (GNUNET_ERROR_TYPE_ERROR, | 122 | LOG (GNUNET_ERROR_TYPE_ERROR, |
113 | "Barrier initialisation failed: %s", | 123 | "Barrier initialisation failed: %s", |
114 | (NULL == emsg) ? "unknown reason" : emsg); | 124 | (NULL == emsg) ? "unknown reason" : emsg); |
115 | barrier = NULL; | 125 | break; |
116 | GNUNET_SCHEDULER_shutdown (); | ||
117 | return; | ||
118 | case GNUNET_TESTBED_BARRIERSTATUS_CROSSED: | 126 | case GNUNET_TESTBED_BARRIERSTATUS_CROSSED: |
119 | LOG (GNUNET_ERROR_TYPE_INFO, | 127 | LOG (GNUNET_ERROR_TYPE_INFO, |
120 | "Barrier crossed\n"); | 128 | "Barrier crossed\n"); |
121 | if (old_status == GNUNET_TESTBED_BARRIERSTATUS_INITIALISED) | 129 | if (old_status == GNUNET_TESTBED_BARRIERSTATUS_INITIALISED) |
122 | result = GNUNET_OK; | 130 | result = GNUNET_OK; |
123 | barrier = NULL; | 131 | break; |
124 | GNUNET_SCHEDULER_shutdown (); | ||
125 | return; | ||
126 | default: | 132 | default: |
127 | GNUNET_assert (0); | 133 | GNUNET_assert (0); |
134 | return; | ||
128 | } | 135 | } |
136 | barrier = NULL; | ||
137 | GNUNET_SCHEDULER_shutdown (); | ||
129 | } | 138 | } |
130 | 139 | ||
131 | 140 | ||
@@ -165,11 +174,12 @@ test_master (void *cls, | |||
165 | 100, | 174 | 100, |
166 | &barrier_cb, | 175 | &barrier_cb, |
167 | NULL); | 176 | NULL); |
168 | shutdown_task = | 177 | timeout_task = |
169 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply | 178 | GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_relative_multiply |
170 | (GNUNET_TIME_UNIT_SECONDS, | 179 | (GNUNET_TIME_UNIT_SECONDS, |
171 | 10 * (NUM_PEERS + 1)), | 180 | 10 * (NUM_PEERS + 1)), |
172 | &do_shutdown, NULL); | 181 | &do_timeout, NULL); |
182 | GNUNET_SCHEDULER_add_shutdown(&shutdown_handler, NULL); | ||
173 | } | 183 | } |
174 | 184 | ||
175 | 185 | ||