From 302bc3c2d95cd36012008e334444f689ddb6694f Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Mon, 29 Aug 2022 16:12:00 +0800 Subject: [PATCH] test/crimson/seastore: check intra-fixedkv-btree parent->child trackers during unittests Signed-off-by: Xuehan Xu --- .../seastore/backref/btree_backref_manager.cc | 13 ++++++++++++- .../seastore/backref/btree_backref_manager.h | 2 ++ src/crimson/os/seastore/backref_manager.h | 3 +++ src/crimson/os/seastore/btree/fixed_kv_btree.h | 14 +++++++++----- src/crimson/os/seastore/cache.h | 18 ++++++++++++++++++ src/crimson/os/seastore/cached_extent.h | 10 ---------- src/crimson/os/seastore/lba_manager.h | 3 +++ .../lba_manager/btree/btree_lba_manager.cc | 11 +++++++++++ .../lba_manager/btree/btree_lba_manager.h | 2 ++ .../crimson/seastore/test_btree_lba_manager.cc | 5 +++++ .../seastore/test_transaction_manager.cc | 5 +++++ 11 files changed, 70 insertions(+), 16 deletions(-) diff --git a/src/crimson/os/seastore/backref/btree_backref_manager.cc b/src/crimson/os/seastore/backref/btree_backref_manager.cc index eab7fb9709e5a..ce3f737b21a8e 100644 --- a/src/crimson/os/seastore/backref/btree_backref_manager.cc +++ b/src/crimson/os/seastore/backref/btree_backref_manager.cc @@ -332,6 +332,17 @@ BtreeBackrefManager::merge_cached_backrefs( }); } +BtreeBackrefManager::check_child_trackers_ret +BtreeBackrefManager::check_child_trackers( + Transaction &t) { + auto c = get_context(t); + return with_btree( + cache, c, + [c](auto &btree) { + return btree.check_child_trackers(c); + }); +} + BtreeBackrefManager::scan_mapped_space_ret BtreeBackrefManager::scan_mapped_space( Transaction &t, @@ -419,7 +430,7 @@ BtreeBackrefManager::scan_mapped_space( BackrefBtree::mapped_space_visitor_t f = [&scan_visitor, block_size, FNAME, c]( paddr_t paddr, paddr_t key, extent_len_t len, - depth_t depth, extent_types_t type) { + depth_t depth, extent_types_t type, BackrefBtree::iterator&) { TRACET("tree node {}~{} {}, depth={} used", c.trans, paddr, len, type, depth); ceph_assert(paddr.is_absolute()); diff --git a/src/crimson/os/seastore/backref/btree_backref_manager.h b/src/crimson/os/seastore/backref/btree_backref_manager.h index 48ef4d8319171..e19d9ce7b065b 100644 --- a/src/crimson/os/seastore/backref/btree_backref_manager.h +++ b/src/crimson/os/seastore/backref/btree_backref_manager.h @@ -75,6 +75,8 @@ public: Transaction &t, paddr_t offset) final; + check_child_trackers_ret check_child_trackers(Transaction &t) final; + scan_mapped_space_ret scan_mapped_space( Transaction &t, scan_mapped_space_func_t &&f) final; diff --git a/src/crimson/os/seastore/backref_manager.h b/src/crimson/os/seastore/backref_manager.h index 3feedb997b4c3..4a354bdca8798 100644 --- a/src/crimson/os/seastore/backref_manager.h +++ b/src/crimson/os/seastore/backref_manager.h @@ -127,6 +127,9 @@ public: Transaction &t, paddr_t offset) = 0; + using check_child_trackers_ret = base_iertr::future<>; + virtual check_child_trackers_ret check_child_trackers(Transaction &t) = 0; + /** * scan all extents in both tree and cache, * including backref extents, logical extents and lba extents, diff --git a/src/crimson/os/seastore/btree/fixed_kv_btree.h b/src/crimson/os/seastore/btree/fixed_kv_btree.h index 7248e67a0503f..2aaf1620fcb4d 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_btree.h +++ b/src/crimson/os/seastore/btree/fixed_kv_btree.h @@ -77,7 +77,7 @@ public: using iterator_fut = base_iertr::future; using mapped_space_visitor_t = std::function< - void(paddr_t, node_key_t, extent_len_t, depth_t, extent_types_t)>; + void(paddr_t, node_key_t, extent_len_t, depth_t, extent_types_t, iterator&)>; class iterator { public: @@ -1377,7 +1377,8 @@ private: root_node->get_node_meta().begin, root_node->get_length(), get_root().get_depth(), - internal_node_t::TYPE); + internal_node_t::TYPE, + iter); return lookup_root_iertr::now(); }; auto on_found_leaf = @@ -1388,7 +1389,8 @@ private: root_node->get_node_meta().begin, root_node->get_length(), get_root().get_depth(), - leaf_node_t::TYPE); + leaf_node_t::TYPE, + iter); return lookup_root_iertr::now(); }; @@ -1465,7 +1467,8 @@ private: node->get_node_meta().begin, node->get_length(), depth, - node->get_type()); + node->get_type(), + iter); return seastar::now(); }; @@ -1532,7 +1535,8 @@ private: node->get_node_meta().begin, node->get_length(), 1, - node->get_type()); + node->get_type(), + iter); return seastar::now(); }; diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index b13875f9c467f..2b2b66fd9231d 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -25,6 +25,15 @@ class BtreeBackrefManager; namespace crimson::os::seastore { +template < + typename node_key_t, + typename node_val_t, + typename internal_node_t, + typename leaf_node_t, + typename pin_t, + size_t node_size, + bool leaf_has_children> +class FixedKVBtree; class BackrefManager; class SegmentProvider; @@ -1540,6 +1549,15 @@ private: } } + template < + typename node_key_t, + typename node_val_t, + typename internal_node_t, + typename leaf_node_t, + typename pin_t, + size_t node_size, + bool leaf_has_children> + friend class FixedKVBtree; }; using CacheRef = std::unique_ptr; diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index 3c4d79e0ca1e1..3d7af9fcbdc52 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -1139,16 +1139,6 @@ protected: private: laddr_t laddr = L_ADDR_NULL; - - template < - typename node_key_t, - typename node_val_t, - typename internal_node_t, - typename leaf_node_t, - typename pin_t, - size_t node_size, - bool leaf_has_children> - friend class FixedKVBtree; }; using LogicalCachedExtentRef = TCachedExtentRef; diff --git a/src/crimson/os/seastore/lba_manager.h b/src/crimson/os/seastore/lba_manager.h index d79f72a6a7bc6..f36a788344ac0 100644 --- a/src/crimson/os/seastore/lba_manager.h +++ b/src/crimson/os/seastore/lba_manager.h @@ -124,6 +124,9 @@ public: Transaction &t, CachedExtentRef e) = 0; + using check_child_trackers_ret = base_iertr::future<>; + virtual check_child_trackers_ret check_child_trackers(Transaction &t) = 0; + /** * Calls f for each mapping in [begin, end) */ 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 c4756dc083c16..296af756b756a 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 @@ -351,6 +351,17 @@ BtreeLBAManager::init_cached_extent( }); } +BtreeLBAManager::check_child_trackers_ret +BtreeLBAManager::check_child_trackers( + Transaction &t) { + auto c = get_context(t); + return with_btree( + cache, c, + [c](auto &btree) { + return btree.check_child_trackers(c); + }); +} + BtreeLBAManager::scan_mappings_ret BtreeLBAManager::scan_mappings( Transaction &t, diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h index 6dcdbb568b2b7..b48abf9456bbe 100644 --- a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h +++ b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h @@ -120,6 +120,8 @@ public: Transaction &t, CachedExtentRef e) final; + check_child_trackers_ret check_child_trackers(Transaction &t) final; + scan_mappings_ret scan_mappings( Transaction &t, laddr_t begin, diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index f3cb83324bcf8..67e187465616a 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -499,6 +499,11 @@ struct btree_lba_manager_test : btree_test_base { } void check_mappings(test_transaction_t &t) { + (void)with_trans_intr( + *t.t, + [=, this](auto &t) { + return lba_manager->check_child_trackers(t); + }).unsafe_get0(); for (auto &&i: t.mappings) { auto laddr = i.first; auto len = i.second.len; diff --git a/src/test/crimson/seastore/test_transaction_manager.cc b/src/test/crimson/seastore/test_transaction_manager.cc index baea0358e766d..d0bc2bd3f8f19 100644 --- a/src/test/crimson/seastore/test_transaction_manager.cc +++ b/src/test/crimson/seastore/test_transaction_manager.cc @@ -561,6 +561,11 @@ struct transaction_manager_test_t : ++iter; }); }).unsafe_get0(); + (void)with_trans_intr( + *t.t, + [=, this](auto &t) { + return lba_manager->check_child_trackers(t); + }).unsafe_get0(); } bool try_submit_transaction(test_transaction_t t) { -- 2.39.5