From 2a474443aa00161bd2f2559f79e736f44446821e Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 8 Mar 2019 21:51:14 +0800 Subject: [PATCH] crimson/osd: handle MOSDOp in OSD Signed-off-by: Kefu Chai --- src/crimson/osd/osd.cc | 21 +++++++++++++++++++++ src/crimson/osd/osd.h | 3 +++ src/crimson/osd/pg.cc | 7 +++++++ src/crimson/osd/pg.h | 5 +++-- 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index c291d1de907..99e6684d19e 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -11,6 +11,7 @@ #include "messages/MOSDBeacon.h" #include "messages/MOSDBoot.h" #include "messages/MOSDMap.h" +#include "messages/MOSDOp.h" #include "messages/MOSDPGInfo.h" #include "messages/MOSDPGLog.h" #include "messages/MOSDPGNotify.h" @@ -378,6 +379,8 @@ seastar::future<> OSD::ms_dispatch(ceph::net::ConnectionRef conn, MessageRef m) switch (m->get_type()) { case CEPH_MSG_OSD_MAP: return handle_osd_map(conn, boost::static_pointer_cast(m)); + case CEPH_MSG_OSD_OP: + return handle_osd_op(conn, boost::static_pointer_cast(m)); case MSG_OSD_PG_NOTIFY: return handle_pg_notify(conn, boost::static_pointer_cast(m)); case MSG_OSD_PG_INFO: @@ -651,6 +654,24 @@ seastar::future<> OSD::committed_osd_maps(version_t first, }); } +seastar::future<> OSD::handle_osd_op(ceph::net::ConnectionRef conn, + Ref m) +{ + return wait_for_map(m->get_map_epoch()).then([=](epoch_t epoch) { + if (auto found = pgs.find(m->get_spg()); found != pgs.end()) { + return found->second->handle_op(conn, std::move(m)); + } else if (osdmap->is_up_acting_osd_shard(m->get_spg(), whoami)) { + logger().info("no pg, should exist e{}, will wait", epoch); + // todo, wait for peering, etc + return seastar::now(); + } else { + logger().info("no pg, shouldn't exist e{}, dropping", epoch); + // todo: share map with client + return seastar::now(); + } + }); +} + bool OSD::should_restart() const { if (!osdmap->is_up(whoami)) { diff --git a/src/crimson/osd/osd.h b/src/crimson/osd/osd.h index fbd0341261d..d6ef79e43aa 100644 --- a/src/crimson/osd/osd.h +++ b/src/crimson/osd/osd.h @@ -21,6 +21,7 @@ #include "osd/osd_types.h" class MOSDMap; +class MOSDOp; class OSDMap; class OSDMeta; class PG; @@ -130,6 +131,8 @@ private: seastar::future<> handle_osd_map(ceph::net::ConnectionRef conn, Ref m); + seastar::future<> handle_osd_op(ceph::net::ConnectionRef conn, + Ref m); seastar::future<> handle_pg_log(ceph::net::ConnectionRef conn, Ref m); seastar::future<> handle_pg_notify(ceph::net::ConnectionRef conn, diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 684120af579..d43ac29d6f9 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -943,3 +943,10 @@ seastar::future<> PG::share_pg_info() return send_to_osd(peer.osd, m, get_osdmap_epoch()); }); } + +seastar::future<> PG::handle_op(ceph::net::ConnectionRef conn, + Ref m) +{ + // todo + return seastar::now(); +} diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index f2e8deb8222..ae1aa70c49f 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -8,6 +8,7 @@ #include #include +#include "crimson/net/Fwd.h" #include "osd/osd_types.h" #include "recovery_state.h" @@ -109,9 +110,9 @@ public: seastar::future<> handle_activate_map(); seastar::future<> share_pg_info(); void reply_pg_query(const MQuery& query, recovery::Context* ctx); - + seastar::future<> handle_op(ceph::net::ConnectionRef conn, + Ref m); void print(ostream& os) const; - private: seastar::future<> activate_peer(pg_shard_t peer); void reply_pg_query_for_info(const MQuery& query, recovery::Context* ctx); -- 2.39.5