From: Sage Weil Date: Tue, 27 Jun 2017 19:52:25 +0000 (-0400) Subject: mgr: include MgrMap in ClusterState X-Git-Tag: v12.1.1~195^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6c10417f7ed365425019108c2cb9f6d1e091b975;p=ceph.git mgr: include MgrMap in ClusterState Signed-off-by: Sage Weil --- diff --git a/src/mgr/ClusterState.cc b/src/mgr/ClusterState.cc index 8bc88c530f04..44ba19d0b748 100644 --- a/src/mgr/ClusterState.cc +++ b/src/mgr/ClusterState.cc @@ -22,8 +22,15 @@ #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); diff --git a/src/mgr/ClusterState.h b/src/mgr/ClusterState.h index ae08c75daa1a..7b4f3149a62b 100644 --- a/src/mgr/ClusterState.h +++ b/src/mgr/ClusterState.h @@ -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 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(cb)(fsmap, std::forward(args)...); } + template + void with_mgrmap(Callback&& cb, Args&&...args) const + { + Mutex::Locker l(lock); + std::forward(cb)(mgr_map, std::forward(args)...); + } + template auto with_pgmap(Callback&& cb, Args&&...args) const -> decltype(cb(pg_map, std::forward(args)...)) diff --git a/src/mgr/Mgr.cc b/src/mgr/Mgr.cc index cd21408efa30..0030fc706c59 100644 --- a/src/mgr/Mgr.cc +++ b/src/mgr/Mgr.cc @@ -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) { diff --git a/src/mgr/Mgr.h b/src/mgr/Mgr.h index 0aa5b5c5be0c..d6e7bc629a70 100644 --- a/src/mgr/Mgr.h +++ b/src/mgr/Mgr.h @@ -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(); diff --git a/src/mgr/MgrStandby.cc b/src/mgr/MgrStandby.cc index d46dc194aa7f..5d2e735bb850 100644 --- a/src/mgr/MgrStandby.cc +++ b/src/mgr/MgrStandby.cc @@ -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) {