]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: make load_obc(obc, md_ref) return void 68200/head
authorKefu Chai <k.chai@proxmox.com>
Fri, 3 Apr 2026 08:05:36 +0000 (16:05 +0800)
committerKefu Chai <k.chai@proxmox.com>
Sun, 5 Apr 2026 12:33:27 +0000 (20:33 +0800)
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<md_ref>)
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 <k.chai@proxmox.com>
src/crimson/osd/object_context_loader.cc
src/crimson/osd/object_context_loader.h

index d907c0e0dbd3120476daec4cb75ef370ea27982e..7df8ea6ca895bb740b3d2b25c543c36ba3518e03 100644 (file)
@@ -158,32 +158,17 @@ ObjectContextLoader::load_obc(
   PGBackend::load_metadata_iertr::future<PGBackend::loaded_object_md_t::ref> _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)
index 946532e6bb7dbfa5cd6771b6eb39e07de388386f..070025052792369acf1468f08111b4edf429e858 100644 (file)
@@ -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);