From a9ff4f50db652b9afc52ecd7fa16b5752cc07ab1 Mon Sep 17 00:00:00 2001 From: Chanyoung Park Date: Fri, 8 Aug 2025 16:54:41 +0000 Subject: [PATCH] test/crimson/seastore/test_omap_manager: faster check mappings Signed-off-by: Chanyoung Park --- .../crimson/seastore/test_omap_manager.cc | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/test/crimson/seastore/test_omap_manager.cc b/src/test/crimson/seastore/test_omap_manager.cc index 19dc09dea752..4e9e580e5c8e 100644 --- a/src/test/crimson/seastore/test_omap_manager.cc +++ b/src/test/crimson/seastore/test_omap_manager.cc @@ -331,12 +331,38 @@ struct omap_manager_test_t : EXPECT_EQ(omap_root.get_location(), L_ADDR_NULL); } - void check_mappings(omap_root_t &omap_root, Transaction &t) { + bool check_mappings_fastpath(omap_root_t &omap_root, Transaction &t) { + auto config = OMapManager::omap_list_config_t() + .without_max() + .with_inclusive(true, true); + + std::optional null_key = std::nullopt; + auto [complete, omap_list] = with_trans_intr(t, [&, this](auto &t) { + return omap_manager->omap_list( + omap_root, t, null_key, null_key, config); /* from start to end */ + }).unsafe_get(); + + if (omap_list.size() != test_omap_mappings.size()) { return false; } + return std::equal(test_omap_mappings.begin(), + test_omap_mappings.end(), + omap_list.begin(), + [](const auto &a, const auto &b) { + return a.first == b.first && a.second == b.second; + }); + } + + void check_mappings_slowpath(omap_root_t &omap_root, Transaction &t) { for (const auto &i: test_omap_mappings){ get_value(omap_root, t, i.first); } } + void check_mappings(omap_root_t &omap_root, Transaction &t) { + if (!check_mappings_fastpath(omap_root, t)) { + check_mappings_slowpath(omap_root, t); + } + } + void check_mappings(omap_root_t &omap_root) { auto t = create_read_transaction(); check_mappings(omap_root, *t); -- 2.47.3