]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test/crimson/seastore/test_omap_manager: faster check mappings 65008/head
authorChanyoung Park <chaney.p@kakaoenterprise.com>
Fri, 8 Aug 2025 16:54:41 +0000 (16:54 +0000)
committerChanyoung Park <chaney.p@kakaoenterprise.com>
Wed, 13 Aug 2025 08:36:14 +0000 (08:36 +0000)
Signed-off-by: Chanyoung Park <chaney.p@kakaoenterprise.com>
src/test/crimson/seastore/test_omap_manager.cc

index 19dc09dea752ea2ba9d095de69c81284bf0880b4..4e9e580e5c8e4cf438907bcdef271b365eb70ebb 100644 (file)
@@ -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<std::string> 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);