From: Yingxin Cheng Date: Mon, 3 Apr 2023 08:39:52 +0000 (+0800) Subject: crimson/osd: specialize messages to use the external connection X-Git-Tag: v19.0.0~1353^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ebda4900736dfe4ee38163ae7adcc7d06d07e3a9;p=ceph.git crimson/osd: specialize messages to use the external connection Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 6ec72bf69337..25a271e970af 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -1226,6 +1226,7 @@ seastar::future<> OSD::handle_peering_op( { const int from = m->get_source().num(); logger().debug("handle_peering_op on {} from {}", m->get_spg(), from); + m->set_features(conn->get_features()); std::unique_ptr evt(m->get_event()); (void) pg_shard_manager.start_pg_operation( conn, diff --git a/src/messages/MOSDOp.h b/src/messages/MOSDOp.h index 2275c4588322..97432d1186b1 100644 --- a/src/messages/MOSDOp.h +++ b/src/messages/MOSDOp.h @@ -166,6 +166,10 @@ public: uint64_t get_features() const { if (features) return features; +#ifdef WITH_SEASTAR + // In crimson, conn is independently maintained outside Message. + ceph_abort(); +#endif return get_connection()->get_features(); } diff --git a/src/messages/MOSDPGNotify2.h b/src/messages/MOSDPGNotify2.h index 127037398558..ae17edae50f2 100644 --- a/src/messages/MOSDPGNotify2.h +++ b/src/messages/MOSDPGNotify2.h @@ -33,7 +33,12 @@ public: spgid, pg_shard_t(get_source().num(), notify.from), notify, - get_connection()->get_features()), +#ifdef WITH_SEASTAR + features +#else + get_connection()->get_features() +#endif + ), true, new PGCreateInfo( spgid, diff --git a/src/messages/MOSDPeeringOp.h b/src/messages/MOSDPeeringOp.h index 56d10cff1362..bfb0380260c1 100644 --- a/src/messages/MOSDPeeringOp.h +++ b/src/messages/MOSDPeeringOp.h @@ -25,4 +25,16 @@ public: virtual epoch_t get_min_epoch() const = 0; virtual PGPeeringEvent *get_event() = 0; virtual void inner_print(std::ostream& out) const = 0; + +#ifdef WITH_SEASTAR + // In crimson, conn is independently maintained outside Message. + // Instead of get features from the connection later, set features at + // the start of the operation. + void set_features(uint64_t _features) { + features = _features; + } + +protected: + uint64_t features; +#endif };