]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd/pg: with_locked_obc() avoid head/clone distinguish 48682/head
authorMatan Breizman <mbreizma@redhat.com>
Wed, 9 Nov 2022 09:48:00 +0000 (09:48 +0000)
committerMatan Breizman <mbreizma@redhat.com>
Tue, 22 Nov 2022 09:35:38 +0000 (09:35 +0000)
The head or clone branch seperation can be done later on
(in with_obc()).

Signed-off-by: Matan Breizman <mbreizma@redhat.com>
src/crimson/osd/object_context_loader.cc
src/crimson/osd/object_context_loader.h
src/crimson/osd/pg.cc
src/crimson/osd/replicated_recovery_backend.cc

index 2c93a879a5f00a7306d51bf7d77889597e49ee58..a08271c6593e3affc2a1c14ac72a59ccf4cece65 100644 (file)
@@ -38,7 +38,7 @@ using crimson::common::local_conf;
                                       with_obc_func_t&& func)
   {
     assert(!oid.is_head());
-    return with_head_obc<RWState::RWREAD>(oid.get_head(),
+    return with_obc<RWState::RWREAD>(oid.get_head(),
       [oid, func=std::move(func), this](auto head) mutable
       -> load_obc_iertr::future<> {
       if (!head->obs.exists) {
@@ -84,14 +84,18 @@ using crimson::common::local_conf;
 
   template<RWState::State State>
   ObjectContextLoader::load_obc_iertr::future<>
-  ObjectContextLoader::with_head_obc(hobject_t oid,
-                                     with_obc_func_t&& func)
+  ObjectContextLoader::with_obc(hobject_t oid,
+                                with_obc_func_t&& func)
   {
-    auto [obc, existed] =
-      shard_services.get_cached_obc(std::move(oid));
-    return with_head_obc<State>(std::move(obc),
-                                existed,
-                                std::move(func));
+    if (oid.is_head()) {
+      auto [obc, existed] =
+        shard_services.get_cached_obc(std::move(oid));
+      return with_head_obc<State>(std::move(obc),
+                                  existed,
+                                  std::move(func));
+    } else {
+      return with_clone_obc<State>(oid, std::move(func));
+    }
   }
 
   ObjectContextLoader::load_obc_iertr::future<ObjectContextRef>
@@ -177,34 +181,18 @@ using crimson::common::local_conf;
 
   // explicitly instantiate the used instantiations
   template ObjectContextLoader::load_obc_iertr::future<>
-  ObjectContextLoader::with_head_obc<RWState::RWNONE>(hobject_t,
-                                                      with_obc_func_t&&);
-
-  template ObjectContextLoader::load_obc_iertr::future<>
-  ObjectContextLoader::with_head_obc<RWState::RWREAD>(hobject_t,
-                                                      with_obc_func_t&&);
-
-  template ObjectContextLoader::load_obc_iertr::future<>
-  ObjectContextLoader::with_head_obc<RWState::RWWRITE>(hobject_t,
-                                                       with_obc_func_t&&);
-
-  template ObjectContextLoader::load_obc_iertr::future<>
-  ObjectContextLoader::with_head_obc<RWState::RWEXCL>(hobject_t,
-                                                      with_obc_func_t&&);
-
-  template ObjectContextLoader::load_obc_iertr::future<>
-  ObjectContextLoader::with_clone_obc<RWState::RWNONE>(hobject_t,
-                                                       with_obc_func_t&&);
+  ObjectContextLoader::with_obc<RWState::RWNONE>(hobject_t,
+                                                 with_obc_func_t&&);
 
   template ObjectContextLoader::load_obc_iertr::future<>
-  ObjectContextLoader::with_clone_obc<RWState::RWREAD>(hobject_t,
-                                                       with_obc_func_t&&);
+  ObjectContextLoader::with_obc<RWState::RWREAD>(hobject_t,
+                                                 with_obc_func_t&&);
 
   template ObjectContextLoader::load_obc_iertr::future<>
-  ObjectContextLoader::with_clone_obc<RWState::RWWRITE>(hobject_t,
-                                                        with_obc_func_t&&);
+  ObjectContextLoader::with_obc<RWState::RWWRITE>(hobject_t,
+                                                  with_obc_func_t&&);
 
   template ObjectContextLoader::load_obc_iertr::future<>
-  ObjectContextLoader::with_clone_obc<RWState::RWEXCL>(hobject_t,
-                                                       with_obc_func_t&&);
+  ObjectContextLoader::with_obc<RWState::RWEXCL>(hobject_t,
+                                                 with_obc_func_t&&);
 }
index e211fd1159a3ad7d0f82d947117d5496c6e9023b..4115630abca09a0105e467049fb8a1fd12573d35 100644 (file)
@@ -32,8 +32,8 @@ public:
     std::function<load_obc_iertr::future<> (ObjectContextRef)>;
 
   template<RWState::State State>
-  load_obc_iertr::future<> with_head_obc(hobject_t oid,
-                                         with_obc_func_t&& func);
+  load_obc_iertr::future<> with_obc(hobject_t oid,
+                                    with_obc_func_t&& func);
 
   template<RWState::State State>
   load_obc_iertr::future<> with_clone_obc(hobject_t oid,
index eb30c981721695e8baf3844c18b24aa5b5119b55..e80782eb51eddd8d7dc7d571719d7988ec44cba6 100644 (file)
@@ -1006,23 +1006,11 @@ PG::with_locked_obc(const hobject_t &hobj,
   const hobject_t oid = get_oid(hobj);
   switch (get_lock_type(op_info)) {
   case RWState::RWREAD:
-    if (oid.is_head()) {
-      return obc_loader.with_head_obc<RWState::RWREAD>(oid, std::move(f));
-    } else {
-      return obc_loader.with_clone_obc<RWState::RWREAD>(oid, std::move(f));
-    }
+      return obc_loader.with_obc<RWState::RWREAD>(oid, std::move(f));
   case RWState::RWWRITE:
-    if (oid.is_head()) {
-      return obc_loader.with_head_obc<RWState::RWWRITE>(oid, std::move(f));
-    } else {
-      return obc_loader.with_clone_obc<RWState::RWWRITE>(oid, std::move(f));
-    }
+      return obc_loader.with_obc<RWState::RWWRITE>(oid, std::move(f));
   case RWState::RWEXCL:
-    if (oid.is_head()) {
-      return obc_loader.with_head_obc<RWState::RWEXCL>(oid, std::move(f));
-    } else {
-      return obc_loader.with_clone_obc<RWState::RWEXCL>(oid, std::move(f));
-    }
+      return obc_loader.with_obc<RWState::RWEXCL>(oid, std::move(f));
   default:
     ceph_abort();
   };
index 6297ca87ba4ad7ec0c0a3d739e816243bc9cb341..559776e380b76be1fa8580ed65d84e019acaaaef 100644 (file)
@@ -33,7 +33,7 @@ ReplicatedRecoveryBackend::recover_object(
   // start tracking the recovery of soid
   return maybe_pull_missing_obj(soid, need).then_interruptible([this, soid, need] {
     logger().debug("recover_object: loading obc: {}", soid);
-    return pg.obc_loader.with_head_obc<RWState::RWREAD>(soid,
+    return pg.obc_loader.with_obc<RWState::RWREAD>(soid,
       [this, soid, need](auto obc) {
       logger().debug("recover_object: loaded obc: {}", obc->obs.oi.soid);
       auto& recovery_waiter = get_recovering(soid);
@@ -678,7 +678,7 @@ ReplicatedRecoveryBackend::_handle_pull_response(
   auto prepare_waiter = interruptor::make_interruptible(
       seastar::make_ready_future<>());
   if (pi.recovery_progress.first) {
-    prepare_waiter = pg.obc_loader.with_head_obc<RWState::RWNONE>(
+    prepare_waiter = pg.obc_loader.with_obc<RWState::RWNONE>(
       pi.recovery_info.soid, [&pi, &recovery_waiter, &pop](auto obc) {
         pi.obc = obc;
         recovery_waiter.obc = obc;