]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr: remove non-existent MDS daemons from FSMap 14937/head
authorSpandan Kumar Sahu <spandankumarsahu@gmail.com>
Tue, 2 May 2017 23:05:22 +0000 (04:35 +0530)
committerSpandan Kumar Sahu <spandankumarsahu@gmail.com>
Fri, 5 May 2017 11:24:58 +0000 (16:54 +0530)
Fixes: http://tracker.ceph.com/issues/17453
Signed-off-by: Spandan Kumar Sahu <spandankumarsahu@gmail.com>
src/mgr/Mgr.cc

index eb6c9a1639b28991a4761e8e897008dd29fe69d9..5630a5e30b2dce178394fdae4082d198545b4327 100644 (file)
@@ -440,7 +440,7 @@ void Mgr::handle_osd_map()
     cluster_state.notify_osdmap(osd_map);
   });
 
-  // TODO: same culling for MonMap and FSMap
+  // TODO: same culling for MonMap
   daemon_state.cull(CEPH_ENTITY_TYPE_OSD, names_exist);
 }
 
@@ -506,6 +506,8 @@ void Mgr::handle_fs_map(MFSMap* m)
 {
   assert(lock.is_locked_by_me());
 
+  std::set<std::string> names_exist;
+  
   const FSMap &new_fsmap = m->get_fsmap();
 
   fs_map_cond.Signal();
@@ -521,6 +523,13 @@ void Mgr::handle_fs_map(MFSMap* m)
   for (const auto &i : mds_info) {
     const auto &info = i.second;
 
+    if (!new_fsmap.gid_exists(i.first)){
+      continue;
+    }
+
+    // Remember which MDS exists so that we can cull any that don't
+    names_exist.insert(info.name);
+
     const auto k = DaemonKey(CEPH_ENTITY_TYPE_MDS, info.name);
     if (daemon_state.is_updating(k)) {
       continue;
@@ -561,6 +570,7 @@ void Mgr::handle_fs_map(MFSMap* m)
           {}, &c->outbl, &c->outs, c);
     }
   }
+  daemon_state.cull(CEPH_ENTITY_TYPE_MDS, names_exist);
 }