]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/MgrClient: use ref_t<M>
authorKefu Chai <kchai@redhat.com>
Mon, 15 Apr 2019 06:55:24 +0000 (14:55 +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/MMgrConfigure.h
src/messages/MMgrMap.h
src/mgr/MgrClient.cc
src/mgr/MgrClient.h
src/mon/MgrMonitor.cc

index 55f8869954f4698baade04a9934015f4f7aba357..1cf7bf7888911fcc4641703e5a8d81becb3e0f8d 100644 (file)
@@ -65,6 +65,8 @@ private:
   MMgrConfigure()
     : Message{MSG_MGR_CONFIGURE, HEAD_VERSION, COMPAT_VERSION}
   {}
+  using RefCountedObject::put;
+  using RefCountedObject::get;
   template<class T, typename... Args>
   friend boost::intrusive_ptr<T> ceph::make_message(Args&&... args);
 };
index 46c52ca9deb0d3f5c0c089f81e73a89db041b4f2..76710bf7d59f95d40711a5ab978acecefbeafa6f 100644 (file)
@@ -49,6 +49,8 @@ public:
     encode(map, payload, features);
   }
 private:
+  using RefCountedObject::put;
+  using RefCountedObject::get;
   template<class T, typename... Args>
   friend boost::intrusive_ptr<T> ceph::make_message(Args&&... args);
 };
index d2ecd02ee222c1bd83a868c07342e7b1af27edc6..49c66c6aeb38fb2e1936abdfd78f051487ac5a1a 100644 (file)
@@ -69,10 +69,10 @@ void MgrClient::shutdown()
       session->con &&
       HAVE_FEATURE(session->con->get_features(), SERVER_MIMIC)) {
     ldout(cct, 10) << "closing mgr session" << dendl;
-    MMgrClose *m = new MMgrClose();
+    auto m = make_message<MMgrClose>();
     m->daemon_name = daemon_name;
     m->service_name = service_name;
-    session->con->send_message(m);
+    session->con->send_message2(m);
     utime_t timeout;
     timeout.set_from_double(cct->_conf.get_val<double>(
                              "mgr_client_service_daemon_unregister_timeout"));
@@ -86,20 +86,20 @@ void MgrClient::shutdown()
   }
 }
 
-bool MgrClient::ms_dispatch(Message *m)
+bool MgrClient::ms_dispatch2(const ref_t<Message>& m)
 {
   std::lock_guard l(lock);
 
   switch(m->get_type()) {
   case MSG_MGR_MAP:
-    return handle_mgr_map(static_cast<MMgrMap*>(m));
+    return handle_mgr_map(ref_cast<MMgrMap>(m));
   case MSG_MGR_CONFIGURE:
-    return handle_mgr_configure(static_cast<MMgrConfigure*>(m));
+    return handle_mgr_configure(ref_cast<MMgrConfigure>(m));
   case MSG_MGR_CLOSE:
-    return handle_mgr_close(static_cast<MMgrClose*>(m));
+    return handle_mgr_close(ref_cast<MMgrClose>(m));
   case MSG_COMMAND_REPLY:
     if (m->get_source().type() == CEPH_ENTITY_TYPE_MGR) {
-      handle_command_reply(static_cast<MCommandReply*>(m));
+      handle_command_reply(ref_cast<MCommandReply>(m));
       return true;
     } else {
       return false;
@@ -201,7 +201,7 @@ void MgrClient::_send_open()
   }
 }
 
-bool MgrClient::handle_mgr_map(MMgrMap *m)
+bool MgrClient::handle_mgr_map(ref_t<MMgrMap> m)
 {
   ceph_assert(lock.is_locked_by_me());
 
@@ -209,7 +209,6 @@ bool MgrClient::handle_mgr_map(MMgrMap *m)
 
   map = m->get_map();
   ldout(cct, 4) << "Got map version " << map.epoch << dendl;
-  m->put();
 
   ldout(cct, 4) << "Active mgr is now " << map.get_active_addrs() << dendl;
 
@@ -375,7 +374,7 @@ void MgrClient::_send_pgstats()
   }
 }
 
-bool MgrClient::handle_mgr_configure(MMgrConfigure *m)
+bool MgrClient::handle_mgr_configure(ref_t<MMgrConfigure> m)
 {
   ceph_assert(lock.is_locked_by_me());
 
@@ -383,7 +382,6 @@ bool MgrClient::handle_mgr_configure(MMgrConfigure *m)
 
   if (!session) {
     lderr(cct) << "dropping unexpected configure message" << dendl;
-    m->put();
     return true;
   }
 
@@ -404,15 +402,13 @@ bool MgrClient::handle_mgr_configure(MMgrConfigure *m)
     _send_stats();
   }
 
-  m->put();
   return true;
 }
 
-bool MgrClient::handle_mgr_close(MMgrClose *m)
+bool MgrClient::handle_mgr_close(ref_t<MMgrClose> m)
 {
   service_daemon = false;
   shutdown_cond.Signal();
-  m->put();
   return true;
 }
 
@@ -446,7 +442,7 @@ int MgrClient::start_command(const vector<string>& cmd, const bufferlist& inbl,
   return 0;
 }
 
-bool MgrClient::handle_command_reply(MCommandReply *m)
+bool MgrClient::handle_command_reply(ref_t<MCommandReply> m)
 {
   ceph_assert(lock.is_locked_by_me());
 
@@ -456,7 +452,6 @@ bool MgrClient::handle_command_reply(MCommandReply *m)
   if (!command_table.exists(tid)) {
     ldout(cct, 4) << "handle_command_reply tid " << m->get_tid()
             << " not found" << dendl;
-    m->put();
     return true;
   }
 
@@ -474,8 +469,6 @@ bool MgrClient::handle_command_reply(MCommandReply *m)
   }
 
   command_table.erase(tid);
-
-  m->put();
   return true;
 }
 
index 2b913c05b2b101358a77cd412e2481ebd22139a1..9c73ba9d26f3a83415d42b79f71a7a843a25025a 100644 (file)
@@ -109,15 +109,15 @@ public:
 
   void set_mgr_optional(bool optional_) {mgr_optional = optional_;}
 
-  bool ms_dispatch(Message *m) override;
+  bool ms_dispatch2(const ceph::ref_t<Message>& m) override;
   bool ms_handle_reset(Connection *con) override;
   void ms_handle_remote_reset(Connection *con) override {}
   bool ms_handle_refused(Connection *con) override;
 
-  bool handle_mgr_map(MMgrMap *m);
-  bool handle_mgr_configure(MMgrConfigure *m);
-  bool handle_mgr_close(MMgrClose *m);
-  bool handle_command_reply(MCommandReply *m);
+  bool handle_mgr_map(ceph::ref_t<MMgrMap> m);
+  bool handle_mgr_configure(ceph::ref_t<MMgrConfigure> m);
+  bool handle_mgr_close(ceph::ref_t<MMgrClose> m);
+  bool handle_command_reply(ceph::ref_t<MCommandReply> m);
 
   void set_perf_metric_query_cb(
     std::function<void(const std::map<OSDPerfMetricQuery,
index a9f935d29a1ad3565e9b31579e33c468b9c6e816..ff3539f72c593fe2bf0525862eca24add49957d9 100644 (file)
@@ -234,7 +234,7 @@ void MgrMonitor::update_from_paxos(bool *need_bootstrap)
 void MgrMonitor::prime_mgr_client()
 {
   dout(10) << __func__ << dendl;
-  mon->mgr_client.ms_dispatch(new MMgrMap(map));
+  mon->mgr_client.ms_dispatch2(make_message<MMgrMap>(map));
 }
 
 void MgrMonitor::create_pending()