bool operator>=(const Cursor& o) const { return (int)compare_to(o) >= 0; }
bool operator<(const Cursor& o) const { return (int)compare_to(o) < 0; }
bool operator<=(const Cursor& o) const { return (int)compare_to(o) <= 0; }
- bool operator==(const Cursor& o) const { return (int)compare_to(o) != 0; }
- bool operator!=(const Cursor& o) const { return (int)compare_to(o) == 0; }
+ bool operator==(const Cursor& o) const { return (int)compare_to(o) == 0; }
+ bool operator!=(const Cursor& o) const { return (int)compare_to(o) != 0; }
btree_future<Cursor> get_next(Transaction& t) {
assert(!is_end());
#ifndef NDEBUG
auto [key, value] = kv_iter.get_kv();
Values::validate_cursor(cursor, key, value);
- return tree->lower_bound(t, key
+ return tree->find(t, key
).safe_then([this, cursor](auto cursor_) mutable {
+ assert(!cursor_.is_end());
auto [key, value] = kv_iter.get_kv();
ceph_assert(cursor_.get_ghobj() == key);
ceph_assert(cursor_.value() == cursor.value());
assert(c_iter != cursors->end());
auto [k, v] = kv_iter.get_kv();
// validate values in tree keep intact
- return tree->lower_bound(t, k).safe_then([this, &c_iter](auto cursor) {
+ return tree->find(t, k).safe_then([this, &c_iter](auto cursor) {
auto [k, v] = kv_iter.get_kv();
Values::validate_cursor(cursor, k, v);
// validate values in cursors keep intact
auto iter = kvs.begin();
while (!iter.is_end()) {
auto [k, v] = iter.get_kv();
- auto cursor = tree->lower_bound(t, k).unsafe_get0();
+ auto cursor = tree->find(t, k).unsafe_get0();
Values::validate_cursor(cursor, k, v);
++iter;
}
ceph_assert(cursor.get_ghobj() == key);
Values::initialize_cursor(t, cursor, value);
insert_history.emplace_back(key, value, cursor);
- auto cursor_ = tree.lower_bound(t, key).unsafe_get0();
+ auto cursor_ = tree.find(t, key).unsafe_get0();
+ ceph_assert(cursor_ != tree.end());
ceph_assert(cursor_.value() == cursor.value());
Values::validate_cursor(cursor_, key, value);
return cursor.value();
for (auto& [k, v, c] : insert_history) {
// validate values in tree keep intact
- auto cursor = tree.lower_bound(t, k).unsafe_get0();
+ auto cursor = tree.find(t, k).unsafe_get0();
+ EXPECT_NE(cursor, tree.end());
Values::validate_cursor(cursor, k, v);
// validate values in cursors keep intact
Values::validate_cursor(c, k, v);
EXPECT_EQ(tree_clone.height(t_clone).unsafe_get0(), 2);
for (auto& [k, v, c] : insert_history) {
- auto result = tree_clone.lower_bound(t_clone, k).unsafe_get0();
+ auto result = tree_clone.find(t_clone, k).unsafe_get0();
+ EXPECT_NE(result, tree_clone.end());
Values::validate_cursor(result, k, v);
}
- auto result = tree_clone.lower_bound(t_clone, key).unsafe_get0();
+ auto result = tree_clone.find(t_clone, key).unsafe_get0();
+ EXPECT_NE(result, tree_clone.end());
Values::validate_cursor(result, key, value);
EXPECT_TRUE(last_split.match(expected));
});