From: chunmei Date: Sat, 8 Apr 2023 08:58:15 +0000 (+0000) Subject: crimson/osd: change OSD::ms_dispatch to take an ConnectionFRef X-Git-Tag: v18.2.1~130^2~3 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=59a31e9eb56c524a20f85169f8a90530e4defd67;p=ceph.git crimson/osd: change OSD::ms_dispatch to take an ConnectionFRef Shortly, we will need to be able to pass a ConnectionRef from another core. Signed-off-by: chunmei (cherry picked from commit d657afc7a76d14882152d6f38da5adeaa39e55e1) --- diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index c597fe92f7fa2..fe45abacb9ac8 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -737,7 +737,7 @@ OSD::ms_dispatch(crimson::net::ConnectionRef conn, MessageRef m) assert(seastar::this_shard_id() == PRIMARY_CORE); bool dispatched = true; gate.dispatch_in_background(__func__, *this, [this, conn=std::move(conn), - m=std::move(m), &dispatched] { + m=std::move(m), &dispatched]() mutable { switch (m->get_type()) { case CEPH_MSG_OSD_MAP: case CEPH_MSG_OSD_OP: @@ -766,10 +766,12 @@ OSD::ms_dispatch(crimson::net::ConnectionRef conn, MessageRef m) case MSG_OSD_PG_UPDATE_LOG_MISSING: case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY: { - return shard_dispatchers.invoke_on(0, - [conn, m = std::move(m)] - (auto &local_dispatcher) mutable ->seastar::future<>{ - return local_dispatcher.ms_dispatch(std::move(conn), m); + return conn.get_foreign().then([this, m = std::move(m)](auto f_conn) { + return shard_dispatchers.invoke_on(PRIMARY_CORE, + [f_conn = std::move(f_conn), m = std::move(m)] + (auto &local_dispatcher) mutable ->seastar::future<>{ + return local_dispatcher.ms_dispatch(std::move(f_conn), std::move(m)); + }); }); } default: @@ -784,9 +786,10 @@ OSD::ms_dispatch(crimson::net::ConnectionRef conn, MessageRef m) seastar::future<> OSD::ShardDispatcher::ms_dispatch( - crimson::net::ConnectionRef conn, + crimson::net::ConnectionFRef f_conn, MessageRef m) { + crimson::net::ConnectionRef conn = make_local_shared_foreign(std::move(f_conn)); if (pg_shard_manager.is_stopping()) { return seastar::now(); } diff --git a/src/crimson/osd/osd.h b/src/crimson/osd/osd.h index 4f811c059ad65..aa4e03dcd7abe 100644 --- a/src/crimson/osd/osd.h +++ b/src/crimson/osd/osd.h @@ -79,7 +79,7 @@ public: ~ShardDispatcher() = default; // Dispatcher methods - seastar::future<> ms_dispatch(crimson::net::ConnectionRef, + seastar::future<> ms_dispatch(crimson::net::ConnectionFRef, MessageRef); private: diff --git a/src/crimson/osd/osd_operations/replicated_request.cc b/src/crimson/osd/osd_operations/replicated_request.cc index f7d4fa68b2b30..b128b1c436305 100644 --- a/src/crimson/osd/osd_operations/replicated_request.cc +++ b/src/crimson/osd/osd_operations/replicated_request.cc @@ -21,7 +21,7 @@ namespace crimson::osd { RepRequest::RepRequest(crimson::net::ConnectionRef&& conn, Ref &&req) : conn{std::move(conn)}, - req{req} + req{std::move(req)} {} void RepRequest::print(std::ostream& os) const