From: Kefu Chai Date: Fri, 3 Apr 2026 08:05:36 +0000 (+0800) Subject: crimson/osd: make load_obc(obc, md_ref) return void X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6d9d564d66b4ff413f6adf7e3162215913e70631;p=ceph.git crimson/osd: make load_obc(obc, md_ref) return void load_obc() taking an already-resolved loaded_object_md_t::ref is synchronous, because it just populates obc state, it does yield. Returning an errorated future was unnecessary and caused a -Wunused-result warning at its only call site: ECRecoveryBackend::maybe_load_obc(). In this change, we change it to return void and deduplicate the OBC population logic: the private async overload (taking future) now validates ssc and returns object_corrupted on failure. This silences the warning, and simpler this way. The async error propagation is preserved. Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/object_context_loader.cc b/src/crimson/osd/object_context_loader.cc index d907c0e0dbd3..7df8ea6ca895 100644 --- a/src/crimson/osd/object_context_loader.cc +++ b/src/crimson/osd/object_context_loader.cc @@ -158,32 +158,17 @@ ObjectContextLoader::load_obc( PGBackend::load_metadata_iertr::future _md) { LOG_PREFIX(ObjectContextLoader::load_obc); - return std::move(_md) - .safe_then_interruptible( - [FNAME, this, obc=std::move(obc)](auto md) - -> load_obc_ertr::future<> { - const hobject_t& oid = md->os.oi.soid; - DEBUGDPP("loaded obs {} for {}", dpp, md->os.oi, oid); - if (oid.is_head()) { - if (!md->ssc) { - ERRORDPP("oid {} missing snapsetcontext", dpp, oid); - return crimson::ct_error::object_corrupted::make(); - } - obc->set_head_state(std::move(md->os), - std::move(md->ssc)); - } else { - // we load and set the ssc only for head obc. - // For clones, the head's ssc will be referenced later. - // See set_clone_ssc - obc->set_clone_state(std::move(md->os)); - } - obc->attr_cache = std::move(md->attr_cache); - DEBUGDPP("loaded obc {} for {}", dpp, obc->obs.oi, obc->obs.oi.soid); - return seastar::now(); - }); + auto md = co_await std::move(_md); + if (md->os.oi.soid.is_head() && !md->ssc) { + ERRORDPP("oid {} missing snapsetcontext", + dpp, md->os.oi.soid); + co_await load_obc_iertr::future<>( + crimson::ct_error::object_corrupted::make()); + } + load_obc(obc, std::move(md)); } -ObjectContextLoader::load_obc_iertr::future<> +void ObjectContextLoader::load_obc( ObjectContextRef obc, PGBackend::loaded_object_md_t::ref md) @@ -192,10 +177,7 @@ ObjectContextLoader::load_obc( LOG_PREFIX(ObjectContextLoader::load_obc); DEBUGDPP("loaded obs {} for {}", dpp, md->os.oi, oid); if (oid.is_head()) { - if (!md->ssc) { - ERRORDPP("oid {} missing snapsetcontext", dpp, oid); - return crimson::ct_error::object_corrupted::make(); - } + ceph_assert(md->ssc); obc->set_head_state(std::move(md->os), std::move(md->ssc)); } else { @@ -206,7 +188,6 @@ ObjectContextLoader::load_obc( } obc->attr_cache = std::move(md->attr_cache); DEBUGDPP("loaded obc {} for {}", dpp, obc->obs.oi, obc->obs.oi.soid); - return seastar::now(); } void ObjectContextLoader::notify_on_change(bool is_primary) diff --git a/src/crimson/osd/object_context_loader.h b/src/crimson/osd/object_context_loader.h index 946532e6bb7d..070025052792 100644 --- a/src/crimson/osd/object_context_loader.h +++ b/src/crimson/osd/object_context_loader.h @@ -324,7 +324,7 @@ public: void notify_on_change(bool is_primary); - load_obc_iertr::future<> load_obc( + void load_obc( ObjectContextRef obc, PGBackend::loaded_object_md_t::ref);