From: Samuel Just Date: Thu, 3 Oct 2024 01:26:04 +0000 (-0700) Subject: crimson: track obcs unconditionally X-Git-Tag: v20.0.0~685^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=737676bdb5c4c2b234e23399d23a74f029460b63;p=ceph.git crimson: track obcs unconditionally Previously, we only interrupted head obcs. I don't think that distinction actually makes sense -- both head and clone obcs can have ops blocked on the lock. Let's just track them all. Signed-off-by: Samuel Just --- diff --git a/src/crimson/osd/object_context_loader.cc b/src/crimson/osd/object_context_loader.cc index 1aa77b5a80300..d2585c312ef17 100644 --- a/src/crimson/osd/object_context_loader.cc +++ b/src/crimson/osd/object_context_loader.cc @@ -13,7 +13,7 @@ using crimson::common::local_conf; ObjectContextLoader::with_head_obc(const hobject_t& oid, with_obc_func_t&& func) { - return with_locked_obc( + return with_locked_obc( oid, [func=std::move(func)](auto obc) { // The template with_obc_func_t wrapper supports two obcs (head and clone). @@ -73,7 +73,7 @@ using crimson::common::local_conf; } clone_oid = *resolved_oid; } - return with_locked_obc( + return with_locked_obc( clone_oid, [head=std::move(head), func=std::move(func)](auto clone) { clone->set_clone_ssc(head->ssc); @@ -94,7 +94,7 @@ using crimson::common::local_conf; } } - template + template ObjectContextLoader::load_obc_iertr::future<> ObjectContextLoader::with_locked_obc(const hobject_t& oid, Func&& func) @@ -103,9 +103,7 @@ using crimson::common::local_conf; auto [obc, existed] = obc_registry.get_cached_obc(oid); DEBUGDPP("object {} existed {}", dpp, obc->get_oid(), existed); - if constexpr (track) { - obc->append_to(obc_set_accessing); - } + obc->append_to(obc_set_accessing); if (existed) { return obc->with_lock( [func=std::move(func), obc=ObjectContextRef(obc)] { @@ -113,9 +111,7 @@ using crimson::common::local_conf; } ).finally([FNAME, this, obc=ObjectContextRef(obc)] { DEBUGDPP("released object {}, {}", dpp, obc->get_oid(), obc->obs); - if constexpr (track) { - obc->remove_from(obc_set_accessing); - } + obc->remove_from(obc_set_accessing); }); } else { return obc->load_then_with_lock ( @@ -127,9 +123,7 @@ using crimson::common::local_conf; } ).finally([FNAME, this, obc=ObjectContextRef(obc)] { DEBUGDPP("released object {}, {}", dpp, obc->get_oid(), obc->obs); - if constexpr (track) { - obc->remove_from(obc_set_accessing); - } + obc->remove_from(obc_set_accessing); }); } } diff --git a/src/crimson/osd/object_context_loader.h b/src/crimson/osd/object_context_loader.h index 3a4381405fc70..a16123e8b812d 100644 --- a/src/crimson/osd/object_context_loader.h +++ b/src/crimson/osd/object_context_loader.h @@ -73,7 +73,7 @@ private: load_obc_iertr::future<> with_head_obc(const hobject_t& oid, with_obc_func_t&& func); - template + template load_obc_iertr::future<> with_locked_obc(const hobject_t& oid, Func&& func);