]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/.../replicated_recovery_backend: convert submit_push_data to coroutine
authorSamuel Just <sjust@redhat.com>
Fri, 10 Jan 2025 22:50:14 +0000 (22:50 +0000)
committerSamuel Just <sjust@redhat.com>
Wed, 29 Jan 2025 05:00:36 +0000 (05:00 +0000)
Signed-off-by: Samuel Just <sjust@redhat.com>
src/crimson/osd/replicated_recovery_backend.cc
src/crimson/osd/replicated_recovery_backend.h

index 85b8c8413cb288c2bf2846d9085236dca13bafa1..3e3361edb5d391e4c69c418a5037780a12e861d8 100644 (file)
@@ -1264,72 +1264,62 @@ ReplicatedRecoveryBackend::submit_push_data(
   bool first,
   bool complete,
   bool clear_omap,
-  interval_set<uint64_t>&& data_zeros,
-  interval_set<uint64_t>&& intervals_included,
-  bufferlist&& data_included,
-  bufferlist&& omap_header,
+  interval_set<uint64_t> data_zeros,
+  interval_set<uint64_t> intervals_included,
+  bufferlist data_included,
+  bufferlist omap_header,
   const map<string, bufferlist, less<>> &attrs,
-  map<string, bufferlist>&& omap_entries,
+  map<string, bufferlist> omap_entries,
   ObjectStore::Transaction *t)
 {
   LOG_PREFIX(ReplicatedRecoveryBackend::submit_push_data);
   DEBUGDPP("", pg);
-  return prep_push_target(recovery_info, first, complete,
-                          clear_omap, t, attrs,
-                          std::move(omap_header)).then_interruptible(
-    [FNAME, this,
-     &recovery_info, t,
-     first, complete,
-     data_zeros=std::move(data_zeros),
-     intervals_included=std::move(intervals_included),
-     data_included=std::move(data_included),
-     omap_entries=std::move(omap_entries),
-     &attrs](auto target_oid) mutable {
-
-    uint32_t fadvise_flags = CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL;
-    // Punch zeros for data, if fiemap indicates nothing but it is marked dirty
-    if (!data_zeros.empty()) {
-      data_zeros.intersection_of(recovery_info.copy_subset);
-      assert(intervals_included.subset_of(data_zeros));
-      data_zeros.subtract(intervals_included);
-
-      DEBUGDPP("recovering object {} copy_subset: {} "
-              "intervals_included: {} data_zeros: {}",
-              pg, recovery_info.soid, recovery_info.copy_subset,
-              intervals_included, data_zeros);
-
-      for (auto [start, len] : data_zeros) {
-        t->zero(coll->get_cid(), ghobject_t(target_oid), start, len);
-      }
-    }
-    uint64_t off = 0;
-    for (auto [start, len] : intervals_included) {
-      bufferlist bit;
-      bit.substr_of(data_included, off, len);
-      t->write(coll->get_cid(), ghobject_t(target_oid),
-              start, len, bit, fadvise_flags);
-      off += len;
+  auto target_oid  = co_await prep_push_target(
+    recovery_info, first, complete,
+    clear_omap, t, attrs,
+    std::move(omap_header));
+
+  uint32_t fadvise_flags = CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL;
+  // Punch zeros for data, if fiemap indicates nothing but it is marked dirty
+  if (!data_zeros.empty()) {
+    data_zeros.intersection_of(recovery_info.copy_subset);
+    assert(intervals_included.subset_of(data_zeros));
+    data_zeros.subtract(intervals_included);
+
+    DEBUGDPP("recovering object {} copy_subset: {} "
+            "intervals_included: {} data_zeros: {}",
+            pg, recovery_info.soid, recovery_info.copy_subset,
+            intervals_included, data_zeros);
+
+    for (auto [start, len] : data_zeros) {
+      t->zero(coll->get_cid(), ghobject_t(target_oid), start, len);
     }
+  }
+  uint64_t off = 0;
+  for (auto [start, len] : intervals_included) {
+    bufferlist bit;
+    bit.substr_of(data_included, off, len);
+    t->write(coll->get_cid(), ghobject_t(target_oid),
+            start, len, bit, fadvise_flags);
+    off += len;
+  }
 
-    if (!omap_entries.empty())
-      t->omap_setkeys(coll->get_cid(), ghobject_t(target_oid), omap_entries);
-    if (!attrs.empty())
-      t->setattrs(coll->get_cid(), ghobject_t(target_oid), attrs);
+  if (!omap_entries.empty())
+    t->omap_setkeys(coll->get_cid(), ghobject_t(target_oid), omap_entries);
+  if (!attrs.empty())
+    t->setattrs(coll->get_cid(), ghobject_t(target_oid), attrs);
 
-    if (complete) {
-      if (!first) {
-       DEBUGDPP("Removing oid {} from the temp collection",
-                pg, target_oid);
-       clear_temp_obj(target_oid);
-       t->remove(coll->get_cid(), ghobject_t(recovery_info.soid));
-       t->collection_move_rename(coll->get_cid(), ghobject_t(target_oid),
-                                 coll->get_cid(), ghobject_t(recovery_info.soid));
-      }
-      submit_push_complete(recovery_info, t);
+  if (complete) {
+    if (!first) {
+      DEBUGDPP("Removing oid {} from the temp collection",
+              pg, target_oid);
+      clear_temp_obj(target_oid);
+      t->remove(coll->get_cid(), ghobject_t(recovery_info.soid));
+      t->collection_move_rename(coll->get_cid(), ghobject_t(target_oid),
+                               coll->get_cid(), ghobject_t(recovery_info.soid));
     }
-    DEBUGDPP("done", pg);
-    return seastar::make_ready_future<>();
-  });
+    submit_push_complete(recovery_info, t);
+  }
 }
 
 void ReplicatedRecoveryBackend::submit_push_complete(
index 85556044fab29491f1c6a3f721ef30876bd016ed..eef312425db574a7fc618b6896898e5228ac13e7 100644 (file)
@@ -93,12 +93,12 @@ protected:
     bool first,
     bool complete,
     bool clear_omap,
-    interval_set<uint64_t>&& data_zeros,
-    interval_set<uint64_t>&& intervals_included,
-    ceph::bufferlist&& data_included,
-    ceph::bufferlist&& omap_header,
+    interval_set<uint64_t> data_zeros,
+    interval_set<uint64_t> intervals_included,
+    ceph::bufferlist data_included,
+    ceph::bufferlist omap_header,
     const std::map<std::string, bufferlist, std::less<>> &attrs,
-    std::map<std::string, bufferlist>&& omap_entries,
+    std::map<std::string, bufferlist> omap_entries,
     ceph::os::Transaction *t);
   void submit_push_complete(
     const ObjectRecoveryInfo &recovery_info,