From: Yingxin Cheng Date: Wed, 14 Jul 2021 08:05:20 +0000 (+0800) Subject: crimson/os/seastore/cache: cleanup to use Cache::invalidate(t, conflicting_extent) X-Git-Tag: v17.1.0~1350^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c21783d4bf90986e58057e833ee82efda61495ba;p=ceph.git crimson/os/seastore/cache: cleanup to use Cache::invalidate(t, conflicting_extent) Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 565f6fa8489c..10c38d066f58 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -417,23 +417,32 @@ void Cache::replace_extent(CachedExtentRef next, CachedExtentRef prev) invalidate(*prev); } -void Cache::invalidate(CachedExtent &extent) { +void Cache::invalidate(CachedExtent &extent) +{ LOG_PREFIX(Cache::invalidate); DEBUG("invalidate begin -- extent {}", extent); for (auto &&i: extent.transactions) { if (!i.t->conflicted) { - DEBUGT("set conflict", *i.t); - i.t->conflicted = true; assert(!i.t->is_weak()); - auto m_key = std::make_pair(i.t->get_src(), extent.get_type()); - assert(stats.trans_invalidated.count(m_key)); - ++(stats.trans_invalidated[m_key]); + invalidate(*i.t, extent); } } DEBUG("invalidate end"); extent.state = CachedExtent::extent_state_t::INVALID; } +void Cache::invalidate(Transaction& t, CachedExtent& conflicting_extent) +{ + LOG_PREFIX(Cache::invalidate); + assert(!t.conflicted); + DEBUGT("set conflict", t); + t.conflicted = true; + auto m_key = std::make_pair( + t.get_src(), conflicting_extent.get_type()); + assert(stats.trans_invalidated.count(m_key)); + ++(stats.trans_invalidated[m_key]); +} + CachedExtentRef Cache::alloc_new_extent_by_type( Transaction &t, ///< [in, out] current transaction extent_types_t type, ///< [in] type tag diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 9c51cf446bb1..f7389158d4c2 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -307,10 +307,7 @@ public: if (!ref->is_valid()) { LOG_PREFIX(Cache::get_extent); DEBUGT("got invalid extent: {}", t, ref); - t.conflicted = true; - auto m_key = std::make_pair(t.get_src(), T::TYPE); - assert(stats.trans_invalidated.count(m_key)); - ++(stats.trans_invalidated[m_key]); + invalidate(t, *ref.get()); return get_extent_iertr::make_ready_future>(); } else { t.add_to_read_set(ref); @@ -359,10 +356,7 @@ public: if (!ret->is_valid()) { LOG_PREFIX(Cache::get_extent_by_type); DEBUGT("got invalid extent: {}", t, ret); - t.conflicted = true; - auto m_key = std::make_pair(t.get_src(), type); - assert(stats.trans_invalidated.count(m_key)); - ++(stats.trans_invalidated[m_key]); + invalidate(t, *ret.get()); return get_extent_ertr::make_ready_future(); } else { t.add_to_read_set(ret); @@ -647,6 +641,9 @@ private: /// Invalidate extent and mark affected transactions void invalidate(CachedExtent &extent); + /// Mark a valid transaction as conflicted + void invalidate(Transaction& t, CachedExtent& conflicting_extent); + template get_extent_ret read_extent( TCachedExtentRef&& extent