Skip to content

Commit 0e6e218

Browse files
committed
crimson/os/seastore/omap_manager: do binary search on omap nodes
Signed-off-by: Xuehan Xu <[email protected]>
1 parent b48556d commit 0e6e218

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
@@ -495,8 +495,11 @@ OMapInnerNode::merge_entry(
495495
OMapInnerNode::internal_iterator_t
496496
OMapInnerNode::get_containing_child(const std::string &key)
497497
{
498-
auto iter = std::find_if(iter_begin(), iter_end(),
499-
[&key](auto it) { return it.contains(key); });
498+
auto iter = string_lower_bound(key);
499+
if (iter == iter_end() || (iter != iter_begin() && iter.get_key() > key)) {
500+
iter--;
501+
}
502+
assert(iter.contains(key));
500503
return iter;
501504
}
502505

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)