50#include <unordered_map> 
   51#include <unordered_set> 
   61extern std::list<std::pair<space_id_t, lsn_t>> index_load_list;
 
   63extern volatile lsn_t backup_redo_log_flushed_lsn;
 
   80void meb_scan_log_seg(
byte *
buf, 
size_t buf_len, 
lsn_t *scanned_lsn,
 
   81                      uint32_t *scanned_checkpoint_no, uint32_t *block_no,
 
   82                      size_t *n_bytes_scanned, 
bool *has_encrypted_log);
 
  106void meb_apply_log_recs(
void);
 
  112void meb_apply_log_recs_via_callback(
 
  114    void (*wait_till_done_function)());
 
  142bool meb_scan_log_recs(
size_t available_memory, 
const byte *
buf, 
size_t len,
 
  184size_t meb_heap_used();
 
  248#if defined(UNIV_DEBUG) || defined(UNIV_HOTBACKUP) 
  382      std::unordered_map<page_no_t, recv_addr_t *, std::hash<page_no_t>,
 
  383                         std::equal_to<page_no_t>>;
 
  403  using Spaces = std::unordered_map<space_id_t, Space, std::hash<space_id_t>,
 
  404                                    std::equal_to<space_id_t>>;
 
  437  using Mlog_records = std::vector<Mlog_record, ut::allocator<Mlog_record>>;
 
  482    saved_rec.space_id = space_id;
 
  483    saved_rec.page_no = page_no;
 
  484    saved_rec.type = 
type;
 
  485    saved_rec.body = body;
 
  486    saved_rec.size = 
len;
 
  512    space_id = saved_rec.space_id;
 
  513    page_no = saved_rec.page_no;
 
  514    type = saved_rec.type;
 
  515    body = 
const_cast<byte *
>(saved_rec.body);
 
  516    len = saved_rec.size;
 
  521#ifndef UNIV_HOTBACKUP 
  542  bool apply_file_operations;
 
  674#define RECV_SCAN_SIZE (4 * UNIV_PAGE_SIZE) 
uint32_t space_id_t
Tablespace identifier.
Definition: api0api.h:52
 
uint32_t page_no_t
Page number.
Definition: api0api.h:50
 
The database buffer pool global types for the directory.
 
buf_flush_t
Flags for flush types.
Definition: buf0types.h:68
 
Definition: sql_list.h:434
 
Redo recovery configuration.
Definition: buf0dblwr.h:473
 
Allocator that allows std::* containers to manage their memory through ut::malloc* and ut::free libra...
Definition: ut0new.h:2182
 
dberr_t
Definition: db0err.h:39
 
Data dictionary global types.
 
ib_id_t table_id_t
Table or partition identifier (unique within an InnoDB instance).
Definition: dict0types.h:232
 
mysql_service_status_t recv(const char *tag, const unsigned char *data, size_t data_length) noexcept
Definition: gr_message_service_example.cc:39
 
The simple hash table utility.
 
bool recv_is_making_a_backup
true When the redo log is being backed up
Definition: log0recv.cc:172
 
static bool log_block_checksum_is_ok(const byte *block)
Check the 4-byte checksum to the trailer checksum field of a log block.
Definition: log0recv.cc:620
 
bool recv_no_ibuf_operations
If the following is true, the buffer pool file pages must be invalidated after recovery and no ibuf o...
Definition: log0recv.cc:169
 
MetadataRecover * recv_recovery_from_checkpoint_finish(bool aborting)
Complete the recovery from the latest checkpoint.
Definition: log0recv.cc:3974
 
void recv_sys_free()
Frees the recovery system.
Definition: log0recv.cc:772
 
void recv_sys_init()
Inits the recovery system for a recovery operation.
Definition: log0recv.cc:531
 
recv_addr_state
States of recv_addr_t.
Definition: log0recv.h:292
 
@ RECV_BEING_READ
page is being read
Definition: log0recv.h:298
 
@ RECV_DISCARDED
log records have been discarded because the tablespace does not exist
Definition: log0recv.h:308
 
@ RECV_BEING_PROCESSED
log records are being applied on the page
Definition: log0recv.h:301
 
@ RECV_NOT_PROCESSED
not yet processed
Definition: log0recv.h:295
 
@ RECV_PROCESSED
log records have been applied on the page
Definition: log0recv.h:304
 
lsn_t recv_calc_lsn_on_data_add(lsn_t lsn, os_offset_t len)
Calculates the new value for lsn when more data is added to the log.
Definition: log0recv.cc:238
 
void recv_sys_close()
Release recovery system mutexes.
Definition: log0recv.cc:416
 
constexpr uint32_t RECV_PARSING_BUF_SIZE
Size of the parsing buffer; it must accommodate RECV_SCAN_SIZE many times!
Definition: log0recv.h:670
 
dberr_t recv_verify_log_is_clean_pre_8_0_30(log_t &log)
Determine if a redo log from a version before MySQL 8.0.30 is clean.
Definition: log0recv.cc:819
 
dberr_t recv_apply_hashed_log_recs(log_t &log, bool allow_ibuf)
Empties the hash table of stored log records, applying them to appropriate pages.
Definition: log0recv.cc:1121
 
void recv_sys_var_init()
Reset the state of the recovery system variables.
Definition: log0recv.cc:453
 
bool recv_page_is_brand_new(buf_block_t *block)
Returns true if the page is brand new (the next log record is init_file_page or no records to apply).
Definition: log0recv.cc:2507
 
static void recv_recover_page(bool jri, buf_block_t *block)
Wrapper for recv_recover_page_func().
Definition: log0recv.h:169
 
const char * get_mlog_string(mlog_id_t type)
Return string name of the redo log record type.
Definition: log0recv.cc:4038
 
recv_sys_t * recv_sys
The recovery system.
Definition: log0recv.cc:95
 
bool recv_needed_recovery
true when recv_init_crash_recovery() has been called.
Definition: log0recv.cc:153
 
void recv_sys_create()
Creates the recovery system.
Definition: log0recv.cc:334
 
static bool recv_recovery_is_on()
Returns true if recovery is currently running.
 
volatile bool recv_recovery_on
true when applying redo log records during crash recovery; false otherwise.
Definition: log0recv.cc:100
 
bool recv_lsn_checks_on
true if buf_page_is_corrupted() should check if the log sequence number (FIL_PAGE_LSN) is in the futu...
Definition: log0recv.cc:158
 
ulint recv_n_pool_free_frames
This many frames must be left free in the buffer pool when we scan the log and store the scanned log ...
Definition: log0recv.cc:196
 
void recv_recover_page_func(bool just_read_in, buf_block_t *block)
Applies the hashed log records to the page, if the page lsn is less than the lsn of a log record.
Definition: log0recv.cc:2540
 
dberr_t recv_recovery_from_checkpoint_start(log_t &log, lsn_t flush_lsn)
Start recovering from a redo log checkpoint.
Definition: log0recv.cc:3767
 
std::list< space_id_t > recv_encr_ts_list
A list of tablespaces for which (un)encryption process was not completed before crash.
Definition: log0recv.cc:85
 
uint64_t lsn_t
Type used for all log sequence number storage and arithmetic.
Definition: log0types.h:63
 
Mini-transaction buffer global types.
 
mlog_id_t
Definition: mtr0types.h:63
 
Definition: buf0block_hint.cc:30
 
Definition: buf0dblwr.cc:75
 
Cursor end()
A past-the-end Cursor.
Definition: rules_table_service.cc:192
 
std::map< Key, Value, Compare, ut::allocator< std::pair< const Key, Value > > > map
Specialization of map which uses ut_allocator.
Definition: ut0new.h:2897
 
The interface to the operating system file io.
 
uint64_t os_offset_t
File offset in bytes.
Definition: os0file.h:84
 
required uint64 version
Definition: replication_group_member_actions.proto:41
 
required string type
Definition: replication_group_member_actions.proto:34
 
case opt name
Definition: sslopt-case.h:33
 
The buffer control block structure.
Definition: buf0buf.h:1708
 
Redo log - single data structure with state of the redo log system.
Definition: log0sys.h:77
 
The info structure stored at the beginning of a heap block.
Definition: mem0mem.h:302
 
InnoDB condition variable.
Definition: os0event.cc:63
 
Hashed page file address struct.
Definition: log0recv.h:312
 
page_no_t page_no
Page number.
Definition: log0recv.h:322
 
recv_addr_state state
recovery state of the page
Definition: log0recv.h:316
 
space_id_t space
Space ID.
Definition: log0recv.h:319
 
List rec_list
List of log records for this page.
Definition: log0recv.h:325
 
Block of log record data.
Definition: log0recv.h:256
 
recv_data_t * next
pointer to the next block or NULL.
Definition: log0recv.h:261
 
Definition: log0recv.h:407
 
byte * ptr
Encryption key.
Definition: log0recv.h:415
 
space_id_t space_id
Tablespace ID.
Definition: log0recv.h:409
 
byte * iv
Encryption IV.
Definition: log0recv.h:418
 
lsn_t lsn
LSN of REDO log encryption entry.
Definition: log0recv.h:412
 
Mini transaction log record.
Definition: log0recv.h:424
 
space_id_t space_id
Definition: log0recv.h:426
 
size_t size
Definition: log0recv.h:434
 
const byte * body
Definition: log0recv.h:432
 
page_no_t page_no
Definition: log0recv.h:428
 
mlog_id_t type
Definition: log0recv.h:430
 
Every space has its own heap and pages that belong to it.
Definition: log0recv.h:386
 
Pages m_pages
Pages that need to be recovered.
Definition: log0recv.h:398
 
mem_heap_t * m_heap
Memory heap of log records and file addresses.
Definition: log0recv.h:395
 
Space(mem_heap_t *heap)
Constructor.
Definition: log0recv.h:389
 
Space()
Default constructor.
Definition: log0recv.h:392
 
Recovery system data structure.
Definition: log0recv.h:380
 
std::vector< Encryption_Key > Encryption_Keys
Definition: log0recv.h:421
 
Missing_Ids deleted
Tablespace IDs that were explicitly deleted.
Definition: log0recv.h:635
 
ulint n_addrs
Number of not processed hashed file addresses in the hash table.
Definition: log0recv.h:619
 
ulint len
Amount of data in buf.
Definition: log0recv.h:560
 
bool found_corrupt_fs
Set when an inconsistency with the file system contents is detected during log scan or apply.
Definition: log0recv.h:602
 
ib_mutex_t mutex
Definition: log0recv.h:525
 
bool is_meb_db
Data directory has been recognized as data directory from MEB.
Definition: log0recv.h:608
 
lsn_t previous_recovered_lsn
The previous value of recovered_lsn - before we parsed the last mtr.
Definition: log0recv.h:589
 
ulint bytes_to_ignore_before_checkpoint
Number of data bytes to ignore until we reach checkpoint_lsn.
Definition: log0recv.h:571
 
os_event_t flush_end
event to signal that the page cleaner has finished the request
Definition: log0recv.h:535
 
void save_rec(size_t rec_num, space_id_t space_id, page_no_t page_no, mlog_id_t type, const byte *body, size_t len)
Save mlog record information.
Definition: log0recv.h:467
 
dblwr::recv::DBLWR * dblwr
Doublewrite buffer pages, destroyed after recovery completes.
Definition: log0recv.h:622
 
Spaces * spaces
Hash table of pages, indexed by SpaceID.
Definition: log0recv.h:616
 
bool get_saved_rec(size_t rec_num, space_id_t &space_id, page_no_t &page_no, mlog_id_t &type, byte *&body, size_t &len)
Return saved mlog record information, if there.
Definition: log0recv.h:498
 
lsn_t recovered_lsn
The log records have been parsed up to this lsn.
Definition: log0recv.h:583
 
bool apply_batch_on
This is true when a log rec application batch is running.
Definition: log0recv.h:551
 
std::vector< Mlog_record, ut::allocator< Mlog_record > > Mlog_records
Definition: log0recv.h:437
 
ulint recovered_offset
Start offset of non-parsed log records in buf.
Definition: log0recv.h:580
 
lsn_t last_block_first_mtr_boundary
Tracks what should be the proper value of first_rec_group field in the header of the block to which r...
Definition: log0recv.h:594
 
std::unordered_map< page_no_t, recv_addr_t *, std::hash< page_no_t >, std::equal_to< page_no_t > > Pages
Definition: log0recv.h:383
 
std::unordered_map< space_id_t, Space, std::hash< space_id_t >, std::equal_to< space_id_t > > Spaces
Definition: log0recv.h:404
 
ib_mutex_t writer_mutex
mutex coordinating flushing between recv_writer_thread and the recovery thread.
Definition: log0recv.h:529
 
Mlog_records saved_recs
Definition: log0recv.h:638
 
bool is_cloned_db
Data directory has been recognized as cloned data directory.
Definition: log0recv.h:605
 
os_event_t flush_start
event to activate page cleaner threads
Definition: log0recv.h:532
 
Missing_Ids missing_ids
Tablespace IDs that were ignored during redo log apply.
Definition: log0recv.h:632
 
std::unordered_set< space_id_t > Missing_Ids
Definition: log0recv.h:401
 
lsn_t checkpoint_lsn
Checkpoint lsn that was used during recovery (read from file).
Definition: log0recv.h:568
 
uint32_t scanned_epoch_no
The log data has been scanned up to this epoch_no.
Definition: log0recv.h:577
 
size_t buf_len
Size of the parsing buffer.
Definition: log0recv.h:557
 
buf_flush_t flush_type
type of the flush request.
Definition: log0recv.h:539
 
Encryption_Keys * keys
Encryption Key information per tablespace ID.
Definition: log0recv.h:629
 
bool dblwr_state
Doublewrite buffer state before MEB recovery starts.
Definition: log0recv.h:613
 
bool found_corrupt_log
Set when finding a corrupt log block or record, or there is a log parsing buffer overflow.
Definition: log0recv.h:598
 
lsn_t parse_start_lsn
This is the lsn from which we were able to start parsing log records and adding them to the hash tabl...
Definition: log0recv.h:565
 
lsn_t scanned_lsn
The log data has been scanned up to this lsn.
Definition: log0recv.h:574
 
byte * buf
Buffer for parsing log records.
Definition: log0recv.h:554
 
bool apply_log_recs
This is true when log rec application to pages is allowed; this flag tells the i/o-handler if it shou...
Definition: log0recv.h:548
 
MetadataRecover * metadata_recover
We store and merge all table persistent data here during scanning redo logs.
Definition: log0recv.h:626
 
static constexpr size_t MAX_SAVED_MLOG_RECS
While scanning logs for multi-record mini-transaction (mtr), we have two passes.
Definition: log0recv.h:457
 
Stored log record struct.
Definition: log0recv.h:265
 
recv_data_t * data
Chain of blocks containing the log record body.
Definition: log0recv.h:275
 
lsn_t start_lsn
Start lsn of the log segment written by the mtr which generated this log record: NOTE that this is no...
Definition: log0recv.h:280
 
UT_LIST_NODE_T(recv_t) Node
Definition: log0recv.h:266
 
ulint len
Log record body length in bytes.
Definition: log0recv.h:272
 
lsn_t end_lsn
End lsn of the log segment written by the mtr which generated this log record: NOTE that this is not ...
Definition: log0recv.h:285
 
Node rec_list
List node, list anchored in recv_addr_t.
Definition: log0recv.h:288
 
mlog_id_t type
Log record type.
Definition: log0recv.h:269
 
typedef UT_LIST_BASE_NODE_T(rw_lock_t, list) rw_lock_list_t
 
#define UNIV_NOTHROW
Definition: univ.i:456
 
unsigned long int ulint
Definition: univ.i:406
 
Utilities for byte operations.
 
#define ut_ad(EXPR)
Debug assertion.
Definition: ut0dbg.h:69
 
#define UT_LIST_NODE_T(t)
Macro used for legacy reasons.
Definition: ut0lst.h:64
 
Dynamic memory allocation routines and custom allocators specifically crafted to support memory instr...
 
static uint64_t lsn
Definition: xcom_base.cc:446