Skip to content

Commit 6485191

Browse files
authored
Merge pull request ceph#61866 from xxhdx1985126/wip-seastore-omap-binary-search
crimson/os/seastore/omap_manager: do binary search on omap nodes Reviewed-by: Yingxin Cheng <[email protected]>
2 parents 44230ea + 0e6e218 commit 6485191

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.cc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -496,8 +496,11 @@ OMapInnerNode::merge_entry(
496496
OMapInnerNode::internal_iterator_t
497497
OMapInnerNode::get_containing_child(const std::string &key)
498498
{
499-
auto iter = std::find_if(iter_begin(), iter_end(),
500-
[&key](auto it) { return it.contains(key); });
499+
auto iter = string_lower_bound(key);
500+
if (iter == iter_end() || (iter != iter_begin() && iter.get_key() > key)) {
501+
iter--;
502+
}
503+
assert(iter.contains(key));
501504
return iter;
502505
}
503506

src/crimson/os/seastore/omap_manager/btree/string_kv_node_layout.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -597,13 +597,11 @@ class StringKVInnerNodeLayout {
597597
}
598598

599599
const_iterator find_string_key(std::string_view str) const {
600-
auto ret = iter_begin();
601-
for (; ret != iter_end(); ++ret) {
602-
std::string s = ret->get_key();
603-
if (s == str)
604-
break;
600+
auto iter = string_lower_bound(str);
601+
if (iter.get_key() == str) {
602+
return iter;
605603
}
606-
return ret;
604+
return iter_cend();
607605
}
608606

609607
iterator find_string_key(std::string_view str) {

0 commit comments

Comments
 (0)