From: Greg Farnum Date: Thu, 6 Jun 2019 17:05:09 +0000 (-0700) Subject: elector: hoist defer into ElectionLogic X-Git-Tag: v15.1.0~1791^2~24 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a227a242efdeb5c824828b3f94ea7d1a35c7ccd0;p=ceph.git elector: hoist defer into ElectionLogic Signed-off-by: Greg Farnum --- diff --git a/src/mon/Elector.cc b/src/mon/Elector.cc index bc1bb438b872..85ec8c619eb3 100644 --- a/src/mon/Elector.cc +++ b/src/mon/Elector.cc @@ -152,19 +152,23 @@ void Elector::start() reset_timer(); } -void Elector::defer(int who) +void ElectionLogic::defer(int who) { dout(5) << "defer to " << who << dendl; - if (logic.electing_me) { + if (electing_me) { // drop out - logic.acked_me.clear(); - peer_info.clear(); - logic.electing_me = false; + acked_me.clear(); + electing_me = false; } // ack them - logic.leader_acked = who; + leader_acked = who; + elector->_defer_to(who); +} + +void Elector::_defer_to(int who) +{ MMonElection *m = new MMonElection(MMonElection::OP_ACK, logic.epoch, mon->monmap); m->mon_features = ceph::features::mon::get_supported(); m->mon_release = ceph_release(); @@ -356,7 +360,7 @@ void ElectionLogic::handle_propose_logic(epoch_t mepoch, int from) if (leader_acked < 0 || // haven't acked anyone yet, or leader_acked > from || // they would win over who you did ack, or leader_acked == from) { // this is the guy we're already deferring to - elector->defer(from); + defer(from); } else { // ignore them! dout(5) << "no, we already acked " << leader_acked << dendl; diff --git a/src/mon/Elector.h b/src/mon/Elector.h index e1659f37cb4d..538ba8f64271 100644 --- a/src/mon/Elector.h +++ b/src/mon/Elector.h @@ -39,6 +39,7 @@ public: electing_me(false), leader_acked(-1) {} void bump_epoch(epoch_t e); + void defer(int who); void handle_propose_logic(epoch_t mepoch, int from); private: @@ -219,7 +220,7 @@ private: * * @param who Some other monitor's numeric identifier. */ - void defer(int who); + void _defer_to(int who); /** * The election has taken too long and has expired. *