]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/.../omap_btree_node_impl: fix complete flag for depth 2 omap list
authorChanyoung Park <chaney.p@kakaoenterprise.com>
Sun, 13 Jul 2025 05:38:46 +0000 (05:38 +0000)
committerChanyoung Park <chaney.p@kakaoenterprise.com>
Wed, 16 Jul 2025 01:31:05 +0000 (01:31 +0000)
Fixes: https://tracker.ceph.com/issues/72100
Signed-off-by: Chanyoung Park <chaney.p@kakaoenterprise.com>
src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc
src/test/crimson/seastore/test_omap_manager.cc

index 3b26c75b413c5e7d73c07bef10058fe10743436b..b20060424ecd477bc4ee0af322374d682f6b8031 100644 (file)
@@ -353,6 +353,7 @@ OMapInnerNode::list(
             }
             result.merge(std::move(child_result));
            if (result.size() == config.max_result_size) {
+             complete = child_complete;
              return list_iertr::make_ready_future<seastar::stop_iteration>(
                seastar::stop_iteration::yes);
            }
index a0e679a3d31f9c13f100980b87ae87f9fae06627..b2816ba04507b61c7f745516658641f79843b536 100644 (file)
@@ -833,6 +833,34 @@ TEST_P(omap_manager_test_t, omap_iterate)
   });
 }
 
+TEST_P(omap_manager_test_t, full_range_list)
+{
+  run_async([this] {
+    omap_root_t omap_root = initialize();
+    std::optional<std::string> first = std::nullopt;
+    std::optional<std::string> last = std::nullopt;
+
+    auto full_range_list_and_log = [&](unsigned target_depth, std::string_view label) {
+      do {
+        auto t = create_mutate_transaction();
+        for (unsigned i = 0; i < 100; ++i) {
+          set_random_key(omap_root, *t);
+        }
+        submit_transaction(std::move(t));
+      } while (omap_root.depth < target_depth);
+
+      auto t = create_read_transaction();
+      logger().debug("[depth={}] {}", target_depth, label);
+      list(omap_root, *t, first, last, test_omap_mappings.size());
+    };
+
+    full_range_list_and_log(1, "full range list single leaf node");
+    full_range_list_and_log(2, "full range list single inner node with multiple leaf nodes");
+    // Skipped: covered by omap_manager_test_t.force_inner_node_split_list_rmkey_range.
+    // full_range_list_and_log(3, "full range list multiple inner and leaf nodes");
+  });
+}
+
 INSTANTIATE_TEST_SUITE_P(
   omap_manager_test,
   omap_manager_test_t,