From: Kefu Chai Date: Fri, 12 Mar 2021 06:23:50 +0000 (+0800) Subject: osd/PeeringState: do not check for require_osd_release X-Git-Tag: v17.1.0~2622^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=aba13c7661bf8a62f2879513512053dc9857c003;p=ceph.git osd/PeeringState: do not check for require_osd_release before this change, we always check for require_osd_release when creating MOSDPGNotify2 or MOSDPGNotify, if require_osd_release is greater or equal to octopus, MOSDPGNotify2 is created. since we are in a post-quincy era, and we only need to upgrade from octopus and up to quincy, there is no need to be compatible with osd whose version is lower than octopus. in this change, the check in `BufferedRecoveryMessages::send_notify()` is dropped. Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index a4a6eda4331a..930716825334 100644 --- a/src/crimson/osd/osd.cc +++ b/src/crimson/osd/osd.cc @@ -911,7 +911,6 @@ seastar::future> OSD::handle_pg_create_info( auto [pg, startmap] = std::move(ret); if (!pg) return seastar::make_ready_future>(Ref()); - PeeringCtx rctx{ceph_release_t::octopus}; const pg_pool_t* pp = startmap->get_pg_pool(info->pgid.pool()); int up_primary, acting_primary; @@ -922,6 +921,7 @@ seastar::future> OSD::handle_pg_create_info( int role = startmap->calc_pg_role(pg_shard_t(whoami, info->pgid.shard), acting); + PeeringCtx rctx; create_pg_collection( rctx.transaction, info->pgid, @@ -1296,7 +1296,7 @@ seastar::future<> OSD::consume_map(epoch_t epoch) return seastar::parallel_for_each(pgs.begin(), pgs.end(), [=](auto& pg) { return shard_services.start_operation( *this, pg.second, pg.second->get_osdmap_epoch(), epoch, - PeeringCtx{ceph_release_t::octopus}, false).second; + PeeringCtx{}, false).second; }).then([epoch, this] { osdmap_gate.got_map(epoch); return seastar::make_ready_future(); diff --git a/src/crimson/osd/osd_operations/compound_peering_request.cc b/src/crimson/osd/osd_operations/compound_peering_request.cc index 6290b9c77162..cc0e29f00bc7 100644 --- a/src/crimson/osd/osd_operations/compound_peering_request.cc +++ b/src/crimson/osd/osd_operations/compound_peering_request.cc @@ -28,7 +28,7 @@ struct compound_state { seastar::promise promise; // assuming crimson-osd won't need to be compatible with pre-octopus // releases - BufferedRecoveryMessages ctx{ceph_release_t::octopus}; + BufferedRecoveryMessages ctx; compound_state() = default; ~compound_state() { promise.set_value(std::move(ctx)); diff --git a/src/crimson/osd/osd_operations/peering_event.h b/src/crimson/osd/osd_operations/peering_event.h index 45c57f19d834..29462c8202b8 100644 --- a/src/crimson/osd/osd_operations/peering_event.h +++ b/src/crimson/osd/osd_operations/peering_event.h @@ -69,7 +69,6 @@ public: ShardServices &shard_services, const pg_shard_t &from, const spg_t &pgid, Args&&... args) : shard_services(shard_services), - ctx{ceph_release_t::octopus}, from(from), pgid(pgid), evt(std::forward(args)...) @@ -79,7 +78,6 @@ public: ShardServices &shard_services, const pg_shard_t &from, const spg_t &pgid, float delay, Args&&... args) : shard_services(shard_services), - ctx{ceph_release_t::octopus}, from(from), pgid(pgid), delay(delay), diff --git a/src/crimson/osd/shard_services.cc b/src/crimson/osd/shard_services.cc index 8c2cfc41543e..ba18c6f48c9e 100644 --- a/src/crimson/osd/shard_services.cc +++ b/src/crimson/osd/shard_services.cc @@ -16,7 +16,6 @@ #include "crimson/osd/osdmap_service.h" #include "messages/MOSDPGTemp.h" #include "messages/MOSDPGCreated.h" -#include "messages/MOSDPGNotify.h" #include "messages/MOSDPGInfo.h" #include "messages/MOSDPGQuery.h" @@ -136,7 +135,7 @@ seastar::future<> ShardServices::dispatch_context( ceph_assert(col || ctx.transaction.empty()); return seastar::when_all_succeed( dispatch_context_messages( - BufferedRecoveryMessages{ceph_release_t::octopus, ctx}), + BufferedRecoveryMessages{ctx}), col ? dispatch_context_transaction(col, ctx) : seastar::now() ).then_unpack([] { return seastar::now(); diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 8046fd860f42..c94b9d94ff08 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -9246,7 +9246,7 @@ void OSD::handle_pg_create(OpRequestRef op) PeeringCtx OSD::create_context() { - return PeeringCtx(get_osdmap()->require_osd_release); + return PeeringCtx(); } void OSD::dispatch_context(PeeringCtx &ctx, PG *pg, OSDMapRef curmap, diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 02c54f2ad0e5..343d9dcddfd3 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1148,7 +1148,7 @@ void PG::read_state(ObjectStore *store) // init pool options store->set_collection_opts(ch, pool.info.opts); - PeeringCtx rctx(ceph_release_t::unknown); + PeeringCtx rctx; handle_initialize(rctx); // note: we don't activate here because we know the OSD will advance maps // during boot. diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index 7f6eb9b2c601..f7381dcbbd50 100644 --- a/src/osd/PeeringState.cc +++ b/src/osd/PeeringState.cc @@ -10,13 +10,10 @@ #include "messages/MBackfillReserve.h" #include "messages/MRecoveryReserve.h" #include "messages/MOSDScrubReserve.h" -#include "messages/MOSDPGInfo.h" #include "messages/MOSDPGInfo2.h" #include "messages/MOSDPGTrim.h" #include "messages/MOSDPGLog.h" -#include "messages/MOSDPGNotify.h" #include "messages/MOSDPGNotify2.h" -#include "messages/MOSDPGQuery.h" #include "messages/MOSDPGQuery2.h" #include "messages/MOSDPGLease.h" #include "messages/MOSDPGLeaseAck.h" @@ -37,22 +34,15 @@ using std::vector; using ceph::Formatter; using ceph::make_message; -BufferedRecoveryMessages::BufferedRecoveryMessages( - ceph_release_t r, - PeeringCtx &ctx) - : require_osd_release(r) { +BufferedRecoveryMessages::BufferedRecoveryMessages(PeeringCtx &ctx) // steal messages from ctx - message_map.swap(ctx.message_map); -} + : message_map{std::move(ctx.message_map)} +{} void BufferedRecoveryMessages::send_notify(int to, const pg_notify_t &n) { - if (require_osd_release >= ceph_release_t::octopus) { - spg_t pgid(n.info.pgid.pgid, n.to); - send_osd_message(to, make_message(pgid, n)); - } else { - send_osd_message(to, make_message(n.epoch_sent, vector{n})); - } + spg_t pgid(n.info.pgid.pgid, n.to); + send_osd_message(to, make_message(pgid, n)); } void BufferedRecoveryMessages::send_query( @@ -60,15 +50,7 @@ void BufferedRecoveryMessages::send_query( spg_t to_spgid, const pg_query_t &q) { - if (require_osd_release >= ceph_release_t::octopus) { - send_osd_message(to, - make_message(to_spgid, q)); - } else { - auto m = make_message( - q.epoch_sent, - MOSDPGQuery::pg_list_t{{to_spgid, q}}); - send_osd_message(to, m); - } + send_osd_message(to, make_message(to_spgid, q)); } void BufferedRecoveryMessages::send_info( @@ -80,28 +62,16 @@ void BufferedRecoveryMessages::send_info( std::optional lease, std::optional lease_ack) { - if (require_osd_release >= ceph_release_t::octopus) { - send_osd_message( - to, - make_message( - to_spgid, - info, - cur_epoch, - min_epoch, - lease, - lease_ack) - ); - } else { - send_osd_message( - to, - make_message( - cur_epoch, - vector{pg_notify_t{to_spgid.shard, - info.pgid.shard, - min_epoch, cur_epoch, - info, PastIntervals{}}}) - ); - } + send_osd_message( + to, + make_message( + to_spgid, + info, + cur_epoch, + min_epoch, + lease, + lease_ack) + ); } void PGPool::update(OSDMapRef map) @@ -174,8 +144,7 @@ void PeeringState::begin_block_outgoing() { ceph_assert(!messages_pending_flush); ceph_assert(orig_ctx); ceph_assert(rctx); - messages_pending_flush = BufferedRecoveryMessages( - orig_ctx->require_osd_release); + messages_pending_flush.emplace(); rctx.emplace(*messages_pending_flush, *orig_ctx); } @@ -2974,24 +2943,12 @@ void PeeringState::share_pg_info() peer->second.last_interval_started = info.last_interval_started; peer->second.history.merge(info.history); } - MessageRef m; - if (last_require_osd_release >= ceph_release_t::octopus) { - m = make_message(spg_t{info.pgid.pgid, pg_shard.shard}, + MessageRef m = make_message(spg_t{info.pgid.pgid, pg_shard.shard}, info, get_osdmap_epoch(), get_osdmap_epoch(), std::optional{get_lease()}, std::nullopt); - } else { - m = make_message(get_osdmap_epoch(), - MOSDPGInfo::pg_list_t{ - pg_notify_t{pg_shard.shard, - pg_whoami.shard, - get_osdmap_epoch(), - get_osdmap_epoch(), - info, - past_intervals}}); - } pl->send_cluster_message(pg_shard.osd, m, get_osdmap_epoch()); } } diff --git a/src/osd/PeeringState.h b/src/osd/PeeringState.h index 2cae797d62d1..f98e362e12bd 100644 --- a/src/osd/PeeringState.h +++ b/src/osd/PeeringState.h @@ -61,13 +61,10 @@ struct PeeringCtx; // [primary only] content recovery state struct BufferedRecoveryMessages { - ceph_release_t require_osd_release; std::map> message_map; - BufferedRecoveryMessages(ceph_release_t r) - : require_osd_release(r) { - } - BufferedRecoveryMessages(ceph_release_t r, PeeringCtx &ctx); + BufferedRecoveryMessages() = default; + BufferedRecoveryMessages(PeeringCtx &ctx); void accept_buffered_messages(BufferedRecoveryMessages &m) { for (auto &[target, ls] : m.message_map) { @@ -190,8 +187,7 @@ struct PeeringCtx : BufferedRecoveryMessages { ObjectStore::Transaction transaction; HBHandle* handle = nullptr; - PeeringCtx(ceph_release_t r) - : BufferedRecoveryMessages(r) {} + PeeringCtx() = default; PeeringCtx(const PeeringCtx &) = delete; PeeringCtx &operator=(const PeeringCtx &) = delete;