From 738c8af060013638a30d06466f57dbf36051a805 Mon Sep 17 00:00:00 2001 From: KyleKlenk <kyle.c.klenk@gmail.com> Date: Wed, 16 Nov 2022 14:44:26 -0600 Subject: [PATCH] clients and backup servers can be updated of new backup servers --- build/includes/global/message_atoms.hpp | 6 +++++- build/includes/summa_actor/summa_client.hpp | 2 +- build/source/actors/summa_actor/summa_backup_server.cpp | 7 ++++++- build/source/actors/summa_actor/summa_client.cpp | 6 +++++- build/source/actors/summa_actor/summa_server.cpp | 8 ++++++++ 5 files changed, 25 insertions(+), 4 deletions(-) diff --git a/build/includes/global/message_atoms.hpp b/build/includes/global/message_atoms.hpp index 5854774..260aa7c 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 308c0ad..4e5dfa5 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 5fc7071..caa7470 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 ae642e6..34ef667 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 c857643..2c9d0a2 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); + } }, -- GitLab