From: myoungwon oh Date: Wed, 25 Feb 2026 12:41:12 +0000 (+0900) Subject: crimson/os/seastore: correct UPPER_BOUND behavior to start looking up items exceeding... X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5710208b8639396d2a547b9a299cd389080daaf6;p=ceph-ci.git crimson/os/seastore: correct UPPER_BOUND behavior to start looking up items exceeding the target Signed-off-by: Myoungwon Oh --- diff --git a/src/crimson/os/seastore/omap_manager/log/log_manager.cc b/src/crimson/os/seastore/omap_manager/log/log_manager.cc index dc14b9f65da..73178502c41 100644 --- a/src/crimson/os/seastore/omap_manager/log/log_manager.cc +++ b/src/crimson/os/seastore/omap_manager/log/log_manager.cc @@ -824,21 +824,17 @@ LogManager::omap_iterate( std::string s = start_from.seek_position; std::map kvs; - if (start_from.seek_type == ObjectStore::omap_iter_seek_t::LOWER_BOUND) { - co_await find_kvs(t, log_root.addr, std::optional(s), - std::optional(std::nullopt), kvs); - co_await find_kvs(t, - co_await get_dup_addr_from_root(t, log_root.addr), - std::optional(s), - std::optional(std::nullopt), kvs); - } else { - assert(start_from.seek_type == ObjectStore::omap_iter_seek_t::UPPER_BOUND); - co_await find_kvs(t, log_root.addr, std::optional(std::nullopt), - std::optional(s), kvs); - co_await find_kvs(t, - co_await get_dup_addr_from_root(t, log_root.addr), - std::optional(std::nullopt), - std::optional(s), kvs); + co_await find_kvs(t, log_root.addr, std::optional(s), + std::optional(std::nullopt), kvs); + co_await find_kvs(t, + co_await get_dup_addr_from_root(t, log_root.addr), + std::optional(s), + std::optional(std::nullopt), kvs); + if (start_from.seek_type == ObjectStore::omap_iter_seek_t::UPPER_BOUND) { + auto it = kvs.find(s); + if (it != kvs.end()) { + kvs.erase(it); + } } ObjectStore::omap_iter_ret_t ret; diff --git a/src/test/crimson/seastore/test_seastore.cc b/src/test/crimson/seastore/test_seastore.cc index 2185d54033c..07a2ea9ce0d 100644 --- a/src/test/crimson/seastore/test_seastore.cc +++ b/src/test/crimson/seastore/test_seastore.cc @@ -1887,7 +1887,10 @@ TEST_P(seastore_test_t, pgmeta_io) auto target_value = *it; kvs = test_obj.get_omaps(*sharded_seastore, target_value, ObjectStore::omap_iter_seek_t::UPPER_BOUND); - EXPECT_EQ(kvs.size(), 3); + EXPECT_EQ(kvs.size(), test_obj.omap.size() - 3); + kvs = test_obj.get_omaps(*sharded_seastore, "", + ObjectStore::omap_iter_seek_t::UPPER_BOUND); + EXPECT_EQ(kvs.size(), test_obj.omap.size()); test_obj.rm_omap_range(*sharded_seastore, std::string(), target_value); kvs = test_obj.get_omaps(*sharded_seastore, std::string()); EXPECT_EQ(kvs.size(), log_count - 3);