From fbfc53c7081ea0b99fbc519d7fac9f5637cf5425 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Fri, 18 Sep 2020 11:00:01 +0800 Subject: [PATCH] crimson/osd: extract PG::load_head_obc() out so it can be reused in later refactory Signed-off-by: Kefu Chai --- src/crimson/osd/pg.cc | 50 +++++++++++++++++++++++++------------------ src/crimson/osd/pg.h | 3 +++ 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index 0b225cff604d1..3aa6a09696365 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -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> - { - 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>( - std::make_pair(obc, false) - ); - }); + return load_head_obc(obc).safe_then([](auto obc) { + return load_obc_ertr::make_ready_future< + std::pair>( + std::make_pair(std::move(obc), false) + ); + }); } } +PG::load_obc_ertr::future +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 { + 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 PG::get_locked_obc( Operation *op, const hobject_t &oid, RWState::State type) diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index 0f1e92417c695..d754d18e8c754 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -499,6 +499,9 @@ public: std::pair> get_or_load_head_obc(hobject_t oid); + load_obc_ertr::future + load_head_obc(ObjectContextRef obc); + load_obc_ertr::future get_locked_obc( Operation *op, const hobject_t &oid, -- 2.39.5