libfoedus-core
FOEDUS Core Library
|
Partitioner for an array storage. More...
Partitioner for an array storage.
There are a few options to implement partitioning for an array with trade-offs between simplicity/efficiency and accuracy/flexibility.
Definition at line 72 of file array_partitioner_impl.hpp.
#include <array_partitioner_impl.hpp>
Public Member Functions | |
ArrayPartitioner (Partitioner *parent) | |
ErrorStack | design_partition (const Partitioner::DesignPartitionArguments &args) |
bool | is_partitionable () const |
void | partition_batch (const Partitioner::PartitionBatchArguments &args) const |
void | sort_batch (const Partitioner::SortBatchArguments &args) const |
ArrayOffset | get_array_size () const |
uint8_t | get_array_levels () const |
const PartitionId * | get_bucket_owners () const |
Friends | |
std::ostream & | operator<< (std::ostream &o, const ArrayPartitioner &v) |
|
explicit |
Definition at line 43 of file array_partitioner_impl.cpp.
References ASSERT_ND, foedus::soc::SharedMutex::is_initialized(), foedus::storage::PartitionerMetadata::locate_data(), foedus::storage::PartitionerMetadata::mutex_, and foedus::storage::PartitionerMetadata::valid_.
ErrorStack foedus::storage::array::ArrayPartitioner::design_partition | ( | const Partitioner::DesignPartitionArguments & | args | ) |
Definition at line 73 of file array_partitioner_impl.cpp.
References foedus::storage::PartitionerMetadata::allocate_data(), foedus::storage::array::ArrayPartitionerData::array_levels_, ASSERT_ND, foedus::storage::Storage< CONTROL_BLOCK >::exists(), foedus::storage::extract_numa_node_from_snapshot_pointer(), foedus::storage::array::ArrayStorage::get_array_size(), foedus::Attachable< CONTROL_BLOCK >::get_control_block(), foedus::memory::EngineMemory::get_global_volatile_page_resolver(), foedus::storage::array::ArrayPage::get_interior_record(), foedus::storage::array::ArrayStorage::get_levels(), foedus::Engine::get_memory_manager(), foedus::storage::VolatilePagePointer::get_numa_node(), foedus::Engine::get_options(), foedus::Engine::get_soc_count(), foedus::thread::ThreadOptions::group_count_, foedus::soc::SharedMutex::is_initialized(), foedus::storage::array::ArrayPage::is_leaf(), foedus::storage::VolatilePagePointer::is_null(), foedus::storage::array::kInteriorFanout, foedus::kRetOk, foedus::storage::PartitionerMetadata::locate_data(), foedus::storage::PartitionerMetadata::mutex_, foedus::memory::GlobalVolatilePageResolver::resolve_offset(), foedus::storage::DualPagePointer::snapshot_pointer_, foedus::EngineOptions::thread_, foedus::storage::PartitionerMetadata::valid_, foedus::storage::DualPagePointer::volatile_pointer_, and WRAP_ERROR_CODE.
Referenced by foedus::storage::Partitioner::design_partition().
uint8_t foedus::storage::array::ArrayPartitioner::get_array_levels | ( | ) | const |
Definition at line 60 of file array_partitioner_impl.cpp.
References foedus::storage::array::ArrayPartitionerData::array_levels_, and ASSERT_ND.
ArrayOffset foedus::storage::array::ArrayPartitioner::get_array_size | ( | ) | const |
Definition at line 55 of file array_partitioner_impl.cpp.
References foedus::storage::array::ArrayPartitionerData::array_size_, and ASSERT_ND.
Referenced by partition_batch().
const PartitionId * foedus::storage::array::ArrayPartitioner::get_bucket_owners | ( | ) | const |
Definition at line 64 of file array_partitioner_impl.cpp.
References ASSERT_ND, and foedus::storage::array::ArrayPartitionerData::bucket_owners_.
Referenced by partition_batch().
bool foedus::storage::array::ArrayPartitioner::is_partitionable | ( | ) | const |
Definition at line 68 of file array_partitioner_impl.cpp.
References ASSERT_ND, and foedus::storage::array::ArrayPartitionerData::partitionable_.
Referenced by foedus::storage::Partitioner::is_partitionable(), and partition_batch().
void foedus::storage::array::ArrayPartitioner::partition_batch | ( | const Partitioner::PartitionBatchArguments & | args | ) | const |
Definition at line 175 of file array_partitioner_impl.cpp.
References ASSERT_ND, foedus::storage::array::ArrayPartitionerData::bucket_size_, foedus::assorted::ConstDiv::div64(), get_array_size(), get_bucket_owners(), foedus::log::BaseLogType::header_, is_partitionable(), foedus::storage::array::kInteriorFanout, foedus::log::kLogCodeArrayIncrement, foedus::log::kLogCodeArrayOverwrite, foedus::storage::Partitioner::PartitionBatchArguments::log_buffer_, foedus::storage::Partitioner::PartitionBatchArguments::log_positions_, foedus::log::LogHeader::log_type_code_, foedus::storage::Partitioner::PartitionBatchArguments::logs_count_, foedus::storage::array::ArrayCommonUpdateLogType::offset_, foedus::snapshot::LogBuffer::resolve(), foedus::storage::Partitioner::PartitionBatchArguments::results_, and foedus::log::LogHeader::storage_id_.
Referenced by foedus::storage::Partitioner::partition_batch().
void foedus::storage::array::ArrayPartitioner::sort_batch | ( | const Partitioner::SortBatchArguments & | args | ) | const |
Definition at line 312 of file array_partitioner_impl.cpp.
References ASSERT_ND, foedus::memory::AlignedMemory::assure_capacity(), foedus::storage::array::compact_logs(), foedus::debugging::StopWatch::elapsed_ms(), foedus::memory::AlignedMemory::get_block(), foedus::storage::Partitioner::SortBatchArguments::logs_count_, foedus::storage::array::prepare_sort_entries(), foedus::debugging::StopWatch::stop(), foedus::storage::Partitioner::SortBatchArguments::work_memory_, and foedus::storage::Partitioner::SortBatchArguments::written_count_.
Referenced by foedus::storage::Partitioner::sort_batch().
|
friend |
Definition at line 347 of file array_partitioner_impl.cpp.