From: Chanyoung Park Date: Sun, 13 Jul 2025 05:38:46 +0000 (+0000) Subject: crimson/.../omap_btree_node_impl: fix complete flag for depth 2 omap list X-Git-Tag: testing/wip-vshankar-testing-20250730.064735-debug~6^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e623180f81cc8a7519af9a7d1559e611de08d19f;p=ceph-ci.git crimson/.../omap_btree_node_impl: fix complete flag for depth 2 omap list Fixes: https://tracker.ceph.com/issues/72100 Signed-off-by: Chanyoung Park --- diff --git a/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc b/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc index 3b26c75b413..b20060424ec 100644 --- a/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc +++ b/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc @@ -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::yes); } diff --git a/src/test/crimson/seastore/test_omap_manager.cc b/src/test/crimson/seastore/test_omap_manager.cc index a0e679a3d31..b2816ba0450 100644 --- a/src/test/crimson/seastore/test_omap_manager.cc +++ b/src/test/crimson/seastore/test_omap_manager.cc @@ -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 first = std::nullopt; + std::optional 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,