]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: trade do_with() for plain code
authorKefu Chai <kchai@redhat.com>
Thu, 17 Dec 2020 02:05:04 +0000 (10:05 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 17 Dec 2020 11:35:32 +0000 (19:35 +0800)
no need to capture the intervals or the data in
`ReplicatedRecoveryBackend::_handle_push()`, they are passed to
`submit_push_data()` by value right after being initialized. so
move the content of `do_with()` block out into the caller.

also, restructure the code preparing the parameters for
`submit_push_data()` to match with the structure of with the code in
`ReplicatedRecoveryBackend::_handle_pull_response()` for better
readability.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/replicated_recovery_backend.cc
src/crimson/osd/replicated_recovery_backend.h

index 4eab88f18dc0de35e1341fcc20c9d4e635f1b479..da32ee8b7b4de9e72a92ba682a39c8b50c4f78b8 100644 (file)
@@ -666,7 +666,7 @@ seastar::future<bool> ReplicatedRecoveryBackend::_handle_pull_response(
     bool complete = pi.is_complete();
     bool clear_omap = !pop.before_progress.omap_complete;
     return submit_push_data(pi.recovery_info, first, complete, clear_omap,
-         data_zeros, usable_intervals, data, pop.omap_header,
+         std::move(data_zeros), usable_intervals, data, pop.omap_header,
          pop.attrset, pop.omap_entries, t).then(
       [this, response, &pi, &pop, complete, t, bytes_recovered=data.length()] {
       pi.stat.num_keys_recovered += pop.omap_entries.size();
@@ -745,29 +745,29 @@ seastar::future<> ReplicatedRecoveryBackend::_handle_push(
 {
   logger().debug("{}", __func__);
 
-  return seastar::do_with(interval_set<uint64_t>(),
-                         bufferlist(),
-    [this, &pop, t, response](auto& data_zeros, auto& data) {
-    data = pop.data;
-    bool first = pop.before_progress.first;
-    bool complete = pop.after_progress.data_complete
-      && pop.after_progress.omap_complete;
-    bool clear_omap = !pop.before_progress.omap_complete;
-    uint64_t z_offset = pop.before_progress.data_recovered_to;
-    uint64_t z_length = pop.after_progress.data_recovered_to
-      - pop.before_progress.data_recovered_to;
-    if (z_length)
-      data_zeros.insert(z_offset, z_length);
-    response->soid = pop.recovery_info.soid;
+  bool first = pop.before_progress.first;
+  interval_set<uint64_t> data_zeros;
+  {
+    uint64_t offset = pop.before_progress.data_recovered_to;
+    uint64_t length = (pop.after_progress.data_recovered_to -
+                       pop.before_progress.data_recovered_to);
+    if (length) {
+      data_zeros.insert(offset, length);
+    }
+  }
+  bool complete = (pop.after_progress.data_complete &&
+                  pop.after_progress.omap_complete);
+  bool clear_omap = !pop.before_progress.omap_complete;
+  response->soid = pop.recovery_info.soid;
 
-    return submit_push_data(pop.recovery_info, first, complete, clear_omap,
-       data_zeros, pop.data_included, data, pop.omap_header, pop.attrset,
-       pop.omap_entries, t).then([this, complete, &pop, t] {
-      if (complete) {
-       pg.get_recovery_handler()->on_local_recover(pop.recovery_info.soid,
-                           pop.recovery_info, false, *t);
-      }
-    });
+  return submit_push_data(pop.recovery_info, first, complete, clear_omap,
+        std::move(data_zeros), pop.data_included, pop.data, pop.omap_header,
+        pop.attrset, pop.omap_entries, t).then([this, complete, &pop, t] {
+    if (complete) {
+      pg.get_recovery_handler()->on_local_recover(
+        pop.recovery_info.soid, pop.recovery_info,
+        false, *t);
+    }
   });
 }
 
@@ -904,7 +904,7 @@ seastar::future<> ReplicatedRecoveryBackend::submit_push_data(
   bool first,
   bool complete,
   bool clear_omap,
-  interval_set<uint64_t> &data_zeros,
+  interval_set<uint64_t> data_zeros,
   const interval_set<uint64_t> &intervals_included,
   bufferlist data_included,
   bufferlist omap_header,
@@ -986,8 +986,9 @@ seastar::future<> ReplicatedRecoveryBackend::submit_push_data(
       });
     }
     return seastar::make_ready_future<>();
-  }().then([this, &data_zeros, &recovery_info, &intervals_included, t, target_oid,
-    &omap_entries, &attrs, data_included, complete, first] {
+  }().then([this, data_zeros=std::move(data_zeros),
+           &recovery_info, &intervals_included, t, target_oid,
+           &omap_entries, &attrs, data_included, complete, first]() 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()) {
index e4e14217f1177b4c25eacd0bfdc5dd9ffae3cb01..92520aff51b95eade88655ae40ad56a2b20e8f0c 100644 (file)
@@ -73,7 +73,7 @@ protected:
     bool first,
     bool complete,
     bool clear_omap,
-    interval_set<uint64_t> &data_zeros,
+    interval_set<uint64_t> data_zeros,
     const interval_set<uint64_t> &intervals_included,
     ceph::bufferlist data_included,
     ceph::bufferlist omap_header,