crimson/osd: extract PG::load_head_obc() out 37200/head
authorKefu Chai <kchai@redhat.com>
Fri, 18 Sep 2020 03:00:01 +0000 (11:00 +0800)
committerKefu Chai <kchai@redhat.com>
Sat, 19 Sep 2020 05:30:51 +0000 (13:30 +0800)
so it can be reused in later refactory

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

index 0b225cff604d14dd14313301d48db2d3f711f8a8..3aa6a0969636579f09dbce114e8806c779bfd4e2 100644 (file)
@@ -832,30 +832,38 @@ PG::get_or_load_head_obc(hobject_t oid)
       oid);
     bool got = obc->maybe_get_excl();
     ceph_assert(got);
-    return backend->load_metadata(oid).safe_then(
-      [oid, obc=std::move(obc)](auto md) ->
-        load_obc_ertr::future<
-          std::pair<crimson::osd::ObjectContextRef, bool>>
-      {
-       logger().debug(
-         "get_or_load_head_obc: loaded obs {} for {}", md->os.oi, oid);
-       if (!md->ss) {
-         logger().error(
-           "get_or_load_head_obc: oid {} missing snapset", oid);
-         return crimson::ct_error::object_corrupted::make();
-       }
-       obc->set_head_state(std::move(md->os), std::move(*(md->ss)));
-         logger().debug(
-           "get_or_load_head_obc: returning obc {} for {}",
-           obc->obs.oi, obc->obs.oi.soid);
-         return load_obc_ertr::make_ready_future<
-           std::pair<crimson::osd::ObjectContextRef, bool>>(
-             std::make_pair(obc, false)
-           );
-      });
+    return load_head_obc(obc).safe_then([](auto obc) {
+      return load_obc_ertr::make_ready_future<
+        std::pair<crimson::osd::ObjectContextRef, bool>>(
+          std::make_pair(std::move(obc), false)
+        );
+    });
   }
 }
 
+PG::load_obc_ertr::future<crimson::osd::ObjectContextRef>
+PG::load_head_obc(ObjectContextRef obc)
+{
+  hobject_t oid = obc->get_oid();
+  return backend->load_metadata(oid).safe_then([obc=std::move(obc)](auto md)
+    -> load_obc_ertr::future<crimson::osd::ObjectContextRef> {
+    const hobject_t& oid = md->os.oi.soid;
+    logger().debug(
+      "get_or_load_head_obc: loaded obs {} for {}", md->os.oi, oid);
+    if (!md->ss) {
+      logger().error(
+        "get_or_load_head_obc: oid {} missing snapset", oid);
+      return crimson::ct_error::object_corrupted::make();
+    }
+    obc->set_head_state(std::move(md->os), std::move(*(md->ss)));
+    logger().debug(
+      "get_or_load_head_obc: returning obc {} for {}",
+      obc->obs.oi, obc->obs.oi.soid);
+    return load_obc_ertr::make_ready_future<
+      crimson::osd::ObjectContextRef>(obc);
+  });
+}
+
 PG::load_obc_ertr::future<crimson::osd::ObjectContextRef>
 PG::get_locked_obc(
   Operation *op, const hobject_t &oid, RWState::State type)
index 0f1e92417c695ca962a6b8653ce9fcf6631ca8d6..d754d18e8c7540cbb3bef4a75b99873f0de2cda7 100644 (file)
@@ -499,6 +499,9 @@ public:
     std::pair<crimson::osd::ObjectContextRef, bool>>
   get_or_load_head_obc(hobject_t oid);
 
+  load_obc_ertr::future<crimson::osd::ObjectContextRef>
+  load_head_obc(ObjectContextRef obc);
+
   load_obc_ertr::future<ObjectContextRef> get_locked_obc(
     Operation *op,
     const hobject_t &oid,