MySQL 8.0.40
Source Code Documentation
|
Redo log archiving system. More...
#include <arch0arch.h>
Public Member Functions | |
Arch_Log_Sys () | |
Constructor: Initialize members. More... | |
~Arch_Log_Sys () | |
Destructor: Free mutex. More... | |
bool | is_active () const |
Check if archiving is in progress. More... | |
bool | is_init () const |
Check if archiver system is in initial state. More... | |
lsn_t | get_archived_lsn () const |
Get LSN up to which redo is archived. More... | |
os_offset_t | get_recommended_file_size () const |
Get recommended archived redo file size. More... | |
Arch_Group * | get_arch_group () |
Get current redo log archive group. More... | |
int | start (Arch_Group *&group, lsn_t &start_lsn, byte *header, bool is_durable) |
Start redo log archiving. More... | |
int | stop (Arch_Group *group, lsn_t &stop_lsn, byte *log_blk, uint32_t &blk_len) |
Stop redo log archiving. More... | |
void | force_abort () |
Force to abort the archiver (state becomes ARCH_STATE_IDLE or ARCH_STATE_ABORT). More... | |
void | release (Arch_Group *group, bool is_durable) |
Release the current group from client. More... | |
bool | archive (bool init, Arch_File_Ctx *curr_ctx, lsn_t *arch_lsn, bool *wait) |
Archive accumulated redo log in current group. More... | |
void | arch_mutex_enter () |
Acquire redo log archiver mutex. More... | |
void | arch_mutex_exit () |
Release redo log archiver mutex. More... | |
Arch_Log_Sys (Arch_Log_Sys const &)=delete | |
Disable copy construction. More... | |
Arch_Log_Sys & | operator= (Arch_Log_Sys const &)=delete |
Disable assignment. More... | |
Private Member Functions | |
bool | wait_idle () |
Wait for archive system to come out of ARCH_STATE_PREPARE_IDLE. More... | |
int | wait_archive_complete (lsn_t target_lsn) |
Wait for redo log archive up to the target LSN. More... | |
void | update_header (byte *header, lsn_t file_start_lsn, lsn_t checkpoint_lsn) |
Update checkpoint LSN and related information in redo log header block. More... | |
Arch_State | check_set_state (bool is_abort, lsn_t *archived_lsn, uint *to_archive) |
Check and set log archive system state and output the amount of redo log available for archiving. More... | |
dberr_t | copy_log (Arch_File_Ctx *file_ctx, lsn_t start_lsn, uint length) |
Copy redo log from file context to archiver files. More... | |
void | update_state_low (Arch_State state) |
Update m_state to the given state. More... | |
void | update_state (Arch_State state) |
Acquires log_sys's m_files_mutex, writer_mutex and calls. More... | |
Private Attributes | |
ib_mutex_t | m_mutex |
Mutex to protect concurrent start, stop operations. More... | |
Arch_State | m_state |
Archiver system state. More... | |
atomic_lsn_t | m_archived_lsn |
System has archived log up to this LSN. More... | |
Arch_Grp_List | m_group_list |
List of log archive groups. More... | |
Arch_Group * | m_current_group |
Current archive group. More... | |
uint | m_chunk_size |
Chunk size to copy redo data. More... | |
uint | m_start_log_index |
System log file number where the archiving started. More... | |
uint64_t | m_start_log_offset |
System log file offset where the archiving started. More... | |
Arch_log_consumer | m_log_consumer |
Redo log consumer that can be registered to prevent consumption of redo log files which still haven't been archived. More... | |
Redo log archiving system.
|
inline |
Constructor: Initialize members.
|
inline |
Destructor: Free mutex.
|
delete |
Disable copy construction.
|
inline |
Acquire redo log archiver mutex.
It synchronizes concurrent start and stop operations by multiple clients.
|
inline |
Release redo log archiver mutex.
bool Arch_Log_Sys::archive | ( | bool | init, |
Arch_File_Ctx * | curr_ctx, | ||
lsn_t * | arch_lsn, | ||
bool * | wait | ||
) |
Archive accumulated redo log in current group.
This interface is for archiver background task to archive redo log data by calling it repeatedly over time.
[in,out] | init | true when called the first time; it will then be set to false |
[in] | curr_ctx | system redo logs to copy data from |
[out] | arch_lsn | LSN up to which archiving is completed |
[out] | wait | true, if no more redo to archive |
|
private |
Check and set log archive system state and output the amount of redo log available for archiving.
[in] | is_abort | need to abort |
[in,out] | archived_lsn | LSN up to which redo log is archived |
[out] | to_archive | amount of redo log to be archived |
|
private |
Copy redo log from file context to archiver files.
[in] | file_ctx | file context for system redo logs |
[in] | start_lsn | lsn at which we start copying |
[in] | length | data to copy in bytes |
void Arch_Log_Sys::force_abort | ( | ) |
Force to abort the archiver (state becomes ARCH_STATE_IDLE or ARCH_STATE_ABORT).
|
inline |
Get current redo log archive group.
|
inline |
Get LSN up to which redo is archived.
os_offset_t Arch_Log_Sys::get_recommended_file_size | ( | ) | const |
Get recommended archived redo file size.
|
inline |
Check if archiving is in progress.
In ARCH_STATE_PREPARE_IDLE state, all clients have already detached but archiver background task is yet to finish.
|
inline |
Check if archiver system is in initial state.
|
delete |
Disable assignment.
void Arch_Log_Sys::release | ( | Arch_Group * | group, |
bool | is_durable | ||
) |
Release the current group from client.
[in] | group | group the client is attached to |
[in] | is_durable | if client needs durable archiving |
int Arch_Log_Sys::start | ( | Arch_Group *& | group, |
lsn_t & | start_lsn, | ||
byte * | header, | ||
bool | is_durable | ||
) |
Start redo log archiving.
If archiving is already in progress, the client is attached to current group.
[out] | group | log archive group |
[out] | start_lsn | start lsn for client |
[out] | header | redo log header |
[in] | is_durable | if client needs durable archiving |
int Arch_Log_Sys::stop | ( | Arch_Group * | group, |
lsn_t & | stop_lsn, | ||
byte * | log_blk, | ||
uint32_t & | blk_len | ||
) |
Stop redo log archiving.
If other clients are there, the client is detached from the current group.
[out] | group | log archive group |
[out] | stop_lsn | stop lsn for client |
[out] | log_blk | redo log trailer block |
[in,out] | blk_len | length in bytes |
|
private |
Update checkpoint LSN and related information in redo log header block.
[in,out] | header | redo log header buffer |
[in] | file_start_lsn | LSN of first data byte within file |
[in] | checkpoint_lsn | LSN of the checkpoint within the file or 0 |
|
private |
Acquires log_sys's m_files_mutex, writer_mutex and calls.
[in] | state | state to assign to m_state |
|
private |
Update m_state to the given state.
Then check if Arch_Log_Sys is active and accordingly register or unregister the
[in] | state | state to assign to m_state |
|
private |
Wait for redo log archive up to the target LSN.
We need to wait till current log sys LSN during archive stop.
[in] | target_lsn | target archive LSN to wait for |
|
private |
Wait for archive system to come out of ARCH_STATE_PREPARE_IDLE.
If the system is preparing to idle, start needs to wait for it to come to idle state.
|
private |
System has archived log up to this LSN.
|
private |
Chunk size to copy redo data.
|
private |
Current archive group.
|
private |
List of log archive groups.
|
private |
Redo log consumer that can be registered to prevent consumption of redo log files which still haven't been archived.
|
private |
Mutex to protect concurrent start, stop operations.
|
private |
System log file number where the archiving started.
|
private |
System log file offset where the archiving started.
|
private |
Archiver system state.
m_state is protected by m_mutex and log_t::writer_mutex. For changing the state both needs to be acquired. For reading, hold any of the two mutexes. Same is true for m_archived_lsn.