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;
287 offset +=
sizeof(
m_lsn);
362 static bool is_same(ulong new_value);
425void create(Pages *&pages)
noexcept;
450[[nodiscard]]
const byte *
find(
const Pages *pages,
459[[nodiscard]] std::tuple<bool, lsn_t>
find_entry(
460 const Pages *pages,
const page_id_t &page_id)
noexcept;
469void destroy(Pages *&pages)
noexcept;
525#ifndef UNIV_HOTBACKUP
uint32_t space_id_t
Tablespace identifier.
Definition: api0api.h:50
uint32_t page_no_t
Page number.
Definition: api0api.h:48
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
Definition: buf0buf.h:1124
Redo recovery configuration.
Definition: buf0dblwr.h:472
const byte * find(const page_id_t &page_id) noexcept
Find a doublewrite copy of a page.
Definition: buf0dblwr.h:505
void recovered() noexcept
Note that recovery is complete.
Definition: buf0dblwr.h:527
DBLWR() noexcept
Constructor.
Definition: buf0dblwr.h:475
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:521
Pages * m_pages
Pages read from the double write file.
Definition: buf0dblwr.h:538
void recover(fil_space_t *space=nullptr) noexcept
Restore pages from the double write buffer to the tablespace.
Definition: buf0dblwr.h:497
DBLWR & operator=(const DBLWR &)=delete
~DBLWR() noexcept
Destructor.
Definition: buf0dblwr.h:478
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:514
bool empty() const noexcept
Definition: buf0dblwr.h:481
dberr_t reduced_load() noexcept
Load the doublewrite buffer pages.
Definition: buf0dblwr.h:489
dberr_t load() noexcept
Load the doublewrite buffer pages.
Definition: buf0dblwr.h:485
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:294
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:2624
const byte * find(const Pages *pages, const page_id_t &page_id) noexcept
Find a doublewrite copy of a page.
Definition: buf0dblwr.cc:3574
dberr_t load(Pages *pages) noexcept
Load the doublewrite buffer pages.
Definition: buf0dblwr.cc:3362
void destroy(Pages *&pages) noexcept
Free the recovery dblwr data structures.
Definition: buf0dblwr.cc:3589
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:3579
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:3596
dberr_t reduced_load(Pages *pages) noexcept
Load the doublewrite buffer pages.
Definition: buf0dblwr.cc:3474
void create(Pages *&pages) noexcept
Create the recovery dblwr data structures.
Definition: buf0dblwr.cc:3584
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:2913
dberr_t init() noexcept
Read the boundaries of the legacy dblwr buffer extents.
Definition: buf0dblwr.cc:2897
Definition: buf0dblwr.cc:74
file::Block * get_encrypted_frame(buf_page_t *bpage) noexcept
Obtain the encrypted frame and store it in bpage->m_io_frame.
Definition: buf0dblwr.cc:2423
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:247
dberr_t reduced_open() noexcept
Check and open the reduced doublewrite files if necessary.
Definition: buf0dblwr.cc:2720
dberr_t open() noexcept
Startup the background thread(s) and create the instance.
Definition: buf0dblwr.cc:2759
constexpr const uint32_t REDUCED_MAX_ENTRIES
Definition: buf0dblwr.h:262
void set()
Toggle the doublewrite buffer.
Definition: buf0dblwr.cc:2889
dberr_t enable_reduced() noexcept
Enable the doublewrite reduced mode by creating the necessary dblwr files and in-memory structures.
Definition: buf0dblwr.cc:2864
void close() noexcept
Shutdown the background thread and destroy the instance.
Definition: buf0dblwr.cc:2887
const uint32_t REDUCED_BATCH_PAGE_SIZE
Definition: buf0dblwr.h:230
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:3145
ulong n_pages
Number of pages per doublewrite thread/segment.
Definition: buf0dblwr.cc:82
constexpr const uint32_t REDUCED_HEADER_SIZE
Definition: buf0dblwr.h:249
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:244
const uint32_t RB_BATCH_TYPE_SIZE
Definition: buf0dblwr.h:239
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:3150
std::string dir
Double write files location.
Definition: buf0dblwr.cc:76
constexpr const uint32_t RB_OFF_BATCH_TYPE
Definition: buf0dblwr.h:246
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:236
bool has_encrypted_pages() noexcept
Check if the dblwr files contain encrypted pages.
Definition: buf0dblwr.cc:3612
constexpr const uint32_t REDUCED_DATA_SIZE
Definition: buf0dblwr.h:259
bool is_enabled()
Check if doublewrite is enabled.
Definition: buf0dblwr.h:387
const char * to_string(ulong mode)
constexpr const uint32_t REDUCED_ENTRY_SIZE
Definition: buf0dblwr.h:256
void reset_files() noexcept
Delete or adjust the dblwr file size if required.
Definition: buf0dblwr.cc:2895
const uint32_t RB_DATA_LEN_SIZE
Definition: buf0dblwr.h:238
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:2488
bool is_disabled()
Check if the doublewrite mode is disabled.
Definition: buf0dblwr.h:395
bool is_reduced()
Check if the doublewrite mode is detect-only (aka reduced).
Definition: buf0dblwr.h:391
constexpr const uint32_t RB_OFF_DATA_LEN
Definition: buf0dblwr.h:245
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:237
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:2620
constexpr const uint32_t RB_OFF_BATCH_ID
Definition: buf0dblwr.h:243
const uint32_t RB_UNUSED_BYTES_SIZE
Definition: buf0dblwr.h:240
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
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:293
static bool is_disabled_low(ulong mode)
Check if the doublewrite mode is disabled.
Definition: buf0dblwr.h:374
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:397
static bool is_atomic(ulong mode)
Check if the dblwr mode provides atomic writes.
Definition: buf0dblwr.h:365
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:401
static bool is_enabled_low(ulong mode)
Check if doublewrite is enabled.
Definition: buf0dblwr.h:369
static bool is_reduced_low(ulong mode)
Check if the doublewrite mode is detect-only (aka reduced).
Definition: buf0dblwr.h:376
mode_t
The operating mode of doublewrite.
Definition: buf0dblwr.h:300
@ DETECT_ONLY
In this mode, dblwr is used only to detect torn writes.
Definition: buf0dblwr.h:310
@ FALSEE
Equal to OFF mode.
Definition: buf0dblwr.h:317
@ TRUEE
Equal to ON, DETECT_AND_RECOVER mode.
Definition: buf0dblwr.h:321
@ DETECT_AND_RECOVER
This mode is synonymous with ON, TRUEE.
Definition: buf0dblwr.h:313
@ ON
Equal to TRUEE and DETECT_AND_RECOVER modes.
Definition: buf0dblwr.h:305
@ OFF
Equal to FALSEE.
Definition: buf0dblwr.h:302
When –innodb-doublewrite=DETECT_ONLY, page contents are not written to the dblwr buffer.
Definition: buf0dblwr.h:268
lsn_t m_lsn
Definition: buf0dblwr.h:271
page_no_t m_page_no
Definition: buf0dblwr.h:270
space_id_t m_space_id
Definition: buf0dblwr.h:269
Reduced_entry(space_id_t space_id, page_no_t page_no, lsn_t lsn)
Definition: buf0dblwr.h:275
Reduced_entry(buf_page_t *bpage)
Definition: buf0dblwr.cc:3642
byte * write(byte *ptr)
Definition: buf0dblwr.h:278
Tablespace or log data space.
Definition: fil0fil.h:231
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:56
static uint64_t lsn
Definition: xcom_base.cc:445