From: Xuehan Xu Date: Fri, 12 Apr 2024 06:01:16 +0000 (+0800) Subject: crimson/osd/recovery_backends: discard outdated recovery ops X-Git-Tag: v19.1.1~344^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=acc873987734d9b95f62b06cdaa5ea01d342e2dd;p=ceph.git crimson/osd/recovery_backends: discard outdated recovery ops Fixes: https://tracker.ceph.com/issues/65453 Signed-off-by: Xuehan Xu (cherry picked from commit 234f41c33917e921b53c091af7b3fcbf0f141b4a) --- diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index a81374be6bc6f..c0badee72b7d3 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -740,7 +740,7 @@ public: template bool can_discard_replica_op(const MsgType& m) const { - return can_discard_replica_op(m, m.map_epoch); + return can_discard_replica_op(m, m.get_map_epoch()); } private: diff --git a/src/crimson/osd/recovery_backend.cc b/src/crimson/osd/recovery_backend.cc index 1c55b9c6c618b..7923ad24a4263 100644 --- a/src/crimson/osd/recovery_backend.cc +++ b/src/crimson/osd/recovery_backend.cc @@ -162,10 +162,7 @@ RecoveryBackend::handle_backfill_remove( { logger().debug("{} m.ls={}", __func__, m.ls); assert(m.get_type() == MSG_OSD_PG_BACKFILL_REMOVE); - if (pg.can_discard_replica_op(m)) { - logger().debug("{}: discarding {}", __func__, m); - return seastar::now(); - } + ObjectStore::Transaction t; for ([[maybe_unused]] const auto& [soid, ver] : m.ls) { // TODO: the reserved space management. PG::try_reserve_recovery_space(). diff --git a/src/crimson/osd/replicated_recovery_backend.cc b/src/crimson/osd/replicated_recovery_backend.cc index a62cb793272d5..6a5af7a6d5e94 100644 --- a/src/crimson/osd/replicated_recovery_backend.cc +++ b/src/crimson/osd/replicated_recovery_backend.cc @@ -1307,6 +1307,11 @@ ReplicatedRecoveryBackend::handle_recovery_op( Ref m, crimson::net::ConnectionXcoreRef conn) { + if (pg.can_discard_replica_op(*m)) { + logger().debug("{}: discarding {}", __func__, *m); + return seastar::now(); + } + switch (m->get_header().type) { case MSG_OSD_PG_PULL: return handle_pull(boost::static_pointer_cast(m));