]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: extend PG::should_send_op() and move it to .cc
authorRadosław Zarzyński <rzarzyns@redhat.com>
Tue, 24 Oct 2023 10:38:51 +0000 (12:38 +0200)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 27 Jan 2026 14:37:36 +0000 (14:37 +0000)
Signed-off-by: Radosław Zarzyński <rzarzyns@redhat.com>
src/crimson/osd/pg.cc
src/crimson/osd/pg.h

index 0d1590096ec804f1bb8f8270328a7fc41a4f4148..14f9f205c3df588a149af1d9e4db1eef671536cc 100644 (file)
@@ -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();
index 1bfb8e52f6735f109a637bcce93af085c7e141e0..2991cc7e837c1c48e7198da9cf37034433a1b383 100644 (file)
@@ -166,14 +166,9 @@ public:
   const std::set<pg_shard_t> &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);
   }