]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/{Mgr,MgrStandby}: use ref_t<M>
authorKefu Chai <kchai@redhat.com>
Mon, 15 Apr 2019 06:39:11 +0000 (14:39 +0800)
committerKefu Chai <kchai@redhat.com>
Wed, 17 Apr 2019 22:59:42 +0000 (06:59 +0800)
Signed-off-by: Kefu Chai <kchai@redhat.com>
src/messages/MMgrDigest.h
src/mgr/Mgr.cc
src/mgr/Mgr.h
src/mgr/MgrStandby.cc
src/mgr/MgrStandby.h

index b92a8c291e4fead5d392a39227f67ea6fb00c0bf..00e237b4c334fe50a39ad8443cb73651ff1cad9b 100644 (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);
 };
index 60f42e20ea073b1196e0772adf30124d3c7e9050..5726dcda4243f2446bccc369b696265a94776d90 100644 (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;
index 0248c9df61e6da3d8e5fc53004b3b902aa1d05be..252d946bbc2ae19a488c30de7d9f773766c8ee2a 100644 (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();
index 2b0715421e2b4bc3c30e623fc088c397f0f87ea9..418a2114cd2e66e26dee3317270b61811e381115 100644 (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) {
index 7adab68d7019c9192a6887a423b228455df51c79..8a7e633b1d7655885dc8d1ca22c2263fb1e7f20a 100644 (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;