]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr: include MgrMap in ClusterState
authorSage Weil <sage@redhat.com>
Tue, 27 Jun 2017 19:52:25 +0000 (15:52 -0400)
committerSage Weil <sage@redhat.com>
Fri, 30 Jun 2017 03:10:00 +0000 (23:10 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mgr/ClusterState.cc
src/mgr/ClusterState.h
src/mgr/Mgr.cc
src/mgr/Mgr.h
src/mgr/MgrStandby.cc

index 8bc88c530f04fd492521745bf1562b68cbbb7276..44ba19d0b74843f75a8e0da7a87a2a2889157208 100644 (file)
 #undef dout_prefix
 #define dout_prefix *_dout << "mgr " << __func__ << " "
 
-ClusterState::ClusterState(MonClient *monc_, Objecter *objecter_)
-  : monc(monc_), objecter(objecter_), lock("ClusterState"), pgservice(pg_map)
+ClusterState::ClusterState(
+  MonClient *monc_,
+  Objecter *objecter_,
+  const MgrMap& mgrmap)
+  : monc(monc_),
+    objecter(objecter_),
+    lock("ClusterState"),
+    mgr_map(mgrmap),
+    pgservice(pg_map)
 {}
 
 void ClusterState::set_objecter(Objecter *objecter_)
@@ -40,6 +47,12 @@ void ClusterState::set_fsmap(FSMap const &new_fsmap)
   fsmap = new_fsmap;
 }
 
+void ClusterState::set_mgr_map(MgrMap const &new_mgrmap)
+{
+  Mutex::Locker l(lock);
+  mgr_map = new_mgrmap;
+}
+
 void ClusterState::load_digest(MMgrDigest *m)
 {
   health_json = std::move(m->health_json);
index ae08c75daa1a0d8f4d56e31a4f41dfffb9943fe0..7b4f3149a62bc71e7537b407bf98febff359a2b9 100644 (file)
@@ -15,6 +15,7 @@
 #define CLUSTER_STATE_H_
 
 #include "mds/FSMap.h"
+#include "mon/MgrMap.h"
 #include "common/Mutex.h"
 
 #include "osdc/Objecter.h"
@@ -38,6 +39,8 @@ protected:
   FSMap fsmap;
   mutable Mutex lock;
 
+  MgrMap mgr_map;
+
   set<int64_t> existing_pools; ///< pools that exist, as of PGMap epoch
   PGMap pg_map;
   PGMap::Incremental pending_inc;
@@ -57,10 +60,11 @@ public:
   const bufferlist &get_health() const {return health_json;}
   const bufferlist &get_mon_status() const {return mon_status_json;}
 
-  ClusterState(MonClient *monc_, Objecter *objecter_);
+  ClusterState(MonClient *monc_, Objecter *objecter_, const MgrMap& mgrmap);
 
   void set_objecter(Objecter *objecter_);
   void set_fsmap(FSMap const &new_fsmap);
+  void set_mgr_map(MgrMap const &new_mgrmap);
 
   void notify_osdmap(const OSDMap &osd_map);
 
@@ -76,6 +80,13 @@ public:
     std::forward<Callback>(cb)(fsmap, std::forward<Args>(args)...);
   }
 
+  template<typename Callback, typename...Args>
+  void with_mgrmap(Callback&& cb, Args&&...args) const
+  {
+    Mutex::Locker l(lock);
+    std::forward<Callback>(cb)(mgr_map, std::forward<Args>(args)...);
+  }
+
   template<typename Callback, typename...Args>
   auto with_pgmap(Callback&& cb, Args&&...args) const ->
     decltype(cb(pg_map, std::forward<Args>(args)...))
index cd21408efa30226d3cb0b136e668e08a8a836393..0030fc706c59b65467e25bb683479f490905a5e8 100644 (file)
@@ -39,7 +39,8 @@
 #define dout_prefix *_dout << "mgr " << __func__ << " "
 
 
-Mgr::Mgr(MonClient *monc_, Messenger *clientm_, Objecter *objecter_,
+Mgr::Mgr(MonClient *monc_, const MgrMap& mgrmap,
+        Messenger *clientm_, Objecter *objecter_,
         Client* client_, LogChannelRef clog_, LogChannelRef audit_clog_) :
   monc(monc_),
   objecter(objecter_),
@@ -50,7 +51,7 @@ Mgr::Mgr(MonClient *monc_, Messenger *clientm_, Objecter *objecter_,
   finisher(g_ceph_context, "Mgr", "mgr-fin"),
   py_modules(daemon_state, cluster_state, *monc, clog_, *objecter, *client,
              finisher),
-  cluster_state(monc, nullptr),
+  cluster_state(monc, nullptr, mgrmap),
   server(monc, finisher, daemon_state, cluster_state, py_modules,
          clog_, audit_clog_),
   initialized(false),
@@ -567,6 +568,12 @@ void Mgr::handle_fs_map(MFSMap* m)
   daemon_state.cull(CEPH_ENTITY_TYPE_MDS, names_exist);
 }
 
+void Mgr::got_mgr_map(const MgrMap& m)
+{
+  Mutex::Locker l(lock);
+  dout(10) << m << dendl;
+  cluster_state.set_mgr_map(m);
+}
 
 void Mgr::handle_mgr_digest(MMgrDigest* m)
 {
index 0aa5b5c5be0c35eb5b1997b05a3d6841d385b634..d6e7bc629a70b454bb5bcf36261844a7e295cd05 100644 (file)
@@ -72,7 +72,8 @@ protected:
   bool initializing;
 
 public:
-  Mgr(MonClient *monc_, Messenger *clientm_, Objecter *objecter_,
+  Mgr(MonClient *monc_, const MgrMap& mgrmap,
+      Messenger *clientm_, Objecter *objecter_,
       Client *client_, LogChannelRef clog_, LogChannelRef audit_clog_);
   ~Mgr();
 
@@ -84,6 +85,8 @@ public:
   void handle_osd_map();
   void handle_log(MLog *m);
 
+  void got_mgr_map(const MgrMap& m);
+
   bool ms_dispatch(Message *m);
 
   void tick();
index d46dc194aa7f8450db01b1246b2e8380aa7edbdc..5d2e735bb85064b772b29fc5d9fe6783312ab38f 100644 (file)
@@ -282,12 +282,13 @@ void MgrStandby::handle_mgr_map(MMgrMap* mmap)
   if (active_in_map) {
     if (!active_mgr) {
       dout(1) << "Activating!" << dendl;
-      active_mgr.reset(new Mgr(&monc, client_messenger.get(), &objecter,
+      active_mgr.reset(new Mgr(&monc, map, client_messenger.get(), &objecter,
                               &client, clog, audit_clog));
       active_mgr->background_init();
       dout(1) << "I am now active" << dendl;
     } else {
       dout(10) << "I was already active" << dendl;
+      active_mgr->got_mgr_map(map);
     }
   } else {
     if (active_mgr != nullptr) {