]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/omap_manager: do binary search on omap nodes
authorXuehan Xu <xuxuehan@qianxin.com>
Tue, 18 Feb 2025 04:05:47 +0000 (12:05 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Thu, 27 Feb 2025 06:02:19 +0000 (14:02 +0800)
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc
src/crimson/os/seastore/omap_manager/btree/string_kv_node_layout.h

index df97f394a0d12ba6ffdcc123b2403ca5a1420b15..9db3d09440a91567304e3980ee4a04e3ca0a9ef3 100644 (file)
@@ -495,8 +495,11 @@ OMapInnerNode::merge_entry(
 OMapInnerNode::internal_iterator_t
 OMapInnerNode::get_containing_child(const std::string &key)
 {
-  auto iter = std::find_if(iter_begin(), iter_end(),
-       [&key](auto it) { return it.contains(key); });
+  auto iter = string_lower_bound(key);
+  if (iter == iter_end() || (iter != iter_begin() && iter.get_key() > key)) {
+    iter--;
+  }
+  assert(iter.contains(key));
   return iter;
 }
 
index 3825ebef145534fd62eae7052f49ef679af1b4f9..93a9b8dedb154ed561d88903b817ec33b7ad2074 100644 (file)
@@ -597,13 +597,11 @@ public:
   }
 
   const_iterator find_string_key(std::string_view str) const {
-    auto ret = iter_begin();
-    for (; ret != iter_end(); ++ret) {
-     std::string s = ret->get_key();
-      if (s == str)
-        break;
+    auto iter = string_lower_bound(str);
+    if (iter.get_key() == str) {
+      return iter;
     }
-    return ret;
+    return iter_cend();
   }
 
   iterator find_string_key(std::string_view str) {