From f847f6ac5d922fc9b4af707a49da54738b85324b Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 11 Jan 2019 18:21:25 +0800 Subject: [PATCH] crimson: integrate mon::Client into OSD and register them as dispatchers using ChainedDispatchers Signed-off-by: Kefu Chai --- src/crimson/osd/osd.cc | 45 ++++++++++++++++++++++++++++++++++++++++-- src/crimson/osd/osd.h | 10 ++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 5692edc7a144..a807a61bb217 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -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(); } diff --git a/src/crimson/osd/osd.h b/src/crimson/osd/osd.h index a648f1364616..9abc11bbb563 100644 --- a/src/crimson/osd/osd.h +++ b/src/crimson/osd/osd.h @@ -3,7 +3,9 @@ #include #include +#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 cluster_msgr; // talk with mon/mgr std::unique_ptr 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); -- 2.47.3