summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYingxin Cheng <yingxin.cheng@intel.com>2022-01-13 14:44:58 +0800
committerYingxin Cheng <yingxin.cheng@intel.com>2022-01-21 14:58:17 +0800
commit96ad6104d78c096795ac3045aa38014915f079dc (patch)
tree3af859113ac1c2fac1f3288696901b61a76952f3
parente73755faa10bed384772d2d71b1a556a5f38213e (diff)
downloadceph-96ad6104d78c096795ac3045aa38014915f079dc.tar.gz
crimson/os/seastore: consolidate Cache::init_cached_extent with drop_from_cache
So Cache::drop_from_cache() can be removed, and make it possible to add related logs within the Cache component. Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
-rw-r--r--src/crimson/os/seastore/cache.h40
-rw-r--r--src/crimson/os/seastore/lba_manager.h4
-rw-r--r--src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc17
-rw-r--r--src/crimson/os/seastore/lba_manager/btree/lba_btree.cc21
-rw-r--r--src/crimson/os/seastore/lba_manager/btree/lba_btree.h4
5 files changed, 43 insertions, 43 deletions
diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h
index 0b4a50afed7..2c50c0e9316 100644
--- a/src/crimson/os/seastore/cache.h
+++ b/src/crimson/os/seastore/cache.h
@@ -126,17 +126,6 @@ public:
SUBDEBUGT(seastore_cache, "reset", t);
}
- /**
- * drop_from_cache
- *
- * Drop extent from cache. Intended for use when
- * ref refers to a logically dead extent as during
- * replay.
- */
- void drop_from_cache(CachedExtentRef ref) {
- remove_extent(ref);
- }
-
/// Declare ref retired in t
void retire_extent(Transaction &t, CachedExtentRef ref) {
t.add_to_retired_set(ref);
@@ -608,16 +597,25 @@ public:
return seastar::do_with(
std::forward<F>(f),
std::move(dirty),
- [&t](auto &f, auto &refs) mutable {
- return trans_intr::do_for_each(
- refs,
- [&t, &f](auto &e) { return f(t, e); });
- }).handle_error_interruptible(
- init_cached_extents_iertr::pass_further{},
- crimson::ct_error::assert_all{
- "Invalid error in Cache::init_cached_extents"
- }
- );
+ [this, &t](auto &f, auto &refs) mutable
+ {
+ return trans_intr::do_for_each(
+ refs,
+ [this, &t, &f](auto &e)
+ {
+ return f(t, e
+ ).si_then([this, &t, e](bool is_alive) {
+ if (!is_alive) {
+ remove_extent(e);
+ }
+ });
+ });
+ }).handle_error_interruptible(
+ init_cached_extents_iertr::pass_further{},
+ crimson::ct_error::assert_all{
+ "Invalid error in Cache::init_cached_extents"
+ }
+ );
}
/**
diff --git a/src/crimson/os/seastore/lba_manager.h b/src/crimson/os/seastore/lba_manager.h
index c98302371ed..69aa0954a9c 100644
--- a/src/crimson/os/seastore/lba_manager.h
+++ b/src/crimson/os/seastore/lba_manager.h
@@ -118,9 +118,11 @@ public:
* Implementation must initialize the LBAPin on any
* LogicalCachedExtent's and may also read in any dependent
* structures, etc.
+ *
+ * @return returns whether the extent is alive
*/
using init_cached_extent_iertr = base_iertr;
- using init_cached_extent_ret = init_cached_extent_iertr::future<>;
+ using init_cached_extent_ret = init_cached_extent_iertr::future<bool>;
virtual init_cached_extent_ret init_cached_extent(
Transaction &t,
CachedExtentRef e) = 0;
diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc
index f15582733f7..c9b9ee865b3 100644
--- a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc
+++ b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc
@@ -266,14 +266,17 @@ BtreeLBAManager::init_cached_extent_ret BtreeLBAManager::init_cached_extent(
{
LOG_PREFIX(BtreeLBAManager::init_cached_extent);
DEBUGT("extent {}", t, *e);
- auto c = get_context(t);
- return with_btree(
- c,
- [c, e](auto &btree) {
- return btree.init_cached_extent(
- c, e
- ).si_then([](auto) {});
+ return seastar::do_with(bool(), [this, e, &t](bool& ret) {
+ auto c = get_context(t);
+ return with_btree(c, [c, e, &ret](auto &btree) {
+ return btree.init_cached_extent(c, e
+ ).si_then([&ret](bool is_alive) {
+ ret = is_alive;
+ });
+ }).si_then([&ret] {
+ return ret;
});
+ });
}
BtreeLBAManager::scan_mappings_ret BtreeLBAManager::scan_mappings(
diff --git a/src/crimson/os/seastore/lba_manager/btree/lba_btree.cc b/src/crimson/os/seastore/lba_manager/btree/lba_btree.cc
index 84358df08da..9bea6b596ab 100644
--- a/src/crimson/os/seastore/lba_manager/btree/lba_btree.cc
+++ b/src/crimson/os/seastore/lba_manager/btree/lba_btree.cc
@@ -286,12 +286,11 @@ LBABtree::init_cached_extent_ret LBABtree::init_cached_extent(
c.pins->add_pin(
static_cast<BtreeLBAPin&>(logn->get_pin()).pin);
}
- DEBUGT("logical extent {} live, initialized", c.trans, *logn);
- return e;
+ DEBUGT("logical extent {} live", c.trans, *logn);
+ return true;
} else {
- DEBUGT("logical extent {} not live, dropping", c.trans, *logn);
- c.cache.drop_from_cache(logn);
- return CachedExtentRef();
+ DEBUGT("logical extent {} not live", c.trans, *logn);
+ return false;
}
});
} else if (e->get_type() == extent_types_t::LADDR_INTERNAL) {
@@ -304,11 +303,10 @@ LBABtree::init_cached_extent_ret LBABtree::init_cached_extent(
if (cand_depth <= iter.get_depth() &&
&*iter.get_internal(cand_depth).node == &*eint) {
DEBUGT("extent {} is live", c.trans, *eint);
- return e;
+ return true;
} else {
DEBUGT("extent {} is not live", c.trans, *eint);
- c.cache.drop_from_cache(eint);
- return CachedExtentRef();
+ return false;
}
});
} else if (e->get_type() == extent_types_t::LADDR_LEAF) {
@@ -319,11 +317,10 @@ LBABtree::init_cached_extent_ret LBABtree::init_cached_extent(
// Note, this check is valid even if iter.is_end()
if (iter.leaf.node == &*eleaf) {
DEBUGT("extent {} is live", c.trans, *eleaf);
- return e;
+ return true;
} else {
DEBUGT("extent {} is not live", c.trans, *eleaf);
- c.cache.drop_from_cache(eleaf);
- return CachedExtentRef();
+ return false;
}
});
} else {
@@ -334,7 +331,7 @@ LBABtree::init_cached_extent_ret LBABtree::init_cached_extent(
e->get_type());
return init_cached_extent_ret(
interruptible::ready_future_marker{},
- e);
+ true);
}
}
diff --git a/src/crimson/os/seastore/lba_manager/btree/lba_btree.h b/src/crimson/os/seastore/lba_manager/btree/lba_btree.h
index 5caf0940474..163f7b11d9c 100644
--- a/src/crimson/os/seastore/lba_manager/btree/lba_btree.h
+++ b/src/crimson/os/seastore/lba_manager/btree/lba_btree.h
@@ -378,10 +378,10 @@ public:
* Checks whether e is live (reachable from lba tree) and drops or initializes
* accordingly.
*
- * Returns e if live and a null CachedExtentRef otherwise.
+ * Returns if e is live.
*/
using init_cached_extent_iertr = base_iertr;
- using init_cached_extent_ret = init_cached_extent_iertr::future<CachedExtentRef>;
+ using init_cached_extent_ret = init_cached_extent_iertr::future<bool>;
init_cached_extent_ret init_cached_extent(op_context_t c, CachedExtentRef e);
/// get_leaf_if_live: get leaf node at laddr/addr if still live