From 582f2f5e210cbb14485048e774fb923f4389faa1 Mon Sep 17 00:00:00 2001 From: KyleKlenk <kyle.c.klenk@gmail.com> Date: Thu, 6 Oct 2022 23:42:03 +0000 Subject: [PATCH] added method to batch_container to assign a batch to an actor --- build/includes/summa_actor/batch_manager.hpp | 8 +++++-- build/includes/summa_actor/client.hpp | 2 ++ build/includes/summa_actor/summa_client.hpp | 1 + .../actors/summa_actor/batch_manager.cpp | 11 +++++++++- build/source/actors/summa_actor/client.cpp | 11 ++++++++++ .../actors/summa_actor/summa_client.cpp | 3 +-- .../actors/summa_actor/summa_server.cpp | 21 +++++-------------- 7 files changed, 36 insertions(+), 21 deletions(-) diff --git a/build/includes/summa_actor/batch_manager.hpp b/build/includes/summa_actor/batch_manager.hpp index f1416a9..1bdb554 100644 --- a/build/includes/summa_actor/batch_manager.hpp +++ b/build/includes/summa_actor/batch_manager.hpp @@ -10,8 +10,10 @@ class Batch { int batch_id; int start_hru; int num_hru; - + bool assigned_to_actor; + std::string hostname; + caf::actor assigned_actor; public: Batch(int batch_id = -1, int start_hru = -1, int num_hru = -1); @@ -29,7 +31,9 @@ class Batch { inspector.field("batch_id", batch.batch_id), inspector.field("start_hru", batch.start_hru), inspector.field("num_hru", batch.num_hru), - inspector.field("status", batch.assigned_to_actor)); + inspector.field("status", batch.assigned_to_actor), + inspector.field("hostname", batch.hostname), + inspector.field("assigned_actor", batch.assigned_actor)); } }; diff --git a/build/includes/summa_actor/client.hpp b/build/includes/summa_actor/client.hpp index 876e8c7..6e985c4 100644 --- a/build/includes/summa_actor/client.hpp +++ b/build/includes/summa_actor/client.hpp @@ -50,4 +50,6 @@ class Client_Container { */ void addClient(caf::actor client_actor, std::string hostname); + + int getClientID(caf::actor); }; \ 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 496429d..8afa70b 100644 --- a/build/includes/summa_actor/summa_client.hpp +++ b/build/includes/summa_actor/summa_client.hpp @@ -23,6 +23,7 @@ struct summa_client_state { Job_Actor_Settings job_actor_settings; HRU_Actor_Settings hru_actor_settings; }; + behavior summa_client(stateful_actor<summa_client_state>* self, std::optional<std::string> config_path); behavior unconnected(stateful_actor<summa_client_state>*); void connecting(stateful_actor<summa_client_state>*, const std::string& host, uint16_t port); diff --git a/build/source/actors/summa_actor/batch_manager.cpp b/build/source/actors/summa_actor/batch_manager.cpp index 43fabca..16ff2ca 100644 --- a/build/source/actors/summa_actor/batch_manager.cpp +++ b/build/source/actors/summa_actor/batch_manager.cpp @@ -29,13 +29,22 @@ void Batch_Container::assembleBatches(int total_hru_count, int num_hru_per_batch } } -void Batch_Container::printBatches(){ +void Batch_Container::printBatches() { for (std::vector<int>::size_type i = 0; i < this->batch_list.size(); i++) { this->batch_list[i].printBatchInfo(); } } +Batch Batch_Container::assignBatch(std::string hostname, caf::actor actor_ref) { + for (std::vector<int>::size_type i = 0; i < this->batch_list.size(); i++) { + if (!this->batch_list[i].getBatchStatus()) { + return this->batch_list[i]; + } + } + return NULL; +} + Batch::Batch(int batch_id, int start_hru, int num_hru){ this->batch_id = batch_id; diff --git a/build/source/actors/summa_actor/client.cpp b/build/source/actors/summa_actor/client.cpp index 47dd301..592a10a 100644 --- a/build/source/actors/summa_actor/client.cpp +++ b/build/source/actors/summa_actor/client.cpp @@ -32,4 +32,15 @@ void Client_Container::addClient(caf::actor client_actor, std::string hostname) Client{client_id, client_actor, hostname}); this->num_clients++; + +} + + +int Client_Container::getClientID(caf::actor client_actor) { + for (int i = 0; i < num_clients; i++) { + if (client_actor == this->client_list[i].getActor()){ + return this->client_list[i].getID(); + } + } + return -1; } diff --git a/build/source/actors/summa_actor/summa_client.cpp b/build/source/actors/summa_actor/summa_client.cpp index 6e7028d..71b01c1 100644 --- a/build/source/actors/summa_actor/summa_client.cpp +++ b/build/source/actors/summa_actor/summa_client.cpp @@ -78,7 +78,7 @@ behavior running(stateful_actor<summa_client_state>* self, const actor& server_a Job_Actor_Settings job_actor_settings, HRU_Actor_Settings hru_actor_settings) { aout(self) << "Successfully Connected to Server Actor \n"; - + aout(self) << "Recieved ID of " << client_id << "\n"; self->state.client_id = client_id; self->state.summa_actor_settings = summa_actor_settings; self->state.file_access_actor_settings = file_access_actor_settings; @@ -110,7 +110,6 @@ behavior running(stateful_actor<summa_client_state>* self, const actor& server_a self->state.job_actor_settings, self->state.hru_actor_settings, self); - }, [=](done_batch, double total_duration, double total_read_duration, double total_write_duration) { diff --git a/build/source/actors/summa_actor/summa_server.cpp b/build/source/actors/summa_actor/summa_server.cpp index 3b9de90..b6c211f 100644 --- a/build/source/actors/summa_actor/summa_server.cpp +++ b/build/source/actors/summa_actor/summa_server.cpp @@ -28,20 +28,6 @@ behavior summa_server(stateful_actor<summa_server_state>* self, Distributed_Sett self->state.batch_container->printBatches(); - // self->state.csv_output_name = "Batch_Results.csv"; - // initializeCSVOutput(self->state.csv_output_name); - - // aout(self) << "Assembling HRUs into Batches\n"; - // if (assembleBatches(self) == -1) { - // aout(self) << "ERROR: assembleBatches\n"; - // } else { - // aout(self) << "HRU Batches Assembled, Ready For Clients to Connect \n"; - - // for (std::vector<int>::size_type i = 0; i < self->state.batch_list.size(); i++) { - // self->state.batch_list[i].printBatchInfo(); - // } - // } - return { /** * @brief A message from a client requresting to connect @@ -56,10 +42,13 @@ behavior summa_server(stateful_actor<summa_server_state>* self, Distributed_Sett self->state.client_container->addClient(client_actor, hostname); // Tell client they are connected - self->send(client_actor, connect_to_server_v, 1, self->state.summa_actor_settings, - self->state.file_access_actor_settings, self->state.job_actor_settings, self->state.hru_actor_settings); + self->send(client_actor, connect_to_server_v, self->state.client_container->getClientID(client_actor), + self->state.summa_actor_settings, self->state.file_access_actor_settings, self->state.job_actor_settings, + self->state.hru_actor_settings); + + Batch batch = self->state.batch_container->assignBatch(hostname, client_actor); // std::optional<int> batch_id = getUnsolvedBatchID(self); // if (batch_id.has_value()) { -- GitLab