From ebda4900736dfe4ee38163ae7adcc7d06d07e3a9 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Mon, 3 Apr 2023 16:39:52 +0800 Subject: [PATCH] crimson/osd: specialize messages to use the external connection Signed-off-by: Yingxin Cheng --- src/crimson/osd/osd.cc | 1 + src/messages/MOSDOp.h | 4 ++++ src/messages/MOSDPGNotify2.h | 7 ++++++- src/messages/MOSDPeeringOp.h | 12 ++++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index 6ec72bf6933..25a271e970a 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 2275c458832..97432d1186b 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 12703739855..ae17edae50f 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 56d10cff136..bfb0380260c 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 }; -- 2.39.5