|
| Reduced_double_write (uint16_t id, uint32_t n_pages) |
| Constructor. More...
|
|
| ~Reduced_double_write () override |
| Destructor. More...
|
|
virtual uint16_t | write_dblwr_pages (buf_flush_t flush_type) noexcept override |
| Process the requests in the flush queue, write the space_id, page_id, LSN to the reduced double write file (.bdblwr), sync the file if required and then write to the data files. More...
|
|
dberr_t | allocate () |
| Allocate a temporary buffer for writing page entries. More...
|
|
| Double_write (uint16_t id, uint32_t n_pages) noexcept |
| Constructor. More...
|
|
virtual | ~Double_write () noexcept |
| Destructor. More...
|
|
uint16_t | id () const noexcept |
|
void | write (buf_flush_t flush_type) noexcept |
| Process the requests in the flush queue, write the blocks to the double write file, sync the file if required and then write to the data files. More...
|
|
bool | wait_for_pending_batch () noexcept |
| Wait for any pending batch to complete. More...
|
|
bool | flush_to_disk (buf_flush_t flush_type) noexcept |
| Flush buffered pages to disk, clear the buffers. More...
|
|
void | write_pages (buf_flush_t flush_type) noexcept |
| Process the requests in the flush queue, write the blocks to the double write file, sync the file if required and then write to the data files. More...
|
|
void | write_data_pages (buf_flush_t flush_type, uint16_t batch_id) noexcept |
|
void | force_flush (buf_flush_t flush_type) noexcept |
| Force a flush of the page queue. More...
|
|
void | enqueue (buf_flush_t flush_type, buf_page_t *bpage, const file::Block *e_block) noexcept |
| Add a page to the flush batch. More...
|
|
void | batch_started () noexcept |
| Note that the IO batch has started. More...
|
|
void | batch_completed () noexcept |
| Wake up all the threads that were waiting for the batch to complete. More...
|
|
| Double_write (const Double_write &)=delete |
|
| Double_write (const Double_write &&)=delete |
|
Double_write & | operator= (Double_write &&)=delete |
|
Double_write & | operator= (const Double_write &)=delete |
|
|
static Double_write * | instance (buf_flush_t flush_type, uint32_t buf_pool_index, bool is_reduced) noexcept |
|
static dberr_t | create_batch_segments (uint32_t segments_per_file) noexcept |
| Create the batch write segments. More...
|
|
static dberr_t | create_reduced_batch_segments () noexcept |
| Create the Reduced batch write segments. More...
|
|
static dberr_t | create_single_segments () noexcept |
| Create the single page flush segments. More...
|
|
static void | submit (buf_flush_t flush_type, buf_page_t *bpage, const file::Block *e_block) noexcept |
| Get the instance that handles a particular page's IO. More...
|
|
static dberr_t | sync_page_flush (buf_page_t *bpage, file::Block *e_block) noexcept |
| Writes a single page to the doublewrite buffer on disk, syncs it, then writes the page to the datafile. More...
|
|
static Double_write * | instance (buf_flush_t flush_type, const buf_page_t *bpage) noexcept |
|
static void | write_complete (buf_page_t *bpage, buf_flush_t flush_type) noexcept |
| Updates the double write buffer when a write request is completed. More...
|
|
static bool | init_v1 (page_no_t &block1, page_no_t &block2) noexcept |
| REad the V1 doublewrite buffer extents boundaries. More...
|
|
static bool | create_v1 (page_no_t &block1, page_no_t &block2) noexcept |
| Creates the V1 doublewrite buffer extents. More...
|
|
static dberr_t | write_to_datafile (const buf_page_t *in_bpage, bool sync, const file::Block *e_block) noexcept |
| Writes a page that has already been written to the doublewrite buffer to the data file. More...
|
|
static void | force_flush (buf_flush_t flush_type, uint32_t buf_pool_index) noexcept |
| Force a flush of the page queue. More...
|
|
static dberr_t | load (dblwr::File &file, recv::Pages *pages) noexcept |
| Load the doublewrite buffer pages from an external file. More...
|
|
static dberr_t | load_reduced_batch (dblwr::File &file, recv::Pages *pages) noexcept |
| Load the reduced doublewrite buffer page entries from an reduced batch double write buffer file (.bdblwr) More...
|
|
static dberr_t | init_file (dblwr::File &file, uint32_t n_pages, uint32_t phy_size=univ_page_size.physical()) noexcept |
| Write zeros to the file if it is "empty". More...
|
|
static void | reset_file (dblwr::File &file, bool truncate) noexcept |
| Reset the size in bytes to the configured size. More...
|
|
static void | reduced_reset_file (dblwr::File &file, uint32_t pages_per_file, uint32_t phy_size) noexcept |
| Reset the size in bytes to the configured size. More...
|
|
static void | reset_files () noexcept |
| Reset the size in bytes to the configured size of all files. More...
|
|
static dberr_t | create_v2 () noexcept |
| Create the v2 data structures. More...
|
|
static dberr_t | create_reduced () noexcept |
| Create the data structures for reduced doublewrite buffer. More...
|
|
static bool | is_fsync_required () noexcept |
|
static void | prepare (const buf_page_t *bpage, void **ptr, uint32_t *len) noexcept |
| Extract the data and length to write to the doublewrite file. More...
|
|
static void | shutdown () noexcept |
| Free the data structures. More...
|
|
static void | toggle (ulong value) noexcept |
| Toggle the doublewrite buffer dynamically. More...
|
|
static void | single_write (Segment *segment, const buf_page_t *bpage, file::Block *e_block) noexcept |
| Write the data to disk synchronously. More...
|
|
unsigned long long | m_bytes_written {} |
| Number of bytes written to disk by this instance. More...
|
|
static uint32_t | s_n_instances {} |
| Number of instances. More...
|
|
static std::vector< dblwr::File > | s_files |
| Files to use for atomic writes. More...
|
|
static std::vector< dblwr::File > | s_r_files |
| Reduced batch doublewrite files to use for atomic writes. More...
|
|
static Instances * | s_instances {} |
| The global instances. More...
|
|
static Instances * | s_r_instances {} |
| The global Reduced Doublewrite instances. More...
|
|
using | Segments = mpmc_bq< Segment * > |
|
using | Instances = std::vector< Double_write * > |
|
using | Batch_segments = mpmc_bq< Batch_segment * > |
|
static void | free_segments (Batch_segments *&segments) noexcept |
| Utility function to free batch segments. More...
|
|
static bool | is_reduced_batch_id (uint32_t batch_id) |
|
uint16_t | m_id {} |
| Instance ID. More...
|
|
ib_mutex_t | m_mutex |
| Protects m_buf_pages. More...
|
|
os_event_t | m_event |
| Wait for IO batch to complete. More...
|
|
std::atomic_bool | m_batch_running {false} |
| true if the the batch hasn't completed yet. More...
|
|
Buffer | m_buffer |
| The copy of the page frame, the page must be in in m_buf_pages. More...
|
|
Buf_pages | m_buf_pages |
| Pages that should be written to the data files. More...
|
|
static Batch_segments * | s_LRU_batch_segments {} |
| File segments to use for LRU batched writes. More...
|
|
static Batch_segments * | s_flush_list_batch_segments {} |
| File segments to use for flush list batched writes. More...
|
|
static Segments * | s_single_segments {} |
| File segments to use for single page writes. More...
|
|
static Batch_segments * | s_r_LRU_batch_segments {} |
| File segments to use for LRU batched writes in reduced dblwr mode. More...
|
|
static Batch_segments * | s_r_flush_list_batch_segments {} |
| File segments to use for flush list batched writes (reduced mode) More...
|
|
static std::vector< Batch_segment * > | s_segments {} |
| For indexing batch segments by ID. More...
|
|
static uint32_t | s_regular_last_batch_id {} |
| Last used batch_id for regular batch segments. More...
|
|
Reduced doublewrite implementation.
Uses separate .bdblwr files and can coexist with regular doublewrite buffer implementation