void Monitor::set_elector_disallowed_leaders(bool allow_election)
{
set<int> dl;
+ // inherit dl from monmap
for (auto name : monmap->disallowed_leaders) {
dl.insert(monmap->get_rank(name));
- }
- if (is_stretch_mode()) {
- for (auto name : monmap->stretch_marked_down_mons) {
- dl.insert(monmap->get_rank(name));
- }
- dl.insert(monmap->get_rank(monmap->tiebreaker_mon));
+ } // unconditionally add stretch_marked_down_mons to the new dl copy
+ for (auto name : monmap->stretch_marked_down_mons) {
+ dl.insert(monmap->get_rank(name));
+ } // add the tiebreaker_mon incase it is not in monmap->disallowed_leaders
+ if (!monmap->tiebreaker_mon.empty() &&
+ monmap->contains(monmap->tiebreaker_mon)) {
+ dl.insert(monmap->get_rank(monmap->tiebreaker_mon));
}
bool disallowed_changed = elector.set_disallowed_leaders(dl);