]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: change OSD::ms_dispatch to take an ConnectionFRef
authorchunmei <chunmei.liu@intel.com>
Sat, 8 Apr 2023 08:58:15 +0000 (08:58 +0000)
committerchunmei <chunmei.liu@intel.com>
Fri, 23 Jun 2023 03:18:54 +0000 (03:18 +0000)
Shortly, we will need to be able to pass a ConnectionRef from another core.

Signed-off-by: chunmei <chunmei.liu@intel.com>
src/crimson/osd/osd.cc
src/crimson/osd/osd.h
src/crimson/osd/osd_operations/replicated_request.cc

index c7bae8b511b24dff935ca3919da50ee480bd6c87..647046e12f97d60521b62ce2a285119fd738900e 100644 (file)
@@ -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();
   }
index 4f811c059ad65b14ec76a2e89c63c961fbe1bd06..aa4e03dcd7abedabe8df795f78c8a0a3627b6c01 100644 (file)
@@ -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:
index f7d4fa68b2b30443836c191c9d2665bbdb980321..b128b1c4363053cf9c1f3fd805d27210c4ef9390 100644 (file)
@@ -21,7 +21,7 @@ namespace crimson::osd {
 RepRequest::RepRequest(crimson::net::ConnectionRef&& conn,
                       Ref<MOSDRepOp> &&req)
   : conn{std::move(conn)},
-    req{req}
+    req{std::move(req)}
 {}
 
 void RepRequest::print(std::ostream& os) const