From c68c0a8a07872c7b11bfdb17f56b75e8f82136bf Mon Sep 17 00:00:00 2001 From: Julien Clement Date: Thu, 7 May 2020 11:40:49 +0200 Subject: [PATCH] Now searchs the next ballot to initiate by looking ballots initiated by others --- src/legislator/legislator.cc | 10 +++++++--- src/legislator/legislator.hh | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/legislator/legislator.cc b/src/legislator/legislator.cc index cebd865..893a3cf 100644 --- a/src/legislator/legislator.cc +++ b/src/legislator/legislator.cc @@ -19,16 +19,20 @@ namespace paxos { has_started = false; quorum_previous_votes.clear(); - int new_ballot_number = get_next_ballot_id(ledger.last_tried()); + int new_ballot_number = get_next_ballot_id(); ledger.set_last_tried(new_ballot_number); log(config_.name + " is initiating ballot " + std::to_string(new_ballot_number), green); send_next_ballot(new_ballot_number); } - int Legislator::get_next_ballot_id(int previous_ballot_id) + int Legislator::get_next_ballot_id() { + int previous_ballot_id = ledger.last_tried(); if (previous_ballot_id == -1) - return config_.ballot_partition_id; + previous_ballot_id = config_.ballot_partition_id - legislators.size(); + int last_voted_ballot = ledger.next_bal(); + while (last_voted_ballot > (int)legislators.size() + previous_ballot_id) + previous_ballot_id += legislators.size(); return previous_ballot_id + legislators.size(); } diff --git a/src/legislator/legislator.hh b/src/legislator/legislator.hh index 76f4999..7a75049 100644 --- a/src/legislator/legislator.hh +++ b/src/legislator/legislator.hh @@ -16,7 +16,7 @@ namespace paxos LegislatorConfig config_; void initiate_ballot(); - int get_next_ballot_id(int previous_ballot_id); + int get_next_ballot_id(); void send_next_ballot(int ballot); void receive_next_ballot(Message message);