]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson: track obcs unconditionally
authorSamuel Just <sjust@redhat.com>
Thu, 3 Oct 2024 01:26:04 +0000 (18:26 -0700)
committerSamuel Just <sjust@redhat.com>
Thu, 7 Nov 2024 18:29:42 +0000 (10:29 -0800)
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 <sjust@redhat.com>
src/crimson/osd/object_context_loader.cc
src/crimson/osd/object_context_loader.h

index 1aa77b5a80300553d60ca0690635fb9042290b5d..d2585c312ef173c1a75ddc3e050b578eff791c80 100644 (file)
@@ -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<State, true /* track */>(
+    return with_locked_obc<State>(
       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<State, false /* don't track */>(
+    return with_locked_obc<State>(
       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<RWState::State State, bool track, typename Func>
+  template<RWState::State State, typename Func>
   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<State, IOInterruptCondition>(
        [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<State> (
@@ -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);
       });
     }
   }
index 3a4381405fc70659222b2cd9b54dce5ed5421e6e..a16123e8b812d86748c33e486bced51d1fd35199 100644 (file)
@@ -73,7 +73,7 @@ private:
   load_obc_iertr::future<> with_head_obc(const hobject_t& oid,
                                          with_obc_func_t&& func);
 
-  template<RWState::State State, bool track, typename Func>
+  template<RWState::State State, typename Func>
   load_obc_iertr::future<> with_locked_obc(const hobject_t& oid,
                                           Func&& func);