42#define DBLWR_V1_EXTENT_SIZE FSP_EXTENT_SIZE
45#define TRX_SYS_DBLWR_V1 (UNIV_PAGE_SIZE - 200)
86 bool append(
const void *ptr,
size_t n_bytes)
noexcept {
93 memcpy(
m_next, ptr, n_bytes);
143#ifndef UNIV_HOTBACKUP
152extern std::string
dir;
173void close() noexcept;
289 offset +=
sizeof(
m_lsn);
364 static bool is_same(ulong new_value);
427void create(Pages *&pages)
noexcept;
452[[nodiscard]]
const byte *
find(
const Pages *pages,
461[[nodiscard]] std::tuple<bool, lsn_t>
find_entry(
462 const Pages *pages,
const page_id_t &page_id)
noexcept;
471void destroy(Pages *&pages)
noexcept;
527#ifndef UNIV_HOTBACKUP
uint32_t space_id_t
Tablespace identifier.
Definition: api0api.h:46
uint32_t page_no_t
Page number.
Definition: api0api.h:44
static ulint buf_pool_index(const buf_pool_t *buf_pool)
Calculates the index of a buffer pool to the buf_pool[] array.
constexpr ulint DBLWR_VER
4-byte ver number which shows if we have created the doublewrite buffer.
Definition: buf0dblwr.h:48
constexpr ulint DBLWR_V1_BLOCK1
Page number of the first page in the first sequence of 64 (= FSP_EXTENT_SIZE) consecutive pages in th...
Definition: buf0dblwr.h:52
constexpr ulint DBLWR_V1_BLOCK2
Page number of the first page in the second sequence of 64 consecutive pages in the doublewrite buffe...
Definition: buf0dblwr.h:56
The database buffer pool global types for the directory.
buf_flush_t
Flags for flush types.
Definition: buf0types.h:67
Doublewrite implementation.
Definition: buf0dblwr.cc:429
The IO Context that is passed down to the low level IO code.
Definition: os0file.h:277
Definition: buf0buf.h:1152
Redo recovery configuration.
Definition: buf0dblwr.h:474
const byte * find(const page_id_t &page_id) noexcept
Find a doublewrite copy of a page.
Definition: buf0dblwr.h:507
void recovered() noexcept
Note that recovery is complete.
Definition: buf0dblwr.h:529
DBLWR() noexcept
Constructor.
Definition: buf0dblwr.h:477
DBLWR(const DBLWR &&)=delete
void check_missing_tablespaces() noexcept
Check if some pages from the double write buffer could not be restored because of the missing tablesp...
Definition: buf0dblwr.h:523
Pages * m_pages
Pages read from the double write file.
Definition: buf0dblwr.h:540
void recover(fil_space_t *space=nullptr) noexcept
Restore pages from the double write buffer to the tablespace.
Definition: buf0dblwr.h:499
DBLWR & operator=(const DBLWR &)=delete
~DBLWR() noexcept
Destructor.
Definition: buf0dblwr.h:480
DBLWR(const DBLWR &)=delete
Disably copying.
DBLWR & operator=(DBLWR &&)=delete
std::tuple< bool, lsn_t > find_entry(const page_id_t &page_id) noexcept
Find the LSN of the given page id in the dblwr.
Definition: buf0dblwr.h:516
bool empty() const noexcept
Definition: buf0dblwr.h:483
dberr_t reduced_load() noexcept
Load the doublewrite buffer pages.
Definition: buf0dblwr.h:491
dberr_t load() noexcept
Load the doublewrite buffer pages.
Definition: buf0dblwr.h:487
Pages recovered from the doublewrite buffer.
Definition: buf0dblwr.cc:248
Page identifier.
Definition: buf0types.h:206
size_t physical() const
Retrieve the physical page size (on-disk).
Definition: page0size.h:120
dberr_t
Definition: db0err.h:38
The low-level file system.
constexpr uint32_t FSEG_HEADER_SIZE
Length of the file system header, in bytes.
Definition: fsp0types.h:93
mysql_service_status_t recv(const char *tag, const unsigned char *data, size_t data_length) noexcept
Definition: gr_message_service_example.cc:38
flush_type
Definition: my_sys.h:296
uint64_t lsn_t
Type used for all log sequence number storage and arithmetic.
Definition: log0types.h:62
static void mach_write_to_8(void *b, uint64_t n)
The following function is used to store data in 8 consecutive bytes.
static void mach_write_to_4(byte *b, ulint n)
The following function is used to store data in 4 consecutive bytes.
void recover(Pages *pages, fil_space_t *space) noexcept
Restore pages from the double write buffer to the tablespace.
Definition: buf0dblwr.cc:2628
const byte * find(const Pages *pages, const page_id_t &page_id) noexcept
Find a doublewrite copy of a page.
Definition: buf0dblwr.cc:3578
dberr_t load(Pages *pages) noexcept
Load the doublewrite buffer pages.
Definition: buf0dblwr.cc:3366
void destroy(Pages *&pages) noexcept
Free the recovery dblwr data structures.
Definition: buf0dblwr.cc:3593
std::tuple< bool, lsn_t > find_entry(const Pages *pages, const page_id_t &page_id) noexcept
Find the LSN of the given page id in the dblwr.
Definition: buf0dblwr.cc:3583
void check_missing_tablespaces(const Pages *pages) noexcept
Check if some pages from the double write buffer could not be restored because of the missing tablesp...
Definition: buf0dblwr.cc:3600
dberr_t reduced_load(Pages *pages) noexcept
Load the doublewrite buffer pages.
Definition: buf0dblwr.cc:3478
void create(Pages *&pages) noexcept
Create the recovery dblwr data structures.
Definition: buf0dblwr.cc:3588
bool is_inside(page_no_t page_no) noexcept
Check if the read is of a page inside the legacy dblwr buffer.
Definition: buf0dblwr.cc:2917
dberr_t init() noexcept
Read the boundaries of the legacy dblwr buffer extents.
Definition: buf0dblwr.cc:2901
Definition: buf0dblwr.cc:74
ulong n_files
Number of files to use for the double write buffer.
Definition: buf0dblwr.cc:78
constexpr const uint32_t RB_OFF_UNUSED
Definition: buf0dblwr.h:249
dberr_t reduced_open() noexcept
Check and open the reduced doublewrite files if necessary.
Definition: buf0dblwr.cc:2724
dberr_t open() noexcept
Startup the background thread(s) and create the instance.
Definition: buf0dblwr.cc:2763
constexpr const uint32_t REDUCED_MAX_ENTRIES
Definition: buf0dblwr.h:264
void set()
Toggle the doublewrite buffer.
Definition: buf0dblwr.cc:2893
dberr_t enable_reduced() noexcept
Enable the doublewrite reduced mode by creating the necessary dblwr files and in-memory structures.
Definition: buf0dblwr.cc:2868
void close() noexcept
Shutdown the background thread and destroy the instance.
Definition: buf0dblwr.cc:2891
const uint32_t REDUCED_BATCH_PAGE_SIZE
Definition: buf0dblwr.h:232
void force_flush(buf_flush_t flush_type, uint32_t buf_pool_index) noexcept
Force a write of all pages in the queue.
Definition: buf0dblwr.cc:3149
ulong n_pages
Number of pages per doublewrite thread/segment.
Definition: buf0dblwr.cc:82
constexpr const uint32_t REDUCED_HEADER_SIZE
Definition: buf0dblwr.h:251
ulong g_mode
DBLWR mode.
Definition: buf0dblwr.cc:84
page_id_t Force_crash
Crash the server after writing this page to the data file.
Definition: buf0dblwr.cc:197
constexpr const uint32_t RB_OFF_CHECKSUM
Definition: buf0dblwr.h:246
file::Block * get_encrypted_frame(buf_page_t *bpage, IORequest &type) noexcept
Obtain the encrypted frame and store it in bpage->m_io_frame.
Definition: buf0dblwr.cc:2426
const uint32_t RB_BATCH_TYPE_SIZE
Definition: buf0dblwr.h:241
void force_flush_all() noexcept
Force a write of all pages in all dblwr segments (reduced or regular) This is used only when switchin...
Definition: buf0dblwr.cc:3154
std::string dir
Double write files location.
Definition: buf0dblwr.cc:76
constexpr const uint32_t RB_OFF_BATCH_TYPE
Definition: buf0dblwr.h:248
ulong batch_size
Maximum number of pages to write in one batch.
Definition: buf0dblwr.cc:80
const uint32_t RB_BATCH_ID_SIZE
Definition: buf0dblwr.h:238
bool has_encrypted_pages() noexcept
Check if the dblwr files contain encrypted pages.
Definition: buf0dblwr.cc:3616
constexpr const uint32_t REDUCED_DATA_SIZE
Definition: buf0dblwr.h:261
bool is_enabled()
Check if doublewrite is enabled.
Definition: buf0dblwr.h:389
const char * to_string(ulong mode)
constexpr const uint32_t REDUCED_ENTRY_SIZE
Definition: buf0dblwr.h:258
void reset_files() noexcept
Delete or adjust the dblwr file size if required.
Definition: buf0dblwr.cc:2899
const uint32_t RB_DATA_LEN_SIZE
Definition: buf0dblwr.h:240
dberr_t write(buf_flush_t flush_type, buf_page_t *bpage, bool sync) noexcept
Writes a page to the doublewrite buffer on disk, syncs it, then writes the page to the datafile.
Definition: buf0dblwr.cc:2491
bool is_disabled()
Check if the doublewrite mode is disabled.
Definition: buf0dblwr.h:397
bool is_reduced()
Check if the doublewrite mode is detect-only (aka reduced).
Definition: buf0dblwr.h:393
constexpr const uint32_t RB_OFF_DATA_LEN
Definition: buf0dblwr.h:247
bool is_reduced_inited
true if DETECT_ONLY (aka reduced) mode is inited
Definition: buf0dblwr.cc:86
const uint32_t RB_CHECKSUM_SIZE
Definition: buf0dblwr.h:239
void write_complete(buf_page_t *bpage, buf_flush_t flush_type) noexcept
Updates the double write buffer when a write request is completed.
Definition: buf0dblwr.cc:2624
constexpr const uint32_t RB_OFF_BATCH_ID
Definition: buf0dblwr.h:245
const uint32_t RB_UNUSED_BYTES_SIZE
Definition: buf0dblwr.h:242
mode
Definition: file_handle.h:59
void * aligned_zalloc(std::size_t size, std::size_t alignment) noexcept
Dynamically allocates zero-initialized storage of given size and at the address aligned to the reques...
Definition: ut0new.h:1548
void aligned_free(void *ptr) noexcept
Releases storage which has been dynamically allocated through any of the aligned_alloc_*() or aligned...
Definition: ut0new.h:1562
page_size_t univ_page_size
required string type
Definition: replication_group_member_actions.proto:33
IO buffer in UNIV_PAGE_SIZE units and aligned on UNIV_PAGE_SIZE.
Definition: buf0dblwr.h:61
Buffer & operator=(const Buffer &)=delete
Buffer(size_t n_pages) noexcept
Constructor.
Definition: buf0dblwr.h:64
size_t capacity() const noexcept
Definition: buf0dblwr.h:112
Buffer(const Buffer &&)=delete
uint32_t m_phy_size
Page size on disk (aka physical page size).
Definition: buf0dblwr.h:121
Buffer(const Buffer &)=delete
~Buffer() noexcept
Destructor.
Definition: buf0dblwr.h:79
bool append(const void *ptr, size_t n_bytes) noexcept
Add the contents of ptr up to n_bytes to the buffer.
Definition: buf0dblwr.h:86
const byte * begin() const noexcept
Definition: buf0dblwr.h:103
byte * m_next
Start of next write to the buffer.
Definition: buf0dblwr.h:129
byte * m_ptr
Write buffer used in writing to the doublewrite buffer, aligned to an address divisible by UNIV_PAGE_...
Definition: buf0dblwr.h:126
void clear() noexcept
Empty the buffer.
Definition: buf0dblwr.h:118
bool empty() const noexcept
Definition: buf0dblwr.h:115
size_t size() const noexcept
Definition: buf0dblwr.h:106
byte * begin() noexcept
Definition: buf0dblwr.h:100
const size_t m_n_bytes
Size of the unaligned (raw) buffer.
Definition: buf0dblwr.h:132
Buffer & operator=(Buffer &&)=delete
Buffer(size_t n_pages, uint32_t phy_size) noexcept
Constructor.
Definition: buf0dblwr.h:70
Definition: buf0dblwr.h:295
static bool is_disabled_low(ulong mode)
Check if the doublewrite mode is disabled.
Definition: buf0dblwr.h:376
static bool is_same(ulong new_value)
Check if the mode transition is equivalent.
Definition: buf0dblwr.cc:107
static bool is_enabled_to_disabled(ulong new_value)
Check if the mode transition is from enabled to disabled.
Definition: buf0dblwr.h:399
static bool is_atomic(ulong mode)
Check if the dblwr mode provides atomic writes.
Definition: buf0dblwr.h:367
static const char * to_string(ulong mode)
Convert the dblwr mode into a string representation.
Definition: buf0dblwr.cc:88
static bool is_disabled_to_enabled(ulong new_value)
Check if the mode transition is from disabled to enabled.
Definition: buf0dblwr.h:403
static bool is_enabled_low(ulong mode)
Check if doublewrite is enabled.
Definition: buf0dblwr.h:371
static bool is_reduced_low(ulong mode)
Check if the doublewrite mode is detect-only (aka reduced).
Definition: buf0dblwr.h:378
mode_t
The operating mode of doublewrite.
Definition: buf0dblwr.h:302
@ DETECT_ONLY
In this mode, dblwr is used only to detect torn writes.
Definition: buf0dblwr.h:312
@ FALSEE
Equal to OFF mode.
Definition: buf0dblwr.h:319
@ TRUEE
Equal to ON, DETECT_AND_RECOVER mode.
Definition: buf0dblwr.h:323
@ DETECT_AND_RECOVER
This mode is synonymous with ON, TRUEE.
Definition: buf0dblwr.h:315
@ ON
Equal to TRUEE and DETECT_AND_RECOVER modes.
Definition: buf0dblwr.h:307
@ OFF
Equal to FALSEE.
Definition: buf0dblwr.h:304
When –innodb-doublewrite=DETECT_ONLY, page contents are not written to the dblwr buffer.
Definition: buf0dblwr.h:270
lsn_t m_lsn
Definition: buf0dblwr.h:273
page_no_t m_page_no
Definition: buf0dblwr.h:272
space_id_t m_space_id
Definition: buf0dblwr.h:271
Reduced_entry(space_id_t space_id, page_no_t page_no, lsn_t lsn)
Definition: buf0dblwr.h:277
Reduced_entry(buf_page_t *bpage)
Definition: buf0dblwr.cc:3648
byte * write(byte *ptr)
Definition: buf0dblwr.h:280
Tablespace or log data space.
Definition: fil0fil.h:233
unsigned long int ulint
Definition: univ.i:405
Utilities for byte operations.
#define ut_a(EXPR)
Abort execution if EXPR does not evaluate to nonzero.
Definition: ut0dbg.h:92
static uint64_t lsn
Definition: xcom_base.cc:445