]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: extract maybe_pull_missing_obj() out
authorKefu Chai <kchai@redhat.com>
Wed, 26 Aug 2020 12:58:32 +0000 (20:58 +0800)
committerKefu Chai <kchai@redhat.com>
Wed, 26 Aug 2020 17:32:03 +0000 (01:32 +0800)
extract ReplicatedRecoveryBackend::maybe_pull_missing_obj() from
ReplicatedRecoveryBackend::recover_object() 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 6299957eea8dfc603432f13f7ae0af7a8fa2cdcf..a308bed8548f940155bde4cf8f0e2990d5b89b7b 100644 (file)
@@ -25,34 +25,9 @@ seastar::future<> ReplicatedRecoveryBackend::recover_object(
   logger().debug("{}: {}, {}", __func__, soid, need);
   auto& recovery_waiter = recovering[soid];
   return seastar::do_with(std::map<pg_shard_t, PushOp>(), get_shards_to_push(soid),
-    [this, soid, need, &recovery_waiter](auto& pops, auto& shards) {
-    return [this, soid, need, &recovery_waiter] {
-      pg_missing_tracker_t local_missing = pg.get_local_missing();
-      if (local_missing.is_missing(soid)) {
-       PullOp po;
-       auto& pi = recovery_waiter.pi;
-       prepare_pull(po, pi, soid, need);
-       auto msg = make_message<MOSDPGPull>();
-       msg->from = pg.get_pg_whoami();
-       msg->set_priority(pg.get_recovery_op_priority());
-       msg->pgid = pg.get_pgid();
-       msg->map_epoch = pg.get_osdmap_epoch();
-       msg->min_epoch = pg.get_last_peering_reset();
-       std::vector<PullOp> pulls;
-       pulls.push_back(po);
-       msg->set_pulls(&pulls);
-       return shard_services.send_to_osd(pi.from.osd,
-                                          std::move(msg),
-                                          pg.get_osdmap_epoch()).then(
-         [&recovery_waiter] {
-         return recovery_waiter.wait_for_pull().then([] {
-           return seastar::make_ready_future<bool>(true);
-         });
-       });
-      } else {
-       return seastar::make_ready_future<bool>(false);
-      }
-    }().then([this, &pops, &shards, soid, need, &recovery_waiter](bool pulled) mutable {
+    [this, soid, need](auto& pops, auto& shards) {
+    return maybe_pull_missing_obj(soid, need).then(
+      [this, &pops, &shards, soid, need, &recovery_waiter](bool pulled) mutable {
       return [this, &recovery_waiter, soid, pulled] {
        if (!recovery_waiter.obc) {
          return pg.get_or_load_head_obc(soid).safe_then(
@@ -138,6 +113,40 @@ seastar::future<> ReplicatedRecoveryBackend::recover_object(
   });
 }
 
+seastar::future<bool>
+ReplicatedRecoveryBackend::maybe_pull_missing_obj(
+  const hobject_t& soid,
+  eversion_t need)
+{
+  pg_missing_tracker_t local_missing = pg.get_local_missing();
+  if (!local_missing.is_missing(soid)) {
+    return seastar::make_ready_future<bool>(false);
+  }
+  PullOp po;
+  assert(recovering.count(soid));
+  auto& recovery_waiter = recovering[soid];
+  auto& pi = recovery_waiter.pi;
+  prepare_pull(po, pi, soid, need);
+  auto msg = make_message<MOSDPGPull>();
+  msg->from = pg.get_pg_whoami();
+  msg->set_priority(pg.get_recovery_op_priority());
+  msg->pgid = pg.get_pgid();
+  msg->map_epoch = pg.get_osdmap_epoch();
+  msg->min_epoch = pg.get_last_peering_reset();
+  std::vector<PullOp> pulls;
+  pulls.push_back(po);
+  msg->set_pulls(&pulls);
+  return shard_services.send_to_osd(
+    pi.from.osd,
+    std::move(msg),
+    pg.get_osdmap_epoch()
+  ).then([&recovery_waiter] {
+    return recovery_waiter.wait_for_pull();
+  }).then([] {
+    return seastar::make_ready_future<bool>(true);
+  });
+}
+
 seastar::future<> ReplicatedRecoveryBackend::push_delete(
   const hobject_t& soid,
   eversion_t need)
index dd37cd42dfe65028dea48e536441ed574242f5af..667cd9876321e59fb776243530f2ac61f696e7ad 100644 (file)
@@ -109,6 +109,12 @@ protected:
     return seastar::now();
   }
 private:
+  /// pull missing object from peer
+  ///
+  /// @return true if the object is pulled, false otherwise
+  seastar::future<bool> maybe_pull_missing_obj(
+    const hobject_t& soid,
+    eversion_t need);
   /// read the remaining extents of object to be recovered and fill push_op
   /// with them
   ///