diff --git a/build/includes/global/message_atoms.hpp b/build/includes/global/message_atoms.hpp index 5854774d627b832d5ab5b5593e7ed5cdaedd754a..260aa7cad1edf4c3531b509e4f4134a53a60d63c 100644 --- a/build/includes/global/message_atoms.hpp +++ b/build/includes/global/message_atoms.hpp @@ -128,6 +128,10 @@ CAF_BEGIN_TYPE_ID_BLOCK(summa, first_custom_type_id) // Reciever: // Summary: CAF_ADD_ATOM(summa, no_more_batches) + // Sender: + // Reciever: + // Summary: + CAF_ADD_ATOM(summa, update_backup_server_list) // Struct Types CAF_ADD_TYPE_ID(summa, (Distributed_Settings)) CAF_ADD_TYPE_ID(summa, (Summa_Actor_Settings)) @@ -141,12 +145,12 @@ CAF_BEGIN_TYPE_ID_BLOCK(summa, first_custom_type_id) CAF_ADD_TYPE_ID(summa, (Batch)) CAF_ADD_TYPE_ID(summa, (Batch_Container)) - CAF_ADD_TYPE_ID(summa, (std::vector<std::vector<double>>)) CAF_ADD_TYPE_ID(summa, (std::vector<std::vector<int>>)) CAF_ADD_TYPE_ID(summa, (std::vector<int>)) CAF_ADD_TYPE_ID(summa, (std::vector<double>)) CAF_ADD_TYPE_ID(summa, (std::vector<long int>)) + CAF_ADD_TYPE_ID(summa, (std::vector<std::tuple<caf::actor, std::string>>)) CAF_END_TYPE_ID_BLOCK(summa) \ No newline at end of file diff --git a/build/includes/summa_actor/summa_client.hpp b/build/includes/summa_actor/summa_client.hpp index 308c0ad3a3e1a8eeaba1c9d607742ee85613f3c4..4e5dfa51049c311fe722b8629ca62eb49a6708d3 100644 --- a/build/includes/summa_actor/summa_client.hpp +++ b/build/includes/summa_actor/summa_client.hpp @@ -22,7 +22,7 @@ struct summa_client_state { int client_id; // id held by server // tuple is the actor ref and hostname of the backup server - std::vector<std::tuple<caf::actor, std::string>> backup_servers; + std::vector<std::tuple<caf::actor, std::string>> backup_servers_list; Batch current_batch; diff --git a/build/source/actors/summa_actor/summa_backup_server.cpp b/build/source/actors/summa_actor/summa_backup_server.cpp index 5fc7071a28f28d3f104da3f8f19a5ccac23dc269..caa7470dcea764a24ecce4598595958ad0868e16 100644 --- a/build/source/actors/summa_actor/summa_backup_server.cpp +++ b/build/source/actors/summa_actor/summa_backup_server.cpp @@ -80,12 +80,18 @@ behavior summa_backup_server(stateful_actor<summa_server_state>* self, const act aout(self) << "We are now connected to the lead server\n"; }, + // get the list of batches and clients from the lead server [=](update_with_current_state, Batch_Container& batch_container, Client_Container& client_container) { aout(self) << "Received the containers from the lead server\n"; self->state.batch_container = &batch_container; self->state.client_container = &client_container; }, + [=](update_backup_server_list, std::vector<std::tuple<caf::actor, std::string>> backup_servers) { + aout(self) << "Received the backup server list from the lead server\n"; + self->state.backup_servers_list = backup_servers; + }, + // Client finished a batch and the lead server has sent an update [=](done_batch, actor client_actor, Batch& batch) { aout(self) << "Batch: " << batch.getBatchID() << " is done\n"; @@ -103,7 +109,6 @@ behavior summa_backup_server(stateful_actor<summa_server_state>* self, const act [=](no_more_batches, actor client_actor) { aout(self) << "No more batches to distribute\n"; self->state.client_container->setBatchForClient(client_actor, {}); - }, // Simulation has finished diff --git a/build/source/actors/summa_actor/summa_client.cpp b/build/source/actors/summa_actor/summa_client.cpp index ae642e67b4db18b7e99b3a1ad8260396ec0609b9..34ef6673b670ae0121547adae38e0573457cb9c1 100644 --- a/build/source/actors/summa_actor/summa_client.cpp +++ b/build/source/actors/summa_actor/summa_client.cpp @@ -69,6 +69,11 @@ behavior summa_client(stateful_actor<summa_client_state>* self, const actor& ser }, + [=](update_backup_server_list, std::vector<std::tuple<caf::actor, std::string>> backup_servers) { + aout(self) << "Received the backup server list from the server\n"; + self->state.backup_servers_list = backup_servers; + }, + // Received batch from server to compute [=](Batch& batch) { self->state.current_batch = batch; @@ -104,7 +109,6 @@ behavior summa_client(stateful_actor<summa_client_state>* self, const actor& ser self->send(server_actor, done_batch_v, self, self->state.current_batch); } - }, [=](time_to_exit) { diff --git a/build/source/actors/summa_actor/summa_server.cpp b/build/source/actors/summa_actor/summa_server.cpp index c857643e749241ff8c61b8591cf75d8795576efb..2c9d0a26f5f335868bbb690d72f087b4a03686ac 100644 --- a/build/source/actors/summa_actor/summa_server.cpp +++ b/build/source/actors/summa_actor/summa_server.cpp @@ -77,6 +77,14 @@ behavior summa_server(stateful_actor<summa_server_state>* self) { self->send(backup_server, connect_as_backup_v); // confirm connection with sender // Now we need to send the backup actor our current state self->send(backup_server, update_with_current_state_v, *self->state.batch_container, *self->state.client_container); + std::vector<Client> clients = self->state.client_container->getClientList(); + for (Client client : clients) { + self->send(client.getActor(), update_backup_server_list_v, self->state.backup_servers_list); + } + + for(std::tuple<actor, std::string> backup_server : self->state.backup_servers_list) { + self->send(std::get<0>(backup_server), update_backup_server_list_v, self->state.backup_servers_list); + } },