]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/replicated_recovery_backend: seperate prep_push_to_replica and prep_push
authorMatan Breizman <mbreizma@redhat.com>
Sun, 31 Dec 2023 15:00:35 +0000 (15:00 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Thu, 4 Jan 2024 15:18:11 +0000 (15:18 +0000)
Signed-off-by: Matan Breizman <mbreizma@redhat.com>
src/crimson/osd/replicated_recovery_backend.cc
src/crimson/osd/replicated_recovery_backend.h

index 92435a9c925caaddf0e5c9f9ad65c8c2113b9c5c..da416427d62783987aa07b832d6e926f5a9f747c 100644 (file)
@@ -319,16 +319,26 @@ ReplicatedRecoveryBackend::prep_push_to_replica(
 
   auto& recovery_waiter = get_recovering(soid);
   auto& obc = recovery_waiter.obc;
-  interval_set<uint64_t> data_subset;
-  if (obc->obs.oi.size) {
-    data_subset.insert(0, obc->obs.oi.size);
-  }
-  const auto& missing = pg.get_shard_missing().find(pg_shard)->second;
-  const auto it = missing.get_items().find(soid);
-  assert(it != missing.get_items().end());
-  data_subset.intersection_of(it->second.clean_regions.get_dirty_regions());
-  logger().debug("prep_push: {} data_subset {} to {}",
-                 soid, data_subset, pg_shard);
+  // TODO: use calc_clone_subsets
+  crimson::osd::subsets_t subsets;
+
+  return prep_push(soid,
+                   need,
+                   pg_shard,
+                   subsets);
+
+}
+
+RecoveryBackend::interruptible_future<PushOp>
+ReplicatedRecoveryBackend::prep_push(
+  const hobject_t& soid,
+  eversion_t need,
+  pg_shard_t pg_shard,
+  const crimson::osd::subsets_t& subsets)
+{
+  logger().debug("{}: {}, {}", __func__, soid, need);
+  auto& recovery_waiter = get_recovering(soid);
+  auto& obc = recovery_waiter.obc;
 
   auto& push_info = recovery_waiter.pushing[pg_shard];
   pg.begin_peer_recover(pg_shard, soid);
@@ -338,7 +348,8 @@ ReplicatedRecoveryBackend::prep_push_to_replica(
 
   push_info.obc = obc;
   push_info.recovery_info.size = obc->obs.oi.size;
-  push_info.recovery_info.copy_subset = data_subset;
+  push_info.recovery_info.copy_subset = subsets.data_subset;
+  push_info.recovery_info.clone_subset = subsets.clone_subsets;
   push_info.recovery_info.soid = soid;
   push_info.recovery_info.oi = obc->obs.oi;
   push_info.recovery_info.version = obc->obs.oi.version;
@@ -356,6 +367,7 @@ ReplicatedRecoveryBackend::prep_push_to_replica(
     push_info.recovery_progress = push_op.after_progress;
     return push_op;
   });
+
 }
 
 void ReplicatedRecoveryBackend::prepare_pull(
index 8d0e5ecabb7892eae8b4f6790f1930c140bc3a3b..00e1021b9eb17d431b19162726b6f7c44e07b0a6 100644 (file)
@@ -53,6 +53,11 @@ protected:
     const hobject_t& soid,
     eversion_t need,
     pg_shard_t pg_shard);
+  interruptible_future<PushOp> prep_push(
+    const hobject_t& soid,
+    eversion_t need,
+    pg_shard_t pg_shard,
+    const crimson::osd::subsets_t& subsets);
   void prepare_pull(
     const crimson::osd::ObjectContextRef &head_obc,
     PullOp& pull_op,