return on_found(child->template cast<internal_node_t>());
});
}
+ c.cache.account_absent_access(c.trans.get_src());
auto child_pos = v.get_child_pos();
auto next_iter = node_iter + 1;
return on_found(child->template cast<leaf_node_t>());
});
}
+ c.cache.account_absent_access(c.trans.get_src());
auto child_pos = v.get_child_pos();
auto next_iter = node_iter + 1;
return do_merge(child->template cast<NodeType>());
});
}
+ c.cache.account_absent_access(c.trans.get_src());
auto child_pos = v.get_child_pos();
return get_node<NodeType>(
return t.root;
}
- void account_absent_access(Transaction::src_t src) final {
+ void account_absent_access(Transaction::src_t src) {
++(get_by_src(stats.cache_absent_by_src, src));
++stats.access.cache_absent;
}
: get_key();
auto v = p.template get_child<LogicalChildNode>(ctx.trans, ctx.cache, pos, k);
if (!v.has_child()) {
+ ctx.cache.account_absent_access(ctx.trans.get_src());
this->child_pos = v.get_child_pos();
}
return v;
return ext->template cast<T>();
});
}
- virtual void account_absent_access(Transaction::src_t) = 0;
virtual bool is_viewable_extent_data_stable(Transaction &, CachedExtentRef) = 0;
virtual bool is_viewable_extent_stable(Transaction &, CachedExtentRef) = 0;
virtual ~ExtentTransViewRetriever() {}
return etvr.get_extent_viewable_by_trans<ChildT>(
t, static_cast<ChildT*>(child));
} else {
- etvr.account_absent_access(t.get_src());
return child_pos_t<T>(&sparent, spos);
}
} else {
- etvr.account_absent_access(t.get_src());
return child_pos_t<T>(&me, pos);
}
}