@@ -742,7 +742,9 @@ void OSD::ShardDispatcher::print(std::ostream& out) const
742742std::optional<seastar::future<>>
743743OSD::ms_dispatch (crimson::net::ConnectionRef conn, MessageRef m)
744744{
745- assert (seastar::this_shard_id () == PRIMARY_CORE);
745+ if (get_pg_shard_manager ().is_stopping ()) {
746+ return seastar::now ();
747+ }
746748 bool dispatched = true ;
747749 gate.dispatch_in_background (__func__, *this , [this , conn=std::move (conn),
748750 m=std::move (m), &dispatched]() mutable {
@@ -775,11 +777,7 @@ OSD::ms_dispatch(crimson::net::ConnectionRef conn, MessageRef m)
775777 case MSG_OSD_PG_UPDATE_LOG_MISSING_REPLY:
776778 {
777779 return conn.get_foreign ().then ([this , m = std::move (m)](auto f_conn) {
778- return shard_dispatchers.invoke_on (PRIMARY_CORE,
779- [f_conn = std::move (f_conn), m = std::move (m)]
780- (auto &local_dispatcher) mutable ->seastar ::future<>{
781- return local_dispatcher.ms_dispatch (std::move (f_conn), std::move (m));
782- });
780+ return shard_dispatchers.local ().ms_dispatch (std::move (f_conn), std::move (m));
783781 });
784782 }
785783 default :
@@ -797,10 +795,20 @@ OSD::ShardDispatcher::ms_dispatch(
797795 crimson::net::ConnectionFRef f_conn,
798796 MessageRef m)
799797{
800- crimson::net::ConnectionRef conn = make_local_shared_foreign (std::move (f_conn));
801- if (pg_shard_manager.is_stopping ()) {
802- return seastar::now ();
798+ if (seastar::this_shard_id () != PRIMARY_CORE) {
799+ switch (m->get_type ()) {
800+ case CEPH_MSG_OSD_MAP:
801+ case MSG_COMMAND:
802+ case MSG_OSD_MARK_ME_DOWN:
803+ return container ().invoke_on (PRIMARY_CORE,
804+ [f_conn = std::move (f_conn), m = std::move (m)]
805+ (auto & local_dispatcher) mutable {
806+ return local_dispatcher.ms_dispatch (std::move (f_conn), std::move (m));
807+ });
808+ }
803809 }
810+ crimson::net::ConnectionRef conn = make_local_shared_foreign (std::move (f_conn));
811+
804812 switch (m->get_type ()) {
805813 case CEPH_MSG_OSD_MAP:
806814 return handle_osd_map (boost::static_pointer_cast<MOSDMap>(m));
0 commit comments