using get_phy_tree_root_node_ret =
std::pair<bool, get_child_iertr::future<CachedExtentRef>>;
-template <typename T, typename key_t>
+template <typename T>
const get_phy_tree_root_node_ret get_phy_tree_root_node(
const RootBlockRef &root_block,
- op_context_t<key_t> c);
+ op_context_t c);
template <typename T>
Transaction::tree_stats_t& get_tree_stats(Transaction &t);
iterator &operator=(iterator &&) = default;
iterator_fut next(
- op_context_t<node_key_t> c,
+ op_context_t c,
mapped_space_visitor_t *visitor=nullptr) const
{
assert_valid();
}
- iterator_fut prev(op_context_t<node_key_t> c) const
+ iterator_fut prev(op_context_t c) const
{
assert_valid();
assert(!is_begin());
return leaf.pos == 0;
}
- std::unique_ptr<pin_t> get_pin(op_context_t<node_key_t> ctx) const {
+ std::unique_ptr<pin_t> get_pin(op_context_t ctx) const {
assert(!is_end());
auto val = get_val();
auto key = get_key();
using handle_boundary_ertr = base_iertr;
using handle_boundary_ret = handle_boundary_ertr::future<>;
handle_boundary_ret handle_boundary(
- op_context_t<node_key_t> c,
+ op_context_t c,
mapped_space_visitor_t *visitor)
{
assert(at_boundary());
TreeRootLinker<RootBlock, T>::link_root(root_block, root_node.get());
}
- auto get_root_node(op_context_t<node_key_t> c) const {
+ auto get_root_node(op_context_t c) const {
return get_phy_tree_root_node<self_type>(root_block, c);
}
/// mkfs
using mkfs_ret = phy_tree_root_t;
- static mkfs_ret mkfs(RootBlockRef &root_block, op_context_t<node_key_t> c) {
+ static mkfs_ret mkfs(RootBlockRef &root_block, op_context_t c) {
assert(root_block->is_mutation_pending());
auto root_leaf = c.cache.template alloc_new_non_data_extent<leaf_node_t>(
c.trans,
* @return least iterator >= key
*/
iterator_fut lower_bound(
- op_context_t<node_key_t> c,
+ op_context_t c,
node_key_t addr,
mapped_space_visitor_t *visitor=nullptr,
depth_t min_depth = 1) const
* @return least iterator > key
*/
iterator_fut upper_bound(
- op_context_t<node_key_t> c,
+ op_context_t c,
node_key_t addr
) const {
return lower_bound(
* @return least iterator i s.t. i.get_key() + i.get_val().len > key
*/
iterator_fut upper_bound_right(
- op_context_t<node_key_t> c,
+ op_context_t c,
node_key_t addr) const
{
return lower_bound(
});
}
- iterator_fut begin(op_context_t<node_key_t> c) const {
+ iterator_fut begin(op_context_t c) const {
return lower_bound(c, min_max_t<node_key_t>::min);
}
- iterator_fut end(op_context_t<node_key_t> c) const {
+ iterator_fut end(op_context_t c) const {
return upper_bound(c, min_max_t<node_key_t>::max);
}
template <typename child_node_t, typename node_t, bool lhc = leaf_has_children,
typename std::enable_if<lhc, int>::type = 0>
void check_node(
- op_context_t<node_key_t> c,
+ op_context_t c,
TCachedExtentRef<node_t> node)
{
for (auto i : *node) {
template <bool lhc = leaf_has_children,
typename std::enable_if<lhc, int>::type = 0>
check_child_trackers_ret check_child_trackers(
- op_context_t<node_key_t> c) {
+ op_context_t c) {
mapped_space_visitor_t checker = [c, this](
paddr_t,
node_key_t,
seastar::stop_iteration>;
template <typename F>
static base_iertr::future<> iterate_repeat(
- op_context_t<node_key_t> c,
+ op_context_t c,
iterator_fut &&iter_fut,
F &&f,
mapped_space_visitor_t *visitor=nullptr) {
using insert_iertr = base_iertr;
using insert_ret = insert_iertr::future<std::pair<iterator, bool>>;
insert_ret insert(
- op_context_t<node_key_t> c,
+ op_context_t c,
iterator iter,
node_key_t laddr,
node_val_t val
}
insert_ret insert(
- op_context_t<node_key_t> c,
+ op_context_t c,
node_key_t laddr,
node_val_t val) {
return lower_bound(
using update_iertr = base_iertr;
using update_ret = update_iertr::future<iterator>;
update_ret update(
- op_context_t<node_key_t> c,
+ op_context_t c,
iterator iter,
node_val_t val)
{
using remove_iertr = base_iertr;
using remove_ret = remove_iertr::future<>;
remove_ret remove(
- op_context_t<node_key_t> c,
+ op_context_t c,
iterator iter)
{
LOG_PREFIX(FixedKVBtree::remove);
using init_cached_extent_iertr = base_iertr;
using init_cached_extent_ret = init_cached_extent_iertr::future<bool>;
init_cached_extent_ret init_cached_extent(
- op_context_t<node_key_t> c,
+ op_context_t c,
CachedExtentRef e)
{
assert(!e->is_logical());
using get_leaf_if_live_iertr = base_iertr;
using get_leaf_if_live_ret = get_leaf_if_live_iertr::future<CachedExtentRef>;
get_leaf_if_live_ret get_leaf_if_live(
- op_context_t<node_key_t> c,
+ op_context_t c,
paddr_t addr,
node_key_t laddr,
extent_len_t len)
using get_internal_if_live_iertr = base_iertr;
using get_internal_if_live_ret = get_internal_if_live_iertr::future<CachedExtentRef>;
get_internal_if_live_ret get_internal_if_live(
- op_context_t<node_key_t> c,
+ op_context_t c,
paddr_t addr,
node_key_t laddr,
extent_len_t len)
using rewrite_extent_iertr = base_iertr;
using rewrite_extent_ret = rewrite_extent_iertr::future<>;
rewrite_extent_ret rewrite_extent(
- op_context_t<node_key_t> c,
+ op_context_t c,
CachedExtentRef e) {
LOG_PREFIX(FixedKVBtree::rewrite_extent);
assert(is_lba_backref_node(e->get_type()));
template <typename T>
requires std::is_same_v<internal_node_t, T> || std::is_same_v<leaf_node_t, T>
update_internal_mapping_ret update_internal_mapping(
- op_context_t<node_key_t> c,
+ op_context_t c,
depth_t depth,
node_key_t laddr,
paddr_t old_addr,
using get_internal_node_iertr = base_iertr;
using get_internal_node_ret = get_internal_node_iertr::future<InternalNodeRef>;
static get_internal_node_ret get_internal_node(
- op_context_t<node_key_t> c,
+ op_context_t c,
depth_t depth,
paddr_t offset,
node_key_t begin,
using get_leaf_node_iertr = base_iertr;
using get_leaf_node_ret = get_leaf_node_iertr::future<LeafNodeRef>;
static get_leaf_node_ret get_leaf_node(
- op_context_t<node_key_t> c,
+ op_context_t c,
paddr_t offset,
node_key_t begin,
node_key_t end,
using lookup_root_iertr = base_iertr;
using lookup_root_ret = lookup_root_iertr::future<>;
lookup_root_ret lookup_root(
- op_context_t<node_key_t> c,
+ op_context_t c,
iterator &iter,
mapped_space_visitor_t *visitor) const {
LOG_PREFIX(FixedKVBtree::lookup_root);
using lookup_internal_level_ret = lookup_internal_level_iertr::future<>;
template <typename F>
static lookup_internal_level_ret lookup_internal_level(
- op_context_t<node_key_t> c,
+ op_context_t c,
depth_t depth,
iterator &iter,
F &f,
using lookup_leaf_ret = lookup_leaf_iertr::future<>;
template <typename F>
static lookup_internal_level_ret lookup_leaf(
- op_context_t<node_key_t> c,
+ op_context_t c,
iterator &iter,
F &f,
mapped_space_visitor_t *visitor
using lookup_depth_range_ret = lookup_depth_range_iertr::future<>;
template <typename LI, typename LL>
static lookup_depth_range_ret lookup_depth_range(
- op_context_t<node_key_t> c, ///< [in] context
+ op_context_t c, ///< [in] context
iterator &iter, ///< [in,out] iterator to populate
depth_t from, ///< [in] from inclusive
depth_t to, ///< [in] to exclusive, (to <= from, to == from is a noop)
using lookup_ret = lookup_iertr::future<iterator>;
template <typename LI, typename LL>
lookup_ret lookup(
- op_context_t<node_key_t> c,
+ op_context_t c,
LI &&lookup_internal,
LL &&lookup_leaf,
depth_t min_depth,
using find_insertion_iertr = base_iertr;
using find_insertion_ret = find_insertion_iertr::future<>;
static find_insertion_ret find_insertion(
- op_context_t<node_key_t> c,
+ op_context_t c,
node_key_t laddr,
iterator &iter)
{
using handle_split_iertr = base_iertr;
using handle_split_ret = handle_split_iertr::future<>;
handle_split_ret handle_split(
- op_context_t<node_key_t> c,
+ op_context_t c,
iterator &iter)
{
LOG_PREFIX(FixedKVBtree::handle_split);
using handle_merge_iertr = base_iertr;
using handle_merge_ret = handle_merge_iertr::future<>;
handle_merge_ret handle_merge(
- op_context_t<node_key_t> c,
+ op_context_t c,
iterator &iter)
{
LOG_PREFIX(FixedKVBtree::handle_merge);
template <typename NodeType,
std::enable_if_t<std::is_same_v<NodeType, leaf_node_t>, int> = 0>
base_iertr::future<typename NodeType::Ref> get_node(
- op_context_t<node_key_t> c,
+ op_context_t c,
depth_t depth,
paddr_t addr,
node_key_t begin,
template <typename NodeType,
std::enable_if_t<std::is_same_v<NodeType, internal_node_t>, int> = 0>
base_iertr::future<typename NodeType::Ref> get_node(
- op_context_t<node_key_t> c,
+ op_context_t c,
depth_t depth,
paddr_t addr,
node_key_t begin,
template <typename NodeType>
handle_merge_ret merge_level(
- op_context_t<node_key_t> c,
+ op_context_t c,
depth_t depth,
node_position_t<internal_node_t> &parent_pos,
node_position_t<NodeType> &pos)
template <
typename tree_type_t,
- typename node_key_t,
typename F,
std::enable_if_t<is_fixed_kv_tree<tree_type_t>::value, int> = 0>
auto with_btree(
Cache &cache,
- op_context_t<node_key_t> c,
+ op_context_t c,
F &&f) {
return cache.get_root(
c.trans
template <
typename tree_type_t,
typename State,
- typename node_key_t,
typename F,
std::enable_if_t<is_fixed_kv_tree<tree_type_t>::value, int> = 0>
auto with_btree_state(
Cache &cache,
- op_context_t<node_key_t> c,
+ op_context_t c,
State &&init,
F &&f) {
return seastar::do_with(
template <
typename tree_type_t,
typename State,
- typename node_key_t,
typename F,
std::enable_if_t<is_fixed_kv_tree<tree_type_t>::value, int> = 0>
auto with_btree_state(
Cache &cache,
- op_context_t<node_key_t> c,
+ op_context_t c,
F &&f) {
return crimson::os::seastore::with_btree_state<tree_type_t, State>(
cache, c, State{}, std::forward<F>(f));
template <
typename tree_type_t,
typename Ret,
- typename node_key_t,
typename F>
auto with_btree_ret(
Cache &cache,
- op_context_t<node_key_t> c,
+ op_context_t c,
F &&f) {
return with_btree_state<tree_type_t, Ret>(
cache,