Skip to content
Snippets Groups Projects
Commit 76bc1d14 authored by KyleKlenk's avatar KyleKlenk
Browse files

fixed small bug where a clients batch could not be set to none

parent c36333ed
No related branches found
No related tags found
No related merge requests found
...@@ -25,7 +25,7 @@ class Client { ...@@ -25,7 +25,7 @@ class Client {
// #################################################################### // ####################################################################
// Setters // Setters
// #################################################################### // ####################################################################
void setBatch(Batch batch); void setBatch(std::optional<Batch> batch);
// #################################################################### // ####################################################################
// Methods // Methods
// #################################################################### // ####################################################################
......
...@@ -25,7 +25,7 @@ class Client_Container { ...@@ -25,7 +25,7 @@ class Client_Container {
// Setters // Setters
// #################################################################### // ####################################################################
void setBatchForClient(caf::actor client_ref, Batch batch); void setBatchForClient(caf::actor client_ref, std::optional<Batch> batch);
// #################################################################### // ####################################################################
// Methods // Methods
......
...@@ -29,7 +29,7 @@ std::optional<Batch> Client::getBatch() { ...@@ -29,7 +29,7 @@ std::optional<Batch> Client::getBatch() {
// #################################################################### // ####################################################################
// Setters // Setters
// #################################################################### // ####################################################################
void Client::setBatch(Batch batch) { void Client::setBatch(std::optional<Batch> batch) {
this->current_batch = batch; this->current_batch = batch;
} }
......
...@@ -29,10 +29,14 @@ std::optional<Client> Client_Container::getClient(caf::actor_addr client_ref) { ...@@ -29,10 +29,14 @@ std::optional<Client> Client_Container::getClient(caf::actor_addr client_ref) {
// Setters // Setters
// #################################################################### // ####################################################################
void Client_Container::setBatchForClient(caf::actor client_ref, Batch batch) { void Client_Container::setBatchForClient(caf::actor client_ref, std::optional<Batch> batch) {
for(auto client = begin(this->client_list); client != end(this->client_list); ++client) { for(auto client = begin(this->client_list); client != end(this->client_list); ++client) {
if (client_ref == client->getActor()) { if (client_ref == client->getActor()) {
client->setBatch(batch); if (batch.has_value()) {
client->setBatch(batch.value());
} else {
client->setBatch({});
}
break; break;
} }
} }
......
...@@ -17,6 +17,7 @@ behavior summa_server_init(stateful_actor<summa_server_state>* self, Distributed ...@@ -17,6 +17,7 @@ behavior summa_server_init(stateful_actor<summa_server_state>* self, Distributed
self->state.client_container.removeClient(client.value()); self->state.client_container.removeClient(client.value());
notifyBackupServersOfRemovedClient(self, client.value()); notifyBackupServersOfRemovedClient(self, client.value());
checkForIdleClients(self); checkForIdleClients(self);
} else { } else {
aout(self) << "Lost Backup Server\n"; aout(self) << "Lost Backup Server\n";
findAndRemoveLostBackupServer(self, dm.source); findAndRemoveLostBackupServer(self, dm.source);
...@@ -79,7 +80,7 @@ behavior summa_server(stateful_actor<summa_server_state>* self) { ...@@ -79,7 +80,7 @@ behavior summa_server(stateful_actor<summa_server_state>* self) {
std::optional<Batch> batch = self->state.batch_container.getUnsolvedBatch(); std::optional<Batch> batch = self->state.batch_container.getUnsolvedBatch();
if (batch.has_value()) { if (batch.has_value()) {
self->state.client_container.setBatchForClient(client_actor, batch.value()); self->state.client_container.setBatchForClient(client_actor, batch);
aout(self) << "SENDING: " << batch.value().toString() << "\n"; aout(self) << "SENDING: " << batch.value().toString() << "\n";
self->send(client_actor, batch.value()); self->send(client_actor, batch.value());
for (auto& backup_server : self->state.backup_servers_list) { for (auto& backup_server : self->state.backup_servers_list) {
...@@ -120,7 +121,7 @@ behavior summa_server(stateful_actor<summa_server_state>* self) { ...@@ -120,7 +121,7 @@ behavior summa_server(stateful_actor<summa_server_state>* self) {
if (new_batch.has_value()) { if (new_batch.has_value()) {
// send clients new batch and update backup servers // send clients new batch and update backup servers
self->state.client_container.setBatchForClient(client_actor, new_batch.value()); self->state.client_container.setBatchForClient(client_actor, new_batch);
self->send(client_actor, new_batch.value()); self->send(client_actor, new_batch.value());
for (auto& backup_server : self->state.backup_servers_list) { for (auto& backup_server : self->state.backup_servers_list) {
caf::actor backup_server_actor = std::get<0>(backup_server); caf::actor backup_server_actor = std::get<0>(backup_server);
...@@ -209,12 +210,15 @@ void findAndRemoveLostBackupServer(stateful_actor<summa_server_state>* self, act ...@@ -209,12 +210,15 @@ void findAndRemoveLostBackupServer(stateful_actor<summa_server_state>* self, act
} }
void checkForIdleClients(stateful_actor<summa_server_state>* self) { void checkForIdleClients(stateful_actor<summa_server_state>* self) {
aout(self) << "Looking for an idle Client\n";
std::optional<Client> client = self->state.client_container.getIdleClient(); std::optional<Client> client = self->state.client_container.getIdleClient();
if (client.has_value()) { if (client.has_value()) {
aout(self) << "Found an idle Client\n";
std::optional<Batch> new_batch = self->state.batch_container.getUnsolvedBatch(); std::optional<Batch> new_batch = self->state.batch_container.getUnsolvedBatch();
if (new_batch.has_value()) { if (new_batch.has_value()) {
// send clients new batch and update backup servers // send clients new batch and update backup servers
self->state.client_container.setBatchForClient(client.value().getActor(), new_batch.value()); aout(self) << "Found a batch to assign\n";
self->state.client_container.setBatchForClient(client.value().getActor(), new_batch);
self->send(client.value().getActor(), new_batch.value()); self->send(client.value().getActor(), new_batch.value());
for (auto& backup_server : self->state.backup_servers_list) { for (auto& backup_server : self->state.backup_servers_list) {
caf::actor backup_server_actor = std::get<0>(backup_server); caf::actor backup_server_actor = std::get<0>(backup_server);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment