libfoedus-core
FOEDUS Core Library
|
Common base of MasstreeIntermediatePage and MasstreeBorderPage. More...
Common base of MasstreeIntermediatePage and MasstreeBorderPage.
Do NOT use sizeof on this class because it is smaller than kPageSize. To be a base class of two page types, this class defines only the common properties. Also, as usual, no virtual methods! We just reinterpret byte arrays.
Definition at line 66 of file masstree_page_impl.hpp.
#include <masstree_page_impl.hpp>
Public Member Functions | |
MasstreePage ()=delete | |
MasstreePage (const MasstreePage &other)=delete | |
MasstreePage & | operator= (const MasstreePage &other)=delete |
PageHeader & | header () |
const PageHeader & | header () const |
VolatilePagePointer | get_volatile_page_id () const |
SnapshotPagePointer | get_snapshot_page_id () const |
bool | is_border () const __attribute__((always_inline)) |
bool | is_empty_range () const __attribute__((always_inline)) |
An empty-range page, either intermediate or border, never has any entries. More... | |
KeySlice | get_low_fence () const __attribute__((always_inline)) |
KeySlice | get_high_fence () const __attribute__((always_inline)) |
bool | is_high_fence_supremum () const __attribute__((always_inline)) |
bool | is_low_fence_infimum () const __attribute__((always_inline)) |
bool | is_layer_root () const __attribute__((always_inline)) |
KeySlice | get_foster_fence () const __attribute__((always_inline)) |
bool | is_foster_minor_null () const __attribute__((always_inline)) |
bool | is_foster_major_null () const __attribute__((always_inline)) |
VolatilePagePointer | get_foster_minor () const __attribute__((always_inline)) |
VolatilePagePointer | get_foster_major () const __attribute__((always_inline)) |
void | set_foster_twin (VolatilePagePointer minor, VolatilePagePointer major) |
void | install_foster_twin (VolatilePagePointer minor, VolatilePagePointer major, KeySlice foster_fence) |
bool | within_fences (KeySlice slice) const __attribute__((always_inline)) |
bool | within_foster_minor (KeySlice slice) const __attribute__((always_inline)) |
bool | within_foster_major (KeySlice slice) const __attribute__((always_inline)) |
bool | has_foster_child () const __attribute__((always_inline)) |
uint8_t | get_layer () const __attribute__((always_inline)) |
Layer-0 stores the first 8 byte slice, Layer-1 next 8 byte... More... | |
uint8_t | get_btree_level () const __attribute__((always_inline)) |
used only in masstree. More... | |
SlotIndex | get_key_count () const __attribute__((always_inline)) |
physical key count (those keys might be deleted) in this page. More... | |
void | set_key_count (SlotIndex count) __attribute__((always_inline)) |
void | increment_key_count () __attribute__((always_inline)) |
void | prefetch_general () const __attribute__((always_inline)) |
prefetch upto keys/separators, whether this page is border or interior. More... | |
const PageVersion & | get_version () const __attribute__((always_inline)) |
PageVersion & | get_version () __attribute__((always_inline)) |
const PageVersion * | get_version_address () const __attribute__((always_inline)) |
PageVersion * | get_version_address () __attribute__((always_inline)) |
xct::McsWwLock * | get_lock_address () __attribute__((always_inline)) |
bool | is_locked () const __attribute__((always_inline)) |
bool | is_moved () const __attribute__((always_inline)) |
bool | is_retired () const __attribute__((always_inline)) |
void | set_moved () __attribute__((always_inline)) |
void | set_retired () __attribute__((always_inline)) |
void | release_pages_recursive_common (const memory::GlobalVolatilePageResolver &page_resolver, memory::PageReleaseBatch *batch) |
void | set_foster_major_offset_unsafe (memory::PagePoolOffset offset) __attribute__((always_inline)) |
As the name suggests, this should be used only by composer. More... | |
void | set_high_fence_unsafe (KeySlice high_fence) __attribute__((always_inline)) |
As the name suggests, this should be used only by composer. More... | |
Protected Member Functions | |
void | initialize_volatile_common (StorageId storage_id, VolatilePagePointer page_id, PageType page_type, uint8_t layer, uint8_t level, KeySlice low_fence, KeySlice high_fence) |
void | initialize_snapshot_common (StorageId storage_id, SnapshotPagePointer page_id, PageType page_type, uint8_t layer, uint8_t level, KeySlice low_fence, KeySlice high_fence) |
Protected Attributes | |
PageHeader | header_ |
KeySlice | low_fence_ |
Inclusive low fence of this page. More... | |
KeySlice | high_fence_ |
Inclusive high fence of this page. More... | |
KeySlice | foster_fence_ |
Inclusive low_fence of foster child. More... | |
VolatilePagePointer | foster_twin_ [2] |
Points to foster children, or tentative child pages. More... | |
Friends | |
std::ostream & | operator<< (std::ostream &o, const MasstreePage &v) |
defined in masstree_page_debug.cpp. More... | |
|
delete |
|
delete |
|
inline |
used only in masstree.
Logical B-tree level of the page. Border pages are always level-0 whether they are foster-child or not. Intermediate pages right above border pages are level-1, their parents are level-2, ... Foster-child of an intermediate page has the same level as its foster parent. Again, this is a logical level, not physical.
Our implementation of masstree might have unbalanced sub-trees. In that case, an interemediate page's level is max(child's level) + 1. This imbalance can happen only at the root page of the first layer because of how the masstree composer work. Other than that, all B-tree nodes are balanced.
Definition at line 146 of file masstree_page_impl.hpp.
References header_, and foedus::storage::PageHeader::masstree_in_layer_level_.
Referenced by foedus::storage::masstree::MasstreeComposer::construct_root(), foedus::storage::masstree::MasstreeComposer::drop_root_volatile(), foedus::storage::masstree::grow_case_b_common(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer_recurse(), foedus::storage::masstree::SplitIntermediate::split_impl_no_error(), foedus::storage::masstree::verify_page_basic(), and foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_intermediate().
|
inline |
Definition at line 109 of file masstree_page_impl.hpp.
References foster_fence_.
Referenced by foedus::storage::masstree::Adopt::adopt_case_a(), foedus::storage::masstree::Adopt::adopt_case_b(), foedus::storage::masstree::SplitIntermediate::decide_strategy(), foedus::storage::masstree::describe_masstree_page_common(), foedus::storage::masstree::grow_case_a_common(), foedus::storage::masstree::grow_case_b_common(), foedus::storage::masstree::GrowFirstLayerRoot::run(), foedus::storage::masstree::Adopt::run(), foedus::storage::masstree::GrowNonFirstLayerRoot::run(), foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_border(), and foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_intermediate().
|
inline |
Definition at line 113 of file masstree_page_impl.hpp.
References foster_twin_.
Referenced by foedus::storage::masstree::Adopt::adopt_case_a(), foedus::storage::masstree::Adopt::adopt_case_b(), foedus::storage::masstree::SplitIntermediate::decide_strategy(), foedus::storage::masstree::describe_masstree_page_common(), foedus::storage::masstree::grow_case_a_common(), foedus::storage::masstree::grow_case_b_common(), foedus::storage::masstree::MasstreeStoragePimpl::prefetch_pages_normalized_recurse(), foedus::storage::masstree::MasstreeStoragePimpl::reserve_record(), foedus::storage::masstree::MasstreeStoragePimpl::reserve_record_normalized(), foedus::storage::masstree::verify_page_basic(), foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_border(), and foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_intermediate().
|
inline |
Definition at line 112 of file masstree_page_impl.hpp.
References foster_twin_.
Referenced by foedus::storage::masstree::Adopt::adopt_case_a(), foedus::storage::masstree::Adopt::adopt_case_b(), foedus::storage::masstree::SplitIntermediate::decide_strategy(), foedus::storage::masstree::describe_masstree_page_common(), foedus::storage::masstree::grow_case_a_common(), foedus::storage::masstree::grow_case_b_common(), foedus::storage::masstree::MasstreeStoragePimpl::prefetch_pages_normalized_recurse(), foedus::storage::masstree::MasstreeStoragePimpl::reserve_record(), foedus::storage::masstree::MasstreeStoragePimpl::reserve_record_normalized(), foedus::storage::masstree::verify_page_basic(), foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_border(), and foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_intermediate().
|
inline |
Definition at line 99 of file masstree_page_impl.hpp.
References high_fence_.
Referenced by foedus::storage::masstree::Adopt::adopt_case_a(), foedus::storage::masstree::MasstreeIntermediatePage::append_pointer_snapshot(), foedus::storage::masstree::SplitIntermediate::decide_strategy(), foedus::storage::masstree::describe_masstree_page_common(), foedus::storage::masstree::MasstreeIntermediatePage::extract_separators_common(), foedus::storage::masstree::MasstreeStoragePimpl::fatify_first_root_double(), foedus::storage::masstree::MasstreeStoragePimpl::get_first_root(), foedus::storage::masstree::MasstreeIntermediatePointerIterator::get_high_key(), foedus::storage::masstree::grow_case_a_common(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer_recurse(), foedus::storage::masstree::GrowFirstLayerRoot::run(), foedus::storage::masstree::Adopt::run(), foedus::storage::masstree::GrowNonFirstLayerRoot::run(), foedus::storage::masstree::SplitBorder::run(), and foedus::storage::masstree::verify_page_basic().
|
inline |
physical key count (those keys might be deleted) in this page.
Definition at line 148 of file masstree_page_impl.hpp.
References header_, and foedus::storage::PageHeader::key_count_.
Referenced by foedus::storage::masstree::Adopt::adopt_case_b(), foedus::storage::masstree::MasstreeIntermediatePage::append_minipage_snapshot(), foedus::storage::masstree::MasstreeBorderPage::append_next_layer_snapshot(), foedus::storage::masstree::MasstreeIntermediatePage::append_pointer_snapshot(), foedus::storage::masstree::MasstreeBorderPage::assert_entries_impl(), foedus::storage::masstree::MasstreeBorderPage::available_space(), foedus::storage::masstree::MasstreeBorderPage::can_accomodate_snapshot(), foedus::storage::masstree::MasstreeComposer::construct_root(), foedus::storage::masstree::count_children_approximate(), foedus::storage::masstree::MasstreeStoragePimpl::debugout_single_thread_recurse(), foedus::storage::masstree::SplitBorder::decide_strategy(), foedus::storage::masstree::MasstreeIntermediatePage::extract_separators_common(), foedus::storage::masstree::MasstreeStoragePimpl::fatify_first_root_double(), foedus::storage::masstree::MasstreeBorderPage::find_key(), foedus::storage::masstree::MasstreeBorderPage::find_key_for_snapshot(), foedus::storage::masstree::MasstreeIntermediatePage::find_minipage(), foedus::storage::masstree::MasstreeBorderPage::get_new_slot(), foedus::storage::masstree::MasstreeBorderPage::get_slot(), foedus::storage::masstree::MasstreeStoragePimpl::hcc_reset_all_temperature_stat_recurse(), foedus::storage::masstree::MasstreeBorderPage::initialize_layer_root(), initialize_snapshot_common(), initialize_volatile_common(), foedus::storage::masstree::MasstreeIntermediatePage::is_full_snapshot(), foedus::storage::masstree::MasstreeIntermediatePointerIterator::is_valid(), foedus::storage::masstree::MasstreeStoragePimpl::locate_record_normalized(), foedus::storage::masstree::SplitBorder::lock_existing_records(), foedus::storage::masstree::SplitIntermediate::migrate_pointers(), foedus::storage::masstree::SplitBorder::migrate_records(), foedus::storage::masstree::operator<<(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_next_layer(), foedus::storage::masstree::MasstreeStoragePimpl::prefetch_pages_normalized_recurse(), foedus::storage::masstree::MasstreeIntermediatePage::release_pages_recursive(), foedus::storage::masstree::MasstreeBorderPage::release_pages_recursive(), foedus::storage::masstree::MasstreeIntermediatePage::release_pages_recursive_parallel(), foedus::storage::masstree::MasstreeBorderPage::replace_next_layer_snapshot(), foedus::storage::masstree::MasstreeBorderPage::reserve_initially_next_layer(), foedus::storage::masstree::MasstreeStoragePimpl::reserve_record(), foedus::storage::masstree::MasstreeStoragePimpl::reserve_record_normalized(), foedus::storage::masstree::MasstreeBorderPage::reserve_record_space(), foedus::storage::masstree::SplitBorder::run(), foedus::storage::masstree::ReserveRecords::run(), foedus::storage::masstree::SplitIntermediate::split_impl_no_error(), foedus::storage::masstree::MasstreeBorderPage::track_moved_record(), foedus::storage::masstree::MasstreeBorderPage::track_moved_record_next_layer(), foedus::storage::masstree::MasstreeBorderPage::try_expand_record_in_page_physical(), foedus::storage::masstree::MasstreeIntermediatePage::verify_separators(), foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_border(), and foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_intermediate().
|
inline |
Layer-0 stores the first 8 byte slice, Layer-1 next 8 byte...
Definition at line 144 of file masstree_page_impl.hpp.
References header_, and foedus::storage::PageHeader::masstree_layer_.
Referenced by foedus::storage::masstree::MasstreeBorderPage::compare_key(), foedus::storage::masstree::MasstreeCursor::copy_combined_key(), foedus::storage::masstree::MasstreeCursor::copy_combined_key_part(), foedus::storage::masstree::MasstreeStoragePimpl::get_first_root(), foedus::storage::masstree::grow_case_b_common(), foedus::storage::masstree::MasstreeBorderPage::initialize_as_layer_root_physical(), foedus::storage::masstree::MasstreeBorderPage::ltgt_key(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_next_layer(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer_recurse(), foedus::storage::masstree::GrowFirstLayerRoot::run(), foedus::storage::masstree::SplitBorder::run(), foedus::storage::masstree::ReserveRecords::run(), foedus::storage::masstree::SplitIntermediate::split_impl_no_error(), foedus::storage::masstree::MasstreeBorderPage::track_moved_record_next_layer(), foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_border(), foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_intermediate(), foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_layer(), foedus::storage::masstree::MasstreeBorderPage::will_conflict(), and foedus::storage::masstree::MasstreeBorderPage::will_contain_next_layer().
|
inline |
Definition at line 166 of file masstree_page_impl.hpp.
References header_, foedus::storage::PageVersion::lock_, and foedus::storage::PageHeader::page_version_.
|
inline |
Definition at line 98 of file masstree_page_impl.hpp.
References low_fence_.
Referenced by foedus::storage::masstree::Adopt::adopt_case_a(), foedus::storage::masstree::MasstreeIntermediatePage::append_pointer_snapshot(), foedus::storage::masstree::SplitIntermediate::decide_strategy(), foedus::storage::masstree::describe_masstree_page_common(), foedus::storage::masstree::MasstreeIntermediatePage::extract_separators_common(), foedus::storage::masstree::MasstreeStoragePimpl::fatify_first_root_double(), foedus::storage::masstree::MasstreeStoragePimpl::find_border_physical(), foedus::storage::masstree::MasstreeStoragePimpl::get_first_root(), foedus::storage::masstree::MasstreeIntermediatePointerIterator::get_low_key(), foedus::storage::masstree::grow_case_a_common(), foedus::storage::masstree::operator<<(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_next_layer(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer_recurse(), foedus::storage::masstree::GrowFirstLayerRoot::run(), foedus::storage::masstree::Adopt::run(), foedus::storage::masstree::GrowNonFirstLayerRoot::run(), foedus::storage::masstree::SplitBorder::run(), foedus::storage::masstree::MasstreeBorderPage::track_moved_record_next_layer(), and foedus::storage::masstree::verify_page_basic().
|
inline |
Definition at line 79 of file masstree_page_impl.hpp.
References ASSERT_ND, header_, foedus::storage::PageHeader::page_id_, and foedus::storage::PageHeader::snapshot_.
|
inline |
Definition at line 162 of file masstree_page_impl.hpp.
References header_, and foedus::storage::PageHeader::page_version_.
Referenced by foedus::storage::masstree::MasstreeStoragePimpl::locate_record(), and foedus::storage::masstree::MasstreeStoragePimpl::locate_record_normalized().
|
inline |
Definition at line 163 of file masstree_page_impl.hpp.
References header_, and foedus::storage::PageHeader::page_version_.
|
inline |
Definition at line 164 of file masstree_page_impl.hpp.
References header_, and foedus::storage::PageHeader::page_version_.
Referenced by foedus::storage::masstree::Adopt::adopt_case_a(), foedus::storage::masstree::grow_case_a_common(), foedus::storage::masstree::MasstreeStoragePimpl::locate_record(), foedus::storage::masstree::MasstreeStoragePimpl::locate_record_normalized(), and foedus::storage::masstree::SplitBorder::run().
|
inline |
Definition at line 165 of file masstree_page_impl.hpp.
References header_, and foedus::storage::PageHeader::page_version_.
|
inline |
Definition at line 75 of file masstree_page_impl.hpp.
References ASSERT_ND, header_, foedus::storage::PageHeader::page_id_, and foedus::storage::PageHeader::snapshot_.
Referenced by foedus::storage::masstree::Adopt::adopt_case_a(), foedus::storage::masstree::Adopt::adopt_case_b(), foedus::storage::masstree::grow_case_a_common(), foedus::storage::masstree::grow_case_b_common(), foedus::storage::masstree::Adopt::run(), foedus::storage::masstree::GrowNonFirstLayerRoot::run(), foedus::storage::masstree::ReserveRecords::run(), and foedus::storage::masstree::SplitIntermediate::split_impl_no_error().
|
inline |
Definition at line 139 of file masstree_page_impl.hpp.
References header_, foedus::storage::PageVersion::is_moved(), and foedus::storage::PageHeader::page_version_.
Referenced by foedus::storage::masstree::MasstreeStoragePimpl::find_border_physical(), foedus::storage::masstree::MasstreeStoragePimpl::get_first_root(), foedus::storage::masstree::MasstreeStoragePimpl::prefetch_pages_normalized_recurse(), foedus::storage::masstree::MasstreeStoragePimpl::reserve_record(), foedus::storage::masstree::MasstreeStoragePimpl::reserve_record_normalized(), foedus::storage::masstree::SplitBorder::run(), foedus::storage::masstree::SplitIntermediate::run(), foedus::storage::masstree::MasstreeBorderPage::track_moved_record(), foedus::storage::masstree::verify_page_basic(), within_foster_major(), and within_foster_minor().
|
inline |
Definition at line 73 of file masstree_page_impl.hpp.
References header_.
Referenced by foedus::storage::masstree::Adopt::adopt_case_a(), foedus::storage::masstree::allocate_new_border_page(), foedus::storage::masstree::MasstreeBorderPage::append_next_layer_snapshot(), foedus::storage::masstree::MasstreeComposer::construct_root(), foedus::storage::masstree::SplitIntermediate::decide_strategy(), foedus::storage::masstree::MasstreeStoragePimpl::delete_general(), foedus::storage::masstree::describe_masstree_page_common(), foedus::storage::masstree::design_partition_first_parallel_recurse(), foedus::storage::masstree::MasstreeStoragePimpl::fatify_first_root_double(), foedus::storage::masstree::MasstreeStoragePimpl::get_first_root(), foedus::storage::masstree::grow_case_a_common(), foedus::storage::masstree::grow_case_b_common(), foedus::storage::masstree::MasstreeStoragePimpl::hcc_reset_all_temperature_stat_recurse(), foedus::storage::masstree::MasstreeStoragePimpl::increment_general(), foedus::storage::masstree::MasstreeStoragePimpl::insert_general(), foedus::storage::masstree::MasstreeStoragePimpl::locate_record(), foedus::storage::masstree::MasstreeStoragePimpl::locate_record_normalized(), foedus::storage::masstree::SplitBorder::lock_existing_records(), foedus::storage::masstree::MasstreeIntermediatePointerIterator::MasstreeIntermediatePointerIterator(), foedus::storage::masstree::MasstreeStoragePimpl::overwrite_general(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_next_layer(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer_recurse(), foedus::storage::masstree::MasstreeIntermediatePage::release_pages_recursive(), foedus::storage::masstree::MasstreeBorderPage::release_pages_recursive(), foedus::storage::masstree::MasstreeIntermediatePage::release_pages_recursive_parallel(), foedus::storage::masstree::MasstreeBorderPage::replace_next_layer_snapshot(), foedus::storage::masstree::MasstreeBorderPage::reserve_initially_next_layer(), foedus::storage::masstree::MasstreeBorderPage::reserve_record_space(), foedus::storage::masstree::Adopt::run(), foedus::storage::masstree::GrowNonFirstLayerRoot::run(), foedus::storage::masstree::SplitBorder::run(), foedus::storage::masstree::ReserveRecords::run(), foedus::storage::masstree::SplitIntermediate::split_impl_no_error(), foedus::storage::masstree::MasstreeBorderPage::track_moved_record(), foedus::storage::masstree::MasstreeBorderPage::track_moved_record_next_layer(), foedus::storage::masstree::MasstreeStoragePimpl::upsert_general(), and foedus::storage::masstree::verify_page_basic().
|
inline |
Definition at line 74 of file masstree_page_impl.hpp.
References header_.
|
inline |
Definition at line 150 of file masstree_page_impl.hpp.
References header_, and foedus::storage::PageHeader::increment_key_count().
Referenced by foedus::storage::masstree::Adopt::adopt_case_b(), and foedus::storage::masstree::ReserveRecords::run().
|
protected |
Definition at line 68 of file masstree_page_impl.cpp.
References ASSERT_ND, foster_fence_, foster_twin_, get_key_count(), header_, high_fence_, foedus::storage::PageHeader::init_snapshot(), foedus::storage::kMasstreeIntermediatePageType, low_fence_, foedus::storage::PageHeader::masstree_in_layer_level_, foedus::storage::PageHeader::masstree_layer_, and foedus::storage::VolatilePagePointer::word.
Referenced by foedus::storage::masstree::MasstreeIntermediatePage::initialize_snapshot_page(), and foedus::storage::masstree::MasstreeBorderPage::initialize_snapshot_page().
|
protected |
Definition at line 47 of file masstree_page_impl.cpp.
References ASSERT_ND, foster_fence_, foster_twin_, get_key_count(), header_, high_fence_, foedus::storage::PageHeader::init_volatile(), foedus::storage::kMasstreeIntermediatePageType, low_fence_, foedus::storage::PageHeader::masstree_in_layer_level_, foedus::storage::PageHeader::masstree_layer_, and foedus::storage::VolatilePagePointer::word.
Referenced by foedus::storage::masstree::MasstreeIntermediatePage::initialize_volatile_page(), and foedus::storage::masstree::MasstreeBorderPage::initialize_volatile_page().
|
inline |
Definition at line 118 of file masstree_page_impl.hpp.
References foster_fence_, and set_foster_twin().
Referenced by foedus::storage::masstree::SplitBorder::run(), and foedus::storage::masstree::SplitIntermediate::split_impl_no_error().
|
inline |
Definition at line 84 of file masstree_page_impl.hpp.
References ASSERT_ND, foedus::storage::PageHeader::get_page_type(), header_, foedus::storage::kMasstreeBorderPageType, and foedus::storage::kMasstreeIntermediatePageType.
Referenced by foedus::storage::masstree::as_border(), foedus::storage::masstree::as_intermediate(), foedus::storage::masstree::MasstreeComposer::construct_root(), foedus::storage::masstree::MasstreeStoragePimpl::debugout_single_thread_recurse(), foedus::storage::masstree::MasstreePartitioner::design_partition(), foedus::storage::masstree::design_partition_first_parallel_recurse(), foedus::storage::masstree::MasstreeIntermediatePage::extract_separators_common(), foedus::storage::masstree::MasstreeStoragePimpl::fatify_first_root_double(), foedus::storage::masstree::MasstreeStoragePimpl::hcc_reset_all_temperature_stat_recurse(), foedus::storage::masstree::operator<<(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_next_layer(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer_recurse(), foedus::storage::masstree::MasstreeStoragePimpl::prefetch_pages_normalized_recurse(), foedus::storage::masstree::GrowNonFirstLayerRoot::run(), foedus::storage::masstree::MasstreeCursor::Route::setup_order(), foedus::storage::masstree::MasstreeStoragePimpl::track_moved_record(), foedus::storage::masstree::MasstreeBorderPage::track_moved_record_next_layer(), foedus::storage::masstree::verify_page_basic(), foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread(), and foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_layer().
|
inline |
An empty-range page, either intermediate or border, never has any entries.
Such a page exists for short duration after a special page-split for record compaction/expansion and page restructuring. Such a page always appears as one of foster-twins: it will be never adopted to be a real child. Also guaranteed to not have any foster twins under it. Wan safely skip such a page while following foster twins.
Definition at line 97 of file masstree_page_impl.hpp.
References high_fence_, and low_fence_.
Referenced by foedus::storage::masstree::Adopt::adopt_case_a(), foedus::storage::masstree::grow_case_a_common(), foedus::storage::masstree::MasstreeIntermediatePointerIterator::MasstreeIntermediatePointerIterator(), foedus::storage::masstree::operator<<(), foedus::storage::masstree::MasstreeStoragePimpl::prefetch_pages_normalized_recurse(), foedus::storage::masstree::MasstreeIntermediatePage::release_pages_recursive(), foedus::storage::masstree::SplitBorder::run(), foedus::storage::masstree::SplitIntermediate::split_impl_no_error(), foedus::storage::masstree::MasstreeIntermediatePage::verify_separators(), and foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_intermediate().
|
inline |
Definition at line 111 of file masstree_page_impl.hpp.
References foster_twin_, and foedus::storage::VolatilePagePointer::is_null().
Referenced by foedus::storage::masstree::MasstreeBorderPage::track_moved_record(), and foedus::storage::masstree::verify_page_basic().
|
inline |
Definition at line 110 of file masstree_page_impl.hpp.
References foster_twin_, and foedus::storage::VolatilePagePointer::is_null().
Referenced by foedus::storage::masstree::MasstreeBorderPage::track_moved_record(), and foedus::storage::masstree::verify_page_basic().
|
inline |
Definition at line 100 of file masstree_page_impl.hpp.
References high_fence_, and foedus::storage::masstree::kSupremumSlice.
Referenced by foedus::storage::masstree::MasstreeIntermediatePage::append_pointer_snapshot(), foedus::storage::masstree::MasstreeStoragePimpl::find_border_physical(), is_layer_root(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_next_layer(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer_recurse(), foedus::storage::masstree::MasstreeBorderPage::track_moved_record_next_layer(), foedus::storage::masstree::verify_page_basic(), and within_fences().
|
inline |
Definition at line 106 of file masstree_page_impl.hpp.
References is_high_fence_supremum(), and is_low_fence_infimum().
Referenced by foedus::storage::masstree::GrowFirstLayerRoot::run(), and foedus::storage::masstree::GrowNonFirstLayerRoot::run().
|
inline |
Definition at line 168 of file masstree_page_impl.hpp.
References header_, foedus::storage::PageVersion::is_locked(), and foedus::storage::PageHeader::page_version_.
Referenced by foedus::storage::masstree::Adopt::adopt_case_a(), foedus::storage::masstree::MasstreeBorderPage::assert_entries_impl(), foedus::storage::masstree::SplitBorder::decide_strategy(), foedus::storage::masstree::SplitIntermediate::decide_strategy(), foedus::storage::masstree::MasstreeStoragePimpl::find_border_physical(), foedus::storage::masstree::grow_case_a_common(), foedus::storage::masstree::grow_case_b_common(), foedus::storage::masstree::MasstreeBorderPage::initialize_as_layer_root_physical(), foedus::storage::masstree::MasstreeBorderPage::initialize_layer_root(), foedus::storage::masstree::SplitBorder::lock_existing_records(), foedus::storage::masstree::SplitBorder::migrate_records(), foedus::storage::masstree::MasstreeBorderPage::reserve_initially_next_layer(), foedus::storage::masstree::MasstreeBorderPage::reserve_record_space(), foedus::storage::masstree::GrowFirstLayerRoot::run(), foedus::storage::masstree::GrowNonFirstLayerRoot::run(), foedus::storage::masstree::ReserveRecords::run(), foedus::storage::masstree::MasstreeBorderPage::try_expand_record_in_page_physical(), and foedus::storage::masstree::verify_page_basic().
|
inline |
Definition at line 103 of file masstree_page_impl.hpp.
References foedus::storage::masstree::kInfimumSlice, and low_fence_.
Referenced by is_layer_root().
|
inline |
Definition at line 169 of file masstree_page_impl.hpp.
References header_, foedus::storage::PageVersion::is_moved(), and foedus::storage::PageHeader::page_version_.
Referenced by foedus::storage::masstree::SplitIntermediate::decide_strategy(), foedus::storage::masstree::MasstreeStoragePimpl::fatify_first_root_double(), foedus::storage::masstree::MasstreeBorderPage::initialize_as_layer_root_physical(), foedus::storage::masstree::MasstreeIntermediatePage::release_pages_recursive(), foedus::storage::masstree::GrowFirstLayerRoot::run(), foedus::storage::masstree::Adopt::run(), foedus::storage::masstree::GrowNonFirstLayerRoot::run(), foedus::storage::masstree::ReserveRecords::run(), foedus::storage::masstree::MasstreeStoragePimpl::track_moved_record(), foedus::storage::masstree::MasstreeBorderPage::track_moved_record(), foedus::storage::masstree::MasstreeBorderPage::try_expand_record_in_page_physical(), foedus::storage::masstree::verify_page_basic(), foedus::storage::masstree::MasstreeIntermediatePage::verify_separators(), foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_border(), and foedus::storage::masstree::MasstreeStoragePimpl::verify_single_thread_intermediate().
|
inline |
Definition at line 170 of file masstree_page_impl.hpp.
References header_, foedus::storage::PageVersion::is_retired(), and foedus::storage::PageHeader::page_version_.
Referenced by foedus::storage::masstree::Adopt::adopt_case_b(), foedus::storage::masstree::MasstreeBorderPage::initialize_as_layer_root_physical(), foedus::storage::masstree::GrowFirstLayerRoot::run(), foedus::storage::masstree::Adopt::run(), foedus::storage::masstree::GrowNonFirstLayerRoot::run(), foedus::storage::masstree::ReserveRecords::run(), and foedus::storage::masstree::SplitIntermediate::run().
|
delete |
|
inline |
prefetch upto keys/separators, whether this page is border or interior.
Use this to prefetch a page that is not sure border or interior. Checking the page type itself has to read the header, so just do it conservatively. 4 cachelines too much? that's a different argument...
Definition at line 158 of file masstree_page_impl.hpp.
References foedus::assorted::prefetch_cachelines().
Referenced by foedus::storage::masstree::MasstreeStoragePimpl::find_border_physical(), and foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_next_layer().
void foedus::storage::masstree::MasstreePage::release_pages_recursive_common | ( | const memory::GlobalVolatilePageResolver & | page_resolver, |
memory::PageReleaseBatch * | batch | ||
) |
Definition at line 164 of file masstree_page_impl.cpp.
References ASSERT_ND, foedus::storage::PageHeader::get_page_type(), header_, foedus::storage::kMasstreeBorderPageType, foedus::storage::kMasstreeIntermediatePageType, foedus::storage::masstree::MasstreeIntermediatePage::release_pages_recursive(), and foedus::storage::masstree::MasstreeBorderPage::release_pages_recursive().
Referenced by foedus::storage::masstree::MasstreeIntermediatePage::release_pages_recursive(), foedus::storage::masstree::MasstreeBorderPage::release_pages_recursive(), and foedus::storage::masstree::release_parallel().
|
inline |
As the name suggests, this should be used only by composer.
foster twin should be immutable
Definition at line 180 of file masstree_page_impl.hpp.
References ASSERT_ND, foster_twin_, header_, foedus::storage::VolatilePagePointer::set_offset_unsafe(), and foedus::storage::PageHeader::snapshot_.
|
inline |
Definition at line 114 of file masstree_page_impl.hpp.
References foster_twin_.
Referenced by install_foster_twin().
|
inline |
As the name suggests, this should be used only by composer.
fence should be immutable
Definition at line 185 of file masstree_page_impl.hpp.
References ASSERT_ND, header_, high_fence_, and foedus::storage::PageHeader::snapshot_.
|
inline |
Definition at line 149 of file masstree_page_impl.hpp.
References header_, and foedus::storage::PageHeader::set_key_count().
Referenced by foedus::storage::masstree::MasstreeIntermediatePage::append_minipage_snapshot(), foedus::storage::masstree::MasstreeBorderPage::append_next_layer_snapshot(), foedus::storage::masstree::SplitBorder::migrate_records(), and foedus::storage::masstree::SplitIntermediate::split_impl_no_error().
|
inline |
Definition at line 171 of file masstree_page_impl.hpp.
References header_, foedus::storage::PageHeader::page_version_, and foedus::storage::PageVersion::set_moved().
Referenced by foedus::storage::masstree::SplitIntermediate::split_impl_no_error().
|
inline |
Definition at line 172 of file masstree_page_impl.hpp.
References header_, foedus::storage::PageHeader::page_version_, and foedus::storage::PageVersion::set_retired().
Referenced by foedus::storage::masstree::Adopt::adopt_case_a(), foedus::storage::masstree::Adopt::adopt_case_b(), foedus::storage::masstree::grow_case_a_common(), foedus::storage::masstree::grow_case_b_common(), and foedus::storage::masstree::SplitIntermediate::split_impl_no_error().
|
inline |
Definition at line 126 of file masstree_page_impl.hpp.
References high_fence_, is_high_fence_supremum(), and low_fence_.
Referenced by foedus::storage::masstree::MasstreeStoragePimpl::find_border_physical(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_next_layer(), foedus::storage::masstree::MasstreeStoragePimpl::peek_volatile_page_boundaries_this_layer_recurse(), foedus::storage::masstree::MasstreeStoragePimpl::reserve_record(), foedus::storage::masstree::MasstreeStoragePimpl::reserve_record_normalized(), foedus::storage::masstree::MasstreeBorderPage::track_moved_record_next_layer(), within_foster_major(), and within_foster_minor().
|
inline |
Definition at line 134 of file masstree_page_impl.hpp.
References ASSERT_ND, foster_fence_, has_foster_child(), and within_fences().
|
inline |
Definition at line 129 of file masstree_page_impl.hpp.
References ASSERT_ND, foster_fence_, has_foster_child(), and within_fences().
Referenced by foedus::storage::masstree::MasstreeStoragePimpl::reserve_record(), and foedus::storage::masstree::MasstreeStoragePimpl::reserve_record_normalized().
|
friend |
defined in masstree_page_debug.cpp.
Definition at line 30 of file masstree_page_debug.cpp.
|
protected |
Inclusive low_fence of foster child.
undefined if foster child is not set
Definition at line 201 of file masstree_page_impl.hpp.
Referenced by get_foster_fence(), initialize_snapshot_common(), initialize_volatile_common(), install_foster_twin(), within_foster_major(), and within_foster_minor().
|
protected |
Points to foster children, or tentative child pages.
Null if has_foster_child of page_version is false. This is core of the foster-twin protocol.
[0]: Left-half of this page, or minor foster child. [1]: Right-half of this page, or major foster child.
Definition at line 211 of file masstree_page_impl.hpp.
Referenced by get_foster_major(), get_foster_minor(), initialize_snapshot_common(), initialize_volatile_common(), is_foster_major_null(), is_foster_minor_null(), foedus::storage::masstree::MasstreeIntermediatePage::release_pages_recursive(), foedus::storage::masstree::MasstreeBorderPage::release_pages_recursive(), foedus::storage::masstree::MasstreeIntermediatePage::release_pages_recursive_parallel(), set_foster_major_offset_unsafe(), and set_foster_twin().
|
protected |
Definition at line 194 of file masstree_page_impl.hpp.
Referenced by foedus::storage::masstree::MasstreeIntermediatePage::append_minipage_snapshot(), foedus::storage::masstree::MasstreeIntermediatePage::append_pointer_snapshot(), foedus::storage::masstree::MasstreeBorderPage::assert_entries_impl(), foedus::storage::masstree::MasstreeBorderPage::can_accomodate_snapshot(), foedus::storage::masstree::MasstreeIntermediatePage::extract_separators_snapshot(), foedus::storage::masstree::MasstreeIntermediatePage::extract_separators_volatile(), foedus::storage::masstree::MasstreeBorderPage::find_key_for_snapshot(), get_btree_level(), get_key_count(), get_layer(), get_lock_address(), get_snapshot_page_id(), get_version(), get_version_address(), get_volatile_page_id(), has_foster_child(), header(), increment_key_count(), foedus::storage::masstree::MasstreeBorderPage::initialize_as_layer_root_physical(), foedus::storage::masstree::MasstreeBorderPage::initialize_layer_root(), initialize_snapshot_common(), initialize_volatile_common(), is_border(), is_locked(), is_moved(), is_retired(), foedus::storage::masstree::SplitIntermediate::migrate_pointers(), foedus::storage::masstree::MasstreeIntermediatePage::release_pages_recursive(), foedus::storage::masstree::MasstreeBorderPage::release_pages_recursive(), release_pages_recursive_common(), foedus::storage::masstree::MasstreeIntermediatePage::release_pages_recursive_parallel(), set_foster_major_offset_unsafe(), set_high_fence_unsafe(), set_key_count(), set_moved(), set_retired(), and foedus::storage::masstree::MasstreeBorderPage::try_expand_record_in_page_physical().
|
protected |
Inclusive high fence of this page.
Mainly used for sanity checking
Definition at line 199 of file masstree_page_impl.hpp.
Referenced by get_high_fence(), initialize_snapshot_common(), initialize_volatile_common(), is_empty_range(), is_high_fence_supremum(), set_high_fence_unsafe(), foedus::storage::masstree::SplitIntermediate::split_impl_no_error(), foedus::storage::masstree::MasstreeIntermediatePage::verify_separators(), and within_fences().
|
protected |
Inclusive low fence of this page.
Mainly used for sanity checking
Definition at line 197 of file masstree_page_impl.hpp.
Referenced by get_low_fence(), initialize_snapshot_common(), initialize_volatile_common(), is_empty_range(), is_low_fence_infimum(), foedus::storage::masstree::SplitIntermediate::split_impl_no_error(), foedus::storage::masstree::MasstreeIntermediatePage::verify_separators(), and within_fences().