From 4a65bb247066eff0dbfd195d9e79c86e0c62ff0f Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Wed, 29 Jun 2022 11:06:52 +0800 Subject: [PATCH] src/test/crimson/seastore: add unit test case for listing entries of omap trees higher than 3 layers Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/cache.h | 4 +++ .../crimson/seastore/test_omap_manager.cc | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/src/crimson/os/seastore/cache.h b/src/crimson/os/seastore/cache.h index 081dd49743de9..53bf8bb234b4c 100644 --- a/src/crimson/os/seastore/cache.h +++ b/src/crimson/os/seastore/cache.h @@ -1003,6 +1003,10 @@ public: return; } } + + uint64_t get_omap_tree_depth() { + return stats.omap_tree_depth; + } private: ExtentPlacementManager& epm; RootBlockRef root; ///< ref to current root diff --git a/src/test/crimson/seastore/test_omap_manager.cc b/src/test/crimson/seastore/test_omap_manager.cc index 233d8ac5fd190..2b1e22818204d 100644 --- a/src/test/crimson/seastore/test_omap_manager.cc +++ b/src/test/crimson/seastore/test_omap_manager.cc @@ -408,6 +408,40 @@ TEST_F(omap_manager_test_t, force_split_listkeys_list_clear) }); } +TEST_F(omap_manager_test_t, force_inner_node_split_list) +{ + run_async([this] { + omap_root_t omap_root = initialize(); + + string temp = ""; + while (cache->get_omap_tree_depth() < 3) { + for (unsigned i = 0; i < 40; i++) { + auto t = create_mutate_transaction(); + logger().debug("opened transaction"); + for (unsigned j = 0; j < 10; ++j) { + auto key = set_random_key(omap_root, *t); + if (key.compare(temp) < 0 || !temp.length()) + temp = key; + } + logger().debug("force split submit transaction i = {}", i); + submit_transaction(std::move(t)); + } + } + + { + auto t = create_read_transaction(); + list(omap_root, *t, temp, 10240); + } + + { + auto t = create_mutate_transaction(); + clear(omap_root, *t); + submit_transaction(std::move(t)); + } + }); +} + + TEST_F(omap_manager_test_t, internal_force_split) { run_async([this] { -- 2.39.5