]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
elector: hoist expire into ElectionLogic
authorGreg Farnum <gfarnum@redhat.com>
Fri, 7 Jun 2019 22:05:00 +0000 (15:05 -0700)
committerGreg Farnum <gfarnum@redhat.com>
Mon, 19 Aug 2019 20:04:59 +0000 (13:04 -0700)
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
src/mon/Elector.cc
src/mon/Elector.h

index 0f0d8045b9b9fda6704f909e85ba86b0ca2aeebf..0c6daf8955ef76e432352496fbd61f8703eddb19 100644 (file)
@@ -71,6 +71,21 @@ int ElectionLogic::elector_my_rank()
   return elector->mon->rank;
 }
 
+void ElectionLogic::elector_reset()
+{
+  elector->mon->bootstrap();
+}
+
+bool ElectionLogic::elector_ever_participated()
+{
+  return elector->mon->has_ever_joined;
+}
+
+unsigned ElectionLogic::elector_paxos_size()
+{
+  return (unsigned)elector->mon->monmap->size();
+}
+
 
 void ElectionLogic::init()
 {
@@ -209,7 +224,7 @@ void Elector::reset_timer(double plus)
   expire_event = mon->timer.add_event_after(
     g_conf()->mon_election_timeout + plus,
     new C_MonContext(mon, [this](int) {
-       expire();
+       logic.end_election_period();
       }));
 }
 
@@ -222,25 +237,24 @@ void Elector::cancel_timer()
   }
 }
 
-void Elector::expire()
+void ElectionLogic::end_election_period()
 {
-  dout(5) << "election timer expired" << dendl;
+  dout(5) << "election period ended" << dendl;
   
   // did i win?
-  if (logic.electing_me &&
-      logic.acked_me.size() > (unsigned)(mon->monmap->size() / 2)) {
+  if (electing_me &&
+      acked_me.size() > (elector_paxos_size() / 2)) {
     // i win
-    victory();
+    elector->victory();
   } else {
     // whoever i deferred to didn't declare victory quickly enough.
-    if (mon->has_ever_joined)
-      logic.start();
+    if (elector_ever_participated())
+      start();
     else
-      mon->bootstrap();
+      elector_reset();
   }
 }
 
-
 void Elector::victory()
 {
   logic.leader_acked = -1;
index 9eeaf5466baad13e3b3f877a01b71b7c81111031..2593b64a30459127a074acdf285f8cb9c482b745 100644 (file)
@@ -42,7 +42,9 @@ public:
   void bump_epoch(epoch_t e);
   void start();
   void defer(int who);
+  void end_election_period();
   void handle_propose_logic(epoch_t mepoch, int from);
+
   
 private:
   // call-outs
@@ -53,6 +55,9 @@ private:
   void elector_trigger_new_election();
   int elector_my_rank();
   void elector_propose_to_peers(epoch_t e);
+  void elector_reset();
+  bool elector_ever_participated();
+  unsigned elector_paxos_size();
 };
 
 /**
@@ -237,7 +242,7 @@ private:
    * as far as we know, we may even be dead); so, just propose ourselves as the
    * Leader.
    */
-  void expire();
+  //  void expire();
   /**
    * Declare Victory.
    *