From aba13c7661bf8a62f2879513512053dc9857c003 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 12 Mar 2021 14:23:50 +0800 Subject: [PATCH] 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 --- src/crimson/osd/osd.cc | 4 +- .../compound_peering_request.cc | 2 +- .../osd/osd_operations/peering_event.h | 2 - src/crimson/osd/shard_services.cc | 3 +- src/osd/OSD.cc | 2 +- src/osd/PG.cc | 2 +- src/osd/PeeringState.cc | 79 +++++-------------- src/osd/PeeringState.h | 10 +-- 8 files changed, 27 insertions(+), 77 deletions(-) diff --git a/src/crimson/osd/osd.cc b/src/crimson/osd/osd.cc index a4a6eda4331..93071682533 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 6290b9c7716..cc0e29f00bc 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 45c57f19d83..29462c8202b 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 8c2cfc41543..ba18c6f48c9 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 8046fd860f4..c94b9d94ff0 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 02c54f2ad0e..343d9dcddfd 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 7f6eb9b2c60..f7381dcbbd5 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 2cae797d62d..f98e362e12b 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; -- 2.39.5