]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore: correct UPPER_BOUND behavior to start looking up items exceeding...
authormyoungwon oh <ohmyoungwon@gmail.com>
Wed, 25 Feb 2026 12:41:12 +0000 (21:41 +0900)
committermyoungwon oh <ohmyoungwon@gmail.com>
Wed, 25 Feb 2026 12:41:12 +0000 (21:41 +0900)
Signed-off-by: Myoungwon Oh <ohmyoungwon@gmail.com>
src/crimson/os/seastore/omap_manager/log/log_manager.cc
src/test/crimson/seastore/test_seastore.cc

index dc14b9f65dae043b0dd6443d628abe636ec5cfbe..73178502c41dc7ab7cad7c72268df25e98264959 100644 (file)
@@ -824,21 +824,17 @@ LogManager::omap_iterate(
 
   std::string s = start_from.seek_position;
   std::map<std::string, bufferlist> kvs;
-  if (start_from.seek_type == ObjectStore::omap_iter_seek_t::LOWER_BOUND) {
-    co_await find_kvs(t, log_root.addr, std::optional<std::string>(s),
-      std::optional<std::string>(std::nullopt), kvs);
-    co_await find_kvs(t,
-      co_await get_dup_addr_from_root(t, log_root.addr),
-      std::optional<std::string>(s),
-      std::optional<std::string>(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::string>(std::nullopt),
-      std::optional<std::string>(s), kvs);
-    co_await find_kvs(t, 
-      co_await get_dup_addr_from_root(t, log_root.addr),
-      std::optional<std::string>(std::nullopt),
-      std::optional<std::string>(s), kvs);
+  co_await find_kvs(t, log_root.addr, std::optional<std::string>(s),
+    std::optional<std::string>(std::nullopt), kvs);
+  co_await find_kvs(t,
+    co_await get_dup_addr_from_root(t, log_root.addr),
+    std::optional<std::string>(s),
+    std::optional<std::string>(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;
index 2185d54033c65acc6d6fa73652f748ebc8a4f1b1..07a2ea9ce0d58d00e97c0e15c96115fd8dea72e8 100644 (file)
@@ -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);