diff --git a/src/config/config.cc b/src/config/config.cc index d0a76a3..14b0859 100644 --- a/src/config/config.cc +++ b/src/config/config.cc @@ -68,13 +68,16 @@ namespace paxos /* Create VHostConfig vector and fill with VHostConfig */ std::vector legislator_configs; + int i = 0; for (auto it : legislators) { /* Differenciable vhost checking */ auto legislator = it.get(); + legislator.ballot_partition_id = i; legislator.is_self = name == legislator.name; legislator_configs.push_back(legislator); + ++i; } return legislator_configs; diff --git a/src/config/config.hh b/src/config/config.hh index f32142a..1ff4b18 100644 --- a/src/config/config.hh +++ b/src/config/config.hh @@ -12,6 +12,8 @@ namespace paxos std::string port; std::string name; bool is_self; + + int ballot_partition_id; }; struct ServerConfig diff --git a/src/legislator/legislator.cc b/src/legislator/legislator.cc index a35497e..cebd865 100644 --- a/src/legislator/legislator.cc +++ b/src/legislator/legislator.cc @@ -19,12 +19,19 @@ namespace paxos { has_started = false; quorum_previous_votes.clear(); - int new_ballot_number = ledger.last_tried() + 1; + int new_ballot_number = get_next_ballot_id(ledger.last_tried()); 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) + { + if (previous_ballot_id == -1) + return config_.ballot_partition_id; + return previous_ballot_id + legislators.size(); + } + void Legislator::send_next_ballot(int ballot) { std::string ballot_string = std::to_string(ballot); diff --git a/src/legislator/legislator.hh b/src/legislator/legislator.hh index 8586170..76f4999 100644 --- a/src/legislator/legislator.hh +++ b/src/legislator/legislator.hh @@ -16,6 +16,7 @@ namespace paxos LegislatorConfig config_; void initiate_ballot(); + int get_next_ballot_id(int previous_ballot_id); void send_next_ballot(int ballot); void receive_next_ballot(Message message);