]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.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, 24 Mar 2026 16:06:23 +0000 (16:06 +0000)
Signed-off-by: Radosław Zarzyński <rzarzyns@redhat.com>
src/crimson/osd/pg.cc
src/crimson/osd/pg.h

index 0a307c5e89589632a3f6c0b0e7111cee00fc2ea9..d546d76804bddd8c334bbe0ba86cde5b5997616d 100644 (file)
@@ -341,6 +341,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 c4602b2571b6275ed7f808ee702ab5a5f8b011f0..128a470a7e44a509bd4435791ae2669937813f68 100644 (file)
@@ -168,14 +168,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);
   }