mgr/{Mgr,MgrStandby}: use ref_t<M>

Signed-off-by: Kefu Chai <kchai@redhat.com>
This commit is contained in:
Kefu Chai 2019-04-15 14:39:11 +08:00
parent 9b6aa95ff4
commit a50a91d243
5 changed files with 24 additions and 28 deletions

View File

@ -48,6 +48,8 @@ private:
Message{MSG_MGR_DIGEST} {}
~MMgrDigest() override {}
using RefCountedObject::put;
using RefCountedObject::get;
template<class T, typename... Args>
friend boost::intrusive_ptr<T> ceph::make_message(Args&&... args);
};

View File

@ -491,16 +491,14 @@ void Mgr::handle_osd_map()
daemon_state.cull("osd", names_exist);
}
void Mgr::handle_log(MLog *m)
void Mgr::handle_log(ref_t<MLog> m)
{
for (const auto &e : m->entries) {
py_module_registry->notify_all(e);
}
m->put();
}
void Mgr::handle_service_map(MServiceMap *m)
void Mgr::handle_service_map(ref_t<MServiceMap> m)
{
dout(10) << "e" << m->service_map.epoch << dendl;
cluster_state.set_service_map(m->service_map);
@ -520,23 +518,22 @@ void Mgr::handle_mon_map()
daemon_state.cull("mon", names_exist);
}
bool Mgr::ms_dispatch(Message *m)
bool Mgr::ms_dispatch2(const ref_t<Message>& m)
{
dout(4) << *m << dendl;
std::lock_guard l(lock);
switch (m->get_type()) {
case MSG_MGR_DIGEST:
handle_mgr_digest(static_cast<MMgrDigest*>(m));
handle_mgr_digest(ref_cast<MMgrDigest>(m));
break;
case CEPH_MSG_MON_MAP:
py_module_registry->notify_all("mon_map", "");
handle_mon_map();
m->put();
break;
case CEPH_MSG_FS_MAP:
py_module_registry->notify_all("fs_map", "");
handle_fs_map((MFSMap*)m);
handle_fs_map(ref_cast<MFSMap>(m));
return false; // I shall let this pass through for Client
break;
case CEPH_MSG_OSD_MAP:
@ -547,15 +544,13 @@ bool Mgr::ms_dispatch(Message *m)
// Continuous subscribe, so that we can generate notifications
// for our MgrPyModules
objecter->maybe_request_map();
m->put();
break;
case MSG_SERVICE_MAP:
handle_service_map(static_cast<MServiceMap*>(m));
handle_service_map(ref_cast<MServiceMap>(m));
py_module_registry->notify_all("service_map", "");
m->put();
break;
case MSG_LOG:
handle_log(static_cast<MLog *>(m));
handle_log(ref_cast<MLog>(m));
break;
default:
@ -565,7 +560,7 @@ bool Mgr::ms_dispatch(Message *m)
}
void Mgr::handle_fs_map(MFSMap* m)
void Mgr::handle_fs_map(ref_t<MFSMap> m)
{
ceph_assert(lock.is_locked_by_me());
@ -657,11 +652,11 @@ bool Mgr::got_mgr_map(const MgrMap& m)
return false;
}
void Mgr::handle_mgr_digest(MMgrDigest* m)
void Mgr::handle_mgr_digest(ref_t<MMgrDigest> m)
{
dout(10) << m->mon_status_json.length() << dendl;
dout(10) << m->health_json.length() << dendl;
cluster_state.load_digest(m);
cluster_state.load_digest(m.get());
py_module_registry->notify_all("mon_status", "");
py_module_registry->notify_all("health", "");
@ -669,8 +664,7 @@ void Mgr::handle_mgr_digest(MMgrDigest* m)
// the pgmap might have changed since last time we were here.
py_module_registry->notify_all("pg_summary", "");
dout(10) << "done." << dendl;
m->put();
m.reset();
if (!digest_received) {
digest_received = true;

View File

@ -80,16 +80,16 @@ public:
return server.get_myaddrs();
}
void handle_mgr_digest(MMgrDigest* m);
void handle_fs_map(MFSMap* m);
void handle_mgr_digest(ceph::ref_t<MMgrDigest> m);
void handle_fs_map(ceph::ref_t<MFSMap> m);
void handle_osd_map();
void handle_log(MLog *m);
void handle_service_map(MServiceMap *m);
void handle_log(ceph::ref_t<MLog> m);
void handle_service_map(ceph::ref_t<MServiceMap> m);
void handle_mon_map();
bool got_mgr_map(const MgrMap& m);
bool ms_dispatch(Message *m);
bool ms_dispatch2(const ceph::ref_t<Message>& m);
void background_init(Context *completion);
void shutdown();

View File

@ -374,7 +374,7 @@ void MgrStandby::_update_log_config()
}
}
void MgrStandby::handle_mgr_map(MMgrMap* mmap)
void MgrStandby::handle_mgr_map(ref_t<MMgrMap> mmap)
{
auto &map = mmap->get_map();
dout(4) << "received map epoch " << map.get_epoch() << dendl;
@ -429,19 +429,19 @@ void MgrStandby::handle_mgr_map(MMgrMap* mmap)
}
}
bool MgrStandby::ms_dispatch(Message *m)
bool MgrStandby::ms_dispatch2(const ref_t<Message>& m)
{
std::lock_guard l(lock);
dout(4) << state_str() << " " << *m << dendl;
if (m->get_type() == MSG_MGR_MAP) {
handle_mgr_map(static_cast<MMgrMap*>(m));
handle_mgr_map(ref_cast<MMgrMap>(m));
}
bool handled = false;
if (active_mgr) {
auto am = active_mgr;
lock.Unlock();
handled = am->ms_dispatch(m);
handled = am->ms_dispatch2(m);
lock.Lock();
}
if (m->get_type() == MSG_MGR_MAP) {

View File

@ -61,7 +61,7 @@ protected:
std::string state_str();
void handle_mgr_map(MMgrMap *m);
void handle_mgr_map(ceph::ref_t<MMgrMap> m);
void _update_log_config();
void send_beacon();
@ -71,7 +71,7 @@ public:
MgrStandby(int argc, const char **argv);
~MgrStandby() override;
bool ms_dispatch(Message *m) override;
bool ms_dispatch2(const ceph::ref_t<Message>& m) override;
bool ms_handle_reset(Connection *con) override { return false; }
void ms_handle_remote_reset(Connection *con) override {}
bool ms_get_authorizer(int dest_type, AuthAuthorizer **authorizer) override;