]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: fix dropping mgr metadata for active mgr 17571/head
authorJohn Spray <john.spray@redhat.com>
Thu, 7 Sep 2017 13:44:36 +0000 (09:44 -0400)
committerJohn Spray <john.spray@redhat.com>
Fri, 8 Sep 2017 13:45:41 +0000 (15:45 +0200)
drop_standby() was killing it and it was only getting added
back in certain locations.  Instead, make the metadata
drop conditional and only do it in the places we're
really dropping the daemon, not when we're promoting
it to active.

Fixes: http://tracker.ceph.com/issues/21260
Signed-off-by: John Spray <john.spray@redhat.com>
src/mon/MgrMonitor.cc
src/mon/MgrMonitor.h

index ae501b3593d9c41b1fd3e2fa7d6dedf49474ca3a..cc0ffe673d73fe95f78ab89988f3c2da8586eafd 100644 (file)
@@ -331,7 +331,7 @@ bool MgrMonitor::prepare_beacon(MonOpRequestRef op)
   } else if (pending_map.active_gid == 0) {
     // There is no currently active daemon, select this one.
     if (pending_map.standbys.count(m->get_gid())) {
-      drop_standby(m->get_gid());
+      drop_standby(m->get_gid(), false);
     }
     dout(4) << "selecting new active " << m->get_gid()
            << " " << m->get_name()
@@ -569,7 +569,8 @@ bool MgrMonitor::promote_standby()
     pending_map.available = false;
     pending_map.active_addr = entity_addr_t();
 
-    drop_standby(replacement_gid);
+    drop_standby(replacement_gid, false);
+
     return true;
   } else {
     return false;
@@ -594,10 +595,12 @@ void MgrMonitor::drop_active()
   cancel_timer();
 }
 
-void MgrMonitor::drop_standby(uint64_t gid)
+void MgrMonitor::drop_standby(uint64_t gid, bool drop_meta)
 {
-  pending_metadata_rm.insert(pending_map.standbys[gid].name);
-  pending_metadata.erase(pending_map.standbys[gid].name);
+  if (drop_meta) {
+    pending_metadata_rm.insert(pending_map.standbys[gid].name);
+    pending_metadata.erase(pending_map.standbys[gid].name);
+  }
   pending_map.standbys.erase(gid);
   if (last_beacon.count(gid) > 0) {
     last_beacon.erase(gid);
index 393211c204732f46306aec33cbc97f1f6e469017..de07d7f430248d60096421cbd6e702da7fefd90e 100644 (file)
@@ -43,7 +43,16 @@ class MgrMonitor: public PaxosService
    */
   bool promote_standby();
   void drop_active();
-  void drop_standby(uint64_t gid);
+
+  /**
+   * Remove this gid from the list of standbys.  By default,
+   * also remove metadata (i.e. forget the daemon entirely).
+   *
+   * Set `drop_meta` to false if you would like to keep
+   * the daemon's metadata, for example if you're dropping
+   * it as a standby before reinstating it as the active daemon.
+   */
+  void drop_standby(uint64_t gid, bool drop_meta=true);
 
   Context *digest_event = nullptr;
   void cancel_timer();