]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test/crimson/seastore: check intra-fixedkv-btree parent->child trackers during unittests
authorXuehan Xu <xxhdx1985126@gmail.com>
Mon, 29 Aug 2022 08:12:00 +0000 (16:12 +0800)
committerMatan Breizman <mbreizma@redhat.com>
Tue, 23 May 2023 13:24:45 +0000 (13:24 +0000)
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
(cherry picked from commit 302bc3c2d95cd36012008e334444f689ddb6694f)

src/crimson/os/seastore/backref/btree_backref_manager.cc
src/crimson/os/seastore/backref/btree_backref_manager.h
src/crimson/os/seastore/backref_manager.h
src/crimson/os/seastore/btree/fixed_kv_btree.h
src/crimson/os/seastore/cache.h
src/crimson/os/seastore/cached_extent.h
src/crimson/os/seastore/lba_manager.h
src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc
src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.h
src/test/crimson/seastore/test_btree_lba_manager.cc
src/test/crimson/seastore/test_transaction_manager.cc

index eab7fb9709e5ae052725daccb555f2743281b6f6..ce3f737b21a8e7077e63d1fc614141ca68e8e0fd 100644 (file)
@@ -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<BackrefBtree>(
+    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());
index 48ef4d83191719fd44bb6b566c1a59f45b5e01ee..e19d9ce7b065b4f10e27329aa74bde5e4b8cf1f8 100644 (file)
@@ -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;
index 3feedb997b4c39c674993a5751fb8d3a33b529b8..4a354bdca879868cd5f83bedcc8ab47337378e2e 100644 (file)
@@ -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,
index 7248e67a0503f0e206a9e949ad7ce12dacc27e0f..2aaf1620fcb4d3ac9c05075ad2f74a762a8339f3 100644 (file)
@@ -77,7 +77,7 @@ public:
   using iterator_fut = base_iertr::future<iterator>;
 
   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();
     };
 
index b13875f9c467fb2b3eef7a655d351affb7628e1f..2b2b66fd9231ddb612708eb813cba8519683fb87 100644 (file)
@@ -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<Cache>;
 
index 3c4d79e0ca1e1f9c242f91878c1d7acb8db67a4d..3d7af9fcbdc5217cd15d4394bbeb11a9149ed11f 100644 (file)
@@ -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<LogicalCachedExtent>;
index d79f72a6a7bc6250105804aa0362bc13f7ced0d1..f36a788344ac04a2f8b7280b2f5e5222f5de70b2 100644 (file)
@@ -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)
    */
index c4756dc083c16cc9446937a1692b4931d5088296..296af756b756a67ecbf525bd02547fd776b20377 100644 (file)
@@ -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<LBABtree>(
+    cache, c,
+    [c](auto &btree) {
+    return btree.check_child_trackers(c);
+  });
+}
+
 BtreeLBAManager::scan_mappings_ret
 BtreeLBAManager::scan_mappings(
   Transaction &t,
index 6dcdbb568b2b7915a6ad0912ba4cafd4a1ce2db6..b48abf9456bbe7b9a092453d47da48044fd1aa45 100644 (file)
@@ -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,
index f3cb83324bcf8a1c39e1d6829f69b9a7b0008214..67e187465616a3f053e081e8081c860ed0bcc464 100644 (file)
@@ -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;
index baea0358e766da2d86088dc02434eb4409af7737..d0bc2bd3f8f190ee9cfbbda88c1a519580ef284c 100644 (file)
@@ -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) {