From 49b10d72a7c392e8ed338d1edb0a69a8142f5464 Mon Sep 17 00:00:00 2001 From: Xinyu Huang Date: Wed, 14 Sep 2022 09:13:07 +0000 Subject: [PATCH] crimson/os/seastore/omap: add tests for range remove Signed-off-by: Xinyu Huang --- .../crimson/seastore/test_omap_manager.cc | 67 +++++++++++++++++-- 1 file changed, 63 insertions(+), 4 deletions(-) diff --git a/src/test/crimson/seastore/test_omap_manager.cc b/src/test/crimson/seastore/test_omap_manager.cc index a571500e4c9..9e3ee1043de 100644 --- a/src/test/crimson/seastore/test_omap_manager.cc +++ b/src/test/crimson/seastore/test_omap_manager.cc @@ -137,6 +137,40 @@ struct omap_manager_test_t : test_omap_mappings.erase(test_omap_mappings.find(key)); } + std::vector rm_key_range( + omap_root_t &omap_root, + Transaction &t, + const std::string &first, + const std::string &last) { + logger().debug("rm keys in range {} ~ {}", first, last); + auto config = OMapManager::omap_list_config_t::with_max(3000); + config.inclusive = true; + + with_trans_intr( + t, + [&, this](auto &t) { + return omap_manager->omap_rm_key_range( + omap_root, t, first, last, config); + }).unsafe_get0(); + + std::vector keys; + size_t count = 0; + for (auto iter = test_omap_mappings.begin(); + iter != test_omap_mappings.end(); ) { + if (iter->first >= first && iter->first <= last) { + keys.push_back(iter->first); + iter = test_omap_mappings.erase(iter); + count++; + } else { + iter++; + } + if (count == config.max_result_size) { + break; + } + } + return keys; + } + void list( const omap_root_t &omap_root, Transaction &t, @@ -183,8 +217,9 @@ struct omap_manager_test_t : for (auto &&[k, v]: results) { EXPECT_NE(it, test_omap_mappings.end()); - if (it == test_omap_mappings.end()) + if (it == test_omap_mappings.end()) { return; + } EXPECT_EQ(k, it->first); EXPECT_EQ(v, it->second); it++; @@ -377,8 +412,9 @@ TEST_F(omap_manager_test_t, force_leafnode_split_merge_fullandbalanced) check_mappings(omap_root, *t); check_mappings(omap_root); } - if (i == 100) + if (i == 100) { break; + } } logger().debug("finally submitting transaction "); submit_transaction(std::move(t)); @@ -386,7 +422,7 @@ TEST_F(omap_manager_test_t, force_leafnode_split_merge_fullandbalanced) }); } -TEST_F(omap_manager_test_t, force_split_listkeys_list_clear) +TEST_F(omap_manager_test_t, force_split_listkeys_list_rmkey_range_clear) { run_async([this] { omap_root_t omap_root = initialize(); @@ -452,6 +488,20 @@ TEST_F(omap_manager_test_t, force_split_listkeys_list_clear) list(omap_root, *t, first_temp, last_temp, 10240, true); } + { + auto t = create_read_transaction(); + list(omap_root, *t, first, last, 10240, true); + } + + { + auto t = create_mutate_transaction(); + auto keys = rm_key_range(omap_root, *t, first, last); + for (const auto& key : keys) { + get_value(omap_root, *t, key); + } + submit_transaction(std::move(t)); + } + { auto t = create_mutate_transaction(); clear(omap_root, *t); @@ -460,7 +510,7 @@ TEST_F(omap_manager_test_t, force_split_listkeys_list_clear) }); } -TEST_F(omap_manager_test_t, force_inner_node_split_list) +TEST_F(omap_manager_test_t, force_inner_node_split_list_rmkey_range) { run_async([this] { omap_root_t omap_root = initialize(); @@ -515,6 +565,15 @@ TEST_F(omap_manager_test_t, force_inner_node_split_list) list(omap_root, *t, first_temp, last_temp, 10240, true); } + { + auto t = create_mutate_transaction(); + auto keys = rm_key_range(omap_root, *t, first, last); + for (const auto& key : keys) { + get_value(omap_root, *t, key); + } + submit_transaction(std::move(t)); + } + { auto t = create_mutate_transaction(); clear(omap_root, *t); -- 2.39.5