]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: modify the interface to integrate with milticore-msg
authorchunmei <chunmei.liu@intel.com>
Fri, 23 Jun 2023 04:35:38 +0000 (04:35 +0000)
committerchunmei <chunmei.liu@intel.com>
Fri, 23 Jun 2023 04:35:38 +0000 (04:35 +0000)
Signed-off-by: chunmei <chunmei.liu@intel.com>
src/crimson/osd/osd.cc
src/crimson/osd/osd.h

index 4e69c8e5ce3fad3e7174430e4212f0627c7d10f8..44fe8fd6410e1105c230e23e42e60c6351517be8 100644 (file)
@@ -742,7 +742,9 @@ void OSD::ShardDispatcher::print(std::ostream& out) const
 std::optional<seastar::future<>>
 OSD::ms_dispatch(crimson::net::ConnectionRef conn, MessageRef m)
 {
-  assert(seastar::this_shard_id() == PRIMARY_CORE);
+  if (get_pg_shard_manager().is_stopping()) {
+    return seastar::now();
+  }
   bool dispatched = true;
   gate.dispatch_in_background(__func__, *this, [this, conn=std::move(conn),
                                                 m=std::move(m), &dispatched]() mutable {
@@ -775,11 +777,7 @@ OSD::ms_dispatch(crimson::net::ConnectionRef conn, MessageRef m)
       case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY:
       {
         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));
-          });
+          return shard_dispatchers.local().ms_dispatch(std::move(f_conn), std::move(m));
         });
       }
       default:
@@ -797,10 +795,20 @@ OSD::ShardDispatcher::ms_dispatch(
   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();
+  if (seastar::this_shard_id() != PRIMARY_CORE) {
+    switch (m->get_type()) {
+    case CEPH_MSG_OSD_MAP:
+    case MSG_COMMAND:
+    case MSG_OSD_MARK_ME_DOWN:
+      return container().invoke_on(PRIMARY_CORE,
+      [f_conn = std::move(f_conn), m = std::move(m)]
+      (auto& local_dispatcher) mutable {
+        return local_dispatcher.ms_dispatch(std::move(f_conn), std::move(m));
+      });
+    }
   }
+  crimson::net::ConnectionRef conn = make_local_shared_foreign(std::move(f_conn));
+
   switch (m->get_type()) {
   case CEPH_MSG_OSD_MAP:
     return handle_osd_map(boost::static_pointer_cast<MOSDMap>(m));
index 9dc1b454342ec96946593be1694bf0b89a6e73a9..d9b6f1dc71f20a46fb57b6110f7dbbaa3927e8d4 100644 (file)
@@ -236,12 +236,10 @@ public:
   }
 
   auto &get_pg_shard_manager() {
-    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     return shard_dispatchers.local().get_pg_shard_manager();
   }
 
   auto &get_pg_shard_manager() const {
-    ceph_assert(seastar::this_shard_id() == PRIMARY_CORE);
     return shard_dispatchers.local().get_pg_shard_manager();
   }