From fe55ae239a8fa97a6f3af3beb90d45fd2b8c1e97 Mon Sep 17 00:00:00 2001 From: Matan Breizman Date: Mon, 31 Oct 2022 13:14:36 +0000 Subject: [PATCH] crimson/osd/pg*: Move resolve_oid() to object_context Signed-off-by: Matan Breizman --- src/crimson/osd/object_context.cc | 43 +++++++++++++++++++++++++++++++ src/crimson/osd/object_context.h | 3 +++ src/crimson/osd/pg.cc | 38 --------------------------- src/crimson/osd/pg.h | 3 --- 4 files changed, 46 insertions(+), 41 deletions(-) diff --git a/src/crimson/osd/object_context.cc b/src/crimson/osd/object_context.cc index 5ecc184f31f..48e239ec973 100644 --- a/src/crimson/osd/object_context.cc +++ b/src/crimson/osd/object_context.cc @@ -6,6 +6,12 @@ #include "common/Formatter.h" #include "crimson/common/config_proxy.h" +namespace { + seastar::logger& logger() { + return crimson::get_logger(ceph_subsys_osd); + } +} + namespace crimson::osd { ObjectContextRegistry::ObjectContextRegistry(crimson::common::ConfigProxy &conf) @@ -36,5 +42,42 @@ void ObjectContextRegistry::handle_conf_change( obc_lru.set_target_size(conf.get_val("crimson_osd_obc_lru_size")); } +std::optional resolve_oid( + const SnapSet &ss, + const hobject_t &oid) +{ + logger().debug("{} oid.snap={},head snapset.seq={}", + __func__, oid.snap, ss.seq); + if (oid.snap > ss.seq) { + // Because oid.snap > ss.seq, we are trying to read from a snapshot + // taken after the most recent write to this object. Read from head. + return oid.get_head(); + } else { + // which clone would it be? + auto clone = std::lower_bound( + begin(ss.clones), end(ss.clones), + oid.snap); + if (clone == end(ss.clones)) { + // Doesn't exist, > last clone, < ss.seq + return std::nullopt; + } + auto citer = ss.clone_snaps.find(*clone); + // TODO: how do we want to handle this kind of logic error? + ceph_assert(citer != ss.clone_snaps.end()); + + if (std::find( + citer->second.begin(), + citer->second.end(), + oid.snap) == citer->second.end()) { + logger().debug("{} {} does not contain {} -- DNE", + __func__, ss.clone_snaps, oid.snap); + return std::nullopt; + } else { + auto soid = oid; + soid.snap = *clone; + return std::optional(soid); + } + } +} } diff --git a/src/crimson/osd/object_context.h b/src/crimson/osd/object_context.h index a77fd0bc6a4..c42f8647a0f 100644 --- a/src/crimson/osd/object_context.h +++ b/src/crimson/osd/object_context.h @@ -268,4 +268,7 @@ public: const std::set &changed) final; }; +std::optional resolve_oid(const SnapSet &ss, + const hobject_t &oid); + } // namespace crimson::osd diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index e554bd7d9bc..eb30c981721 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -995,44 +995,6 @@ RWState::State PG::get_lock_type(const OpInfo &op_info) } } -std::optional PG::resolve_oid( - const SnapSet &ss, - const hobject_t &oid) -{ - logger().debug("{} oid.snap={},head snapset.seq={}", - __func__, oid.snap, ss.seq); - if (oid.snap > ss.seq) { - // Because oid.snap > ss.seq, we are trying to read from a snapshot - // taken after the most recent write to this object. Read from head. - return oid.get_head(); - } else { - // which clone would it be? - auto clone = std::lower_bound( - begin(ss.clones), end(ss.clones), - oid.snap); - if (clone == end(ss.clones)) { - // Doesn't exist, > last clone, < ss.seq - return std::nullopt; - } - auto citer = ss.clone_snaps.find(*clone); - // TODO: how do we want to handle this kind of logic error? - ceph_assert(citer != ss.clone_snaps.end()); - - if (std::find( - citer->second.begin(), - citer->second.end(), - oid.snap) == citer->second.end()) { - logger().debug("{} {} does not contain {} -- DNE", - __func__, ss.clone_snaps, oid.snap); - return std::nullopt; - } else { - auto soid = oid; - soid.snap = *clone; - return std::optional(soid); - } - } -} - PG::load_obc_iertr::future<> PG::with_locked_obc(const hobject_t &hobj, const OpInfo &op_info, diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index 56235b73b35..a353634ba19 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -506,9 +506,6 @@ public: static hobject_t get_oid(const hobject_t& hobj); static RWState::State get_lock_type(const OpInfo &op_info); - static std::optional resolve_oid( - const SnapSet &snapset, - const hobject_t &oid); using load_obc_ertr = crimson::errorator< crimson::ct_error::enoent, -- 2.39.5