]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson: integrate mon::Client into OSD
authorKefu Chai <kchai@redhat.com>
Fri, 11 Jan 2019 10:21:25 +0000 (18:21 +0800)
committerKefu Chai <kchai@redhat.com>
Fri, 18 Jan 2019 04:39:37 +0000 (12:39 +0800)
and register them as dispatchers using ChainedDispatchers

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/osd.cc
src/crimson/osd/osd.h

index 5692edc7a14457edba8f0452f505250add4bc5bb..a807a61bb2176e161b2ab484a826390e1bd6d11f 100644 (file)
@@ -1,5 +1,6 @@
 #include "osd.h"
 
+#include "crimson/net/Connection.h"
 #include "crimson/net/SocketMessenger.h"
 
 namespace {
@@ -26,6 +27,8 @@ OSD::OSD(int id, uint32_t nonce)
       msgr->set_crc_header();
     }
   }
+  dispatchers.push_front(this);
+  dispatchers.push_front(&monc);
 }
 
 OSD::~OSD() = default;
@@ -33,10 +36,48 @@ OSD::~OSD() = default;
 seastar::future<> OSD::start()
 {
   logger().info("start");
-  return seastar::now();
+  return client_msgr.start(&dispatchers).then([this] {
+    return monc.start();
+  }).then([this] {
+    monc.sub_want("mgrmap", 0, 0);
+    monc.sub_want("osdmap", 0, 0);
+    return monc.renew_subs();
+  });
 }
 
 seastar::future<> OSD::stop()
 {
-  return gate.close();
+  return gate.close().then([this] {
+    return monc.stop();
+  }).then([this] {
+    return client_msgr->shutdown();
+  });
+}
+
+seastar::future<> OSD::ms_dispatch(ceph::net::ConnectionRef conn, MessageRef m)
+{
+  logger().info("ms_dispatch {}", *m);
+  return seastar::now();
+}
+
+seastar::future<> OSD::ms_handle_connect(ceph::net::ConnectionRef conn)
+{
+  if (conn->get_peer_type() != CEPH_ENTITY_TYPE_MON) {
+    return seastar::now();
+  } else {
+    return seastar::now();
+  }
+}
+
+seastar::future<> OSD::ms_handle_reset(ceph::net::ConnectionRef conn)
+{
+  // TODO: cleanup the session attached to this connection
+  logger().warn("ms_handle_reset");
+  return seastar::now();
+}
+
+seastar::future<> OSD::ms_handle_remote_reset(ceph::net::ConnectionRef conn)
+{
+  logger().warn("ms_handle_remote_reset");
+  return seastar::now();
 }
index a648f136461630528007072473c9488e3ffb932c..9abc11bbb5636b83ea0612ee786c9e045f47aa34 100644 (file)
@@ -3,7 +3,9 @@
 #include <seastar/core/future.hh>
 #include <seastar/core/gate.hh>
 
+#include "crimson/mon/MonClient.h"
 #include "crimson/net/Dispatcher.h"
+#include "crimson/osd/chained_dispatchers.h"
 
 namespace ceph::net {
   class Messenger;
@@ -16,6 +18,14 @@ class OSD : public ceph::net::Dispatcher {
   std::unique_ptr<ceph::net::Messenger> cluster_msgr;
   // talk with mon/mgr
   std::unique_ptr<ceph::net::Messenger> client_msgr;
+  ChainedDispatchers dispatchers;
+  ceph::mon::Client monc;
+
+  // Dispatcher methods
+  seastar::future<> ms_dispatch(ceph::net::ConnectionRef conn, MessageRef m) override;
+  seastar::future<> ms_handle_connect(ceph::net::ConnectionRef conn) override;
+  seastar::future<> ms_handle_reset(ceph::net::ConnectionRef conn) override;
+  seastar::future<> ms_handle_remote_reset(ceph::net::ConnectionRef conn) override;
 
 public:
   OSD(int id, uint32_t nonce);