From: Radosław Zarzyński Date: Tue, 24 Oct 2023 10:38:51 +0000 (+0200) Subject: crimson/osd: extend PG::should_send_op() and move it to .cc X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=059a7e0683318e1a0ba2cda56e4d96e79da7a0be;p=ceph-ci.git crimson/osd: extend PG::should_send_op() and move it to .cc Signed-off-by: Radosław Zarzyński --- diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 0d1590096ec..14f9f205c3d 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -338,6 +338,34 @@ void PG::recheck_readable() } } +bool PG::should_send_op(pg_shard_t peer, const hobject_t &hoid) +{ + if (peer == get_primary()) { + return true; + } + bool should_send = + hoid.pool != (int64_t)get_pgid().pool() || + hoid <= peering_state.get_peer_info(peer).last_backfill || + (recovery_handler->backfill_state && + hoid <= recovery_handler->backfill_state->get_last_backfill_started()); + if (!should_send) { + ceph_assert(is_backfill_target(peer)); + logger().debug("{}: {} shipping empty opt to osd.{}, object {}" + " beyond std::max(last_backfill_started," + " peer_info[peer].last_backfill {})", + *this, __func__, peer, hoid, + peering_state.get_peer_info(peer).last_backfill); + return should_send; + } + if (peering_state.is_async_recovery_target(peer) && + peering_state.get_peer_missing(peer).is_missing(hoid)) { + should_send = false; + logger().info("{}: {} shipping empty opt to osd.{}, object {}" + " which is pending recovery in async_recovery_targets", + *this, __func__, peer, hoid); + } + return should_send; +} unsigned PG::get_target_pg_log_entries() const { const unsigned local_num_pgs = shard_services.get_num_local_pgs(); diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index 1bfb8e52f67..2991cc7e837 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -166,14 +166,9 @@ public: const std::set &get_acting_recovery_backfill_shards() const override { return get_acting_recovery_backfill(); } - bool should_send_op(pg_shard_t peer, const hobject_t &hoid) override { - if (peer == get_primary()) { - // TODO XXX FIXME - assert(peer == get_primary()); - return true; - } - abort(); - } + + bool should_send_op(pg_shard_t peer, const hobject_t &hoid) override; + spg_t primary_spg_t() const override { return spg_t(get_info().pgid.pgid, get_primary().shard); }