diff options
author | Sree Harsha Totakura <totakura@in.tum.de> | 2016-10-27 15:01:52 +0000 |
---|---|---|
committer | Sree Harsha Totakura <totakura@in.tum.de> | 2016-10-27 15:01:52 +0000 |
commit | a85d0779cb1dad2c5d2aecff2d5be96f1e11b665 (patch) | |
tree | b0569b02721fda8b8cd67776fdc800611fc88000 /src/testbed | |
parent | 251c9287514c0e3a2cf6a3f6f978a27a49e65085 (diff) | |
download | gnunet-a85d0779cb1dad2c5d2aecff2d5be96f1e11b665.tar.gz gnunet-a85d0779cb1dad2c5d2aecff2d5be96f1e11b665.zip |
propagate barrier status messages to sub controllers
Diffstat (limited to 'src/testbed')
-rw-r--r-- | src/testbed/gnunet-service-testbed_barriers.c | 28 | ||||
-rw-r--r-- | src/testbed/testbed_api.c | 8 |
2 files changed, 25 insertions, 11 deletions
diff --git a/src/testbed/gnunet-service-testbed_barriers.c b/src/testbed/gnunet-service-testbed_barriers.c index 638263103..a201d22bb 100644 --- a/src/testbed/gnunet-service-testbed_barriers.c +++ b/src/testbed/gnunet-service-testbed_barriers.c | |||
@@ -109,6 +109,11 @@ struct WBarrier | |||
109 | struct Barrier *barrier; | 109 | struct Barrier *barrier; |
110 | 110 | ||
111 | /** | 111 | /** |
112 | * Handle to the slave controller where this wrapper creates a barrier | ||
113 | */ | ||
114 | struct GNUNET_TESTBED_Controller *controller; | ||
115 | |||
116 | /** | ||
112 | * The barrier handle from API | 117 | * The barrier handle from API |
113 | */ | 118 | */ |
114 | struct GNUNET_TESTBED_Barrier *hbarrier; | 119 | struct GNUNET_TESTBED_Barrier *hbarrier; |
@@ -546,14 +551,7 @@ wbarrier_status_cb (void *cls, | |||
546 | struct WBarrier *wrapper = cls; | 551 | struct WBarrier *wrapper = cls; |
547 | struct Barrier *barrier = wrapper->barrier; | 552 | struct Barrier *barrier = wrapper->barrier; |
548 | 553 | ||
549 | //FIXME: why are we removing the wrapper? They should only be removed if they | ||
550 | //barrier is crossed or errored out | ||
551 | GNUNET_assert (b_ == wrapper->hbarrier); | 554 | GNUNET_assert (b_ == wrapper->hbarrier); |
552 | wrapper->hbarrier = NULL; | ||
553 | GNUNET_CONTAINER_DLL_remove (barrier->whead, | ||
554 | barrier->wtail, | ||
555 | wrapper); | ||
556 | GNUNET_free (wrapper); | ||
557 | switch (status) | 555 | switch (status) |
558 | { | 556 | { |
559 | case GNUNET_TESTBED_BARRIERSTATUS_ERROR: | 557 | case GNUNET_TESTBED_BARRIERSTATUS_ERROR: |
@@ -712,11 +710,12 @@ handle_barrier_init (void *cls, | |||
712 | } | 710 | } |
713 | wrapper = GNUNET_new (struct WBarrier); | 711 | wrapper = GNUNET_new (struct WBarrier); |
714 | wrapper->barrier = barrier; | 712 | wrapper->barrier = barrier; |
713 | wrapper->controller = slave->controller; | ||
715 | GNUNET_CONTAINER_DLL_insert_tail (barrier->whead, | 714 | GNUNET_CONTAINER_DLL_insert_tail (barrier->whead, |
716 | barrier->wtail, | 715 | barrier->wtail, |
717 | wrapper); | 716 | wrapper); |
718 | //FIXME: Increment barrier->num_wbarriers | 717 | barrier->num_wbarriers++; |
719 | wrapper->hbarrier = GNUNET_TESTBED_barrier_init_ (slave->controller, | 718 | wrapper->hbarrier = GNUNET_TESTBED_barrier_init_ (wrapper->controller, |
720 | barrier->name, | 719 | barrier->name, |
721 | barrier->quorum, | 720 | barrier->quorum, |
722 | &wbarrier_status_cb, | 721 | &wbarrier_status_cb, |
@@ -868,6 +867,7 @@ handle_barrier_status (void *cls, | |||
868 | struct GNUNET_SERVICE_Client *client = cls; | 867 | struct GNUNET_SERVICE_Client *client = cls; |
869 | struct Barrier *barrier; | 868 | struct Barrier *barrier; |
870 | struct ClientCtx *client_ctx; | 869 | struct ClientCtx *client_ctx; |
870 | struct WBarrier *wrapper; | ||
871 | const char *name; | 871 | const char *name; |
872 | struct GNUNET_HashCode key; | 872 | struct GNUNET_HashCode key; |
873 | uint16_t name_len; | 873 | uint16_t name_len; |
@@ -907,7 +907,15 @@ handle_barrier_status (void *cls, | |||
907 | GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client_ctx->client), | 907 | GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client_ctx->client), |
908 | env); | 908 | env); |
909 | } | 909 | } |
910 | //FIXME: Send status to wrappers if they exist | 910 | /** |
911 | * The wrapper barriers do not echo the barrier status, so we have to do it | ||
912 | * here | ||
913 | */ | ||
914 | for (wrapper = barrier->whead; NULL != wrapper; wrapper = wrapper->next) | ||
915 | { | ||
916 | GNUNET_TESTBED_queue_message_ (wrapper->controller, | ||
917 | GNUNET_copy_message (&msg->header)); | ||
918 | } | ||
911 | } | 919 | } |
912 | 920 | ||
913 | /* end of gnunet-service-testbed_barriers.c */ | 921 | /* end of gnunet-service-testbed_barriers.c */ |
diff --git a/src/testbed/testbed_api.c b/src/testbed/testbed_api.c index a019d9b64..ae40948b3 100644 --- a/src/testbed/testbed_api.c +++ b/src/testbed/testbed_api.c | |||
@@ -1310,7 +1310,13 @@ handle_barrier_status (void *cls, | |||
1310 | 1310 | ||
1311 | cleanup: | 1311 | cleanup: |
1312 | GNUNET_free_non_null (emsg); | 1312 | GNUNET_free_non_null (emsg); |
1313 | if (NULL != barrier) | 1313 | /** |
1314 | * Do not remove the barrier if we did not echo the status back; this is | ||
1315 | * required at the chained testbed controller setup to ensure the only the | ||
1316 | * test-driver echos the status and the controller hierarchy properly | ||
1317 | * propagates the status. | ||
1318 | */ | ||
1319 | if ((NULL != barrier) && (GNUNET_YES == barrier->echo)) | ||
1314 | GNUNET_TESTBED_barrier_remove_ (barrier); | 1320 | GNUNET_TESTBED_barrier_remove_ (barrier); |
1315 | } | 1321 | } |
1316 | 1322 | ||