MySQL 26.7.0
Source Code Documentation
mysql::csa::Relay_log_deleter Class Reference

Class responsible for removing relay log file, when the last handle to this deleter is released. More...

#include <relay_log_deleter.h>

Public Member Functions

 Relay_log_deleter (const std::string &rl_file_name, Log_purge_controller_sptr purger)
 Constructor that initializes metadata needed for relay log deletion. More...
 
 ~Relay_log_deleter ()
 Destructor that removes the relay log file when the last reference is released. More...
 
void add_subscriber ()
 Adds a subscriber to handled relay log file. More...
 
void set_subscriber_success ()
 Notifies that subscriber succeeded. More...
 
const std::string & get_file_name () const
 Handled file name accessor. More...
 

Private Member Functions

void remove_handled_relay_log () const
 Physically removes relay log file from disk and index file. More...
 

Private Attributes

std::string m_rl_file_name {""}
 Relay log name handled by this deleter. More...
 
std::atomic< std::size_t > m_subscribers {0}
 With below variables we track relay log file subscribers and the number of successful subscribers. More...
 
std::atomic< std::size_t > m_successfull_subscribers {0}
 The number of successful subscribers (see above) More...
 
Log_purge_controller_sptr m_purger
 Pointer to the relay log purger. More...
 

Detailed Description

Class responsible for removing relay log file, when the last handle to this deleter is released.

To know if we are allowed to delete this relay log file, we need to track its subscribers and the number of successfull subscribers. If these two numbers are equal and the last reference to the Relay_log_deleter is released, we are allowed to remove the relay log. Otherwise, deleter won't remove the file. Object of this class is created by relay log metadata reader. Each event batch in a transaction will contain shared reference to this object. When event batch is successfully processed, i.e., job done notified in

See also
Fetchable_transaction::set_success callback, it will release reference to the Relay_log_deleter (in destructor). Another subscriber of the relay log file deleter is the relay log reader, which must hold reference until the file changes or closes.

Constructor & Destructor Documentation

◆ Relay_log_deleter()

mysql::csa::Relay_log_deleter::Relay_log_deleter ( const std::string &  rl_file_name,
Log_purge_controller_sptr  purger 
)

Constructor that initializes metadata needed for relay log deletion.

Parameters
rl_file_nameReferenced relay log filename
purgerRelay log purger pointer

◆ ~Relay_log_deleter()

mysql::csa::Relay_log_deleter::~Relay_log_deleter ( )

Destructor that removes the relay log file when the last reference is released.

Member Function Documentation

◆ add_subscriber()

void mysql::csa::Relay_log_deleter::add_subscriber ( )

Adds a subscriber to handled relay log file.

◆ get_file_name()

const std::string & mysql::csa::Relay_log_deleter::get_file_name ( ) const

Handled file name accessor.

Returns
Handled file name

◆ remove_handled_relay_log()

void mysql::csa::Relay_log_deleter::remove_handled_relay_log ( ) const
private

Physically removes relay log file from disk and index file.

◆ set_subscriber_success()

void mysql::csa::Relay_log_deleter::set_subscriber_success ( )

Notifies that subscriber succeeded.

Member Data Documentation

◆ m_purger

Log_purge_controller_sptr mysql::csa::Relay_log_deleter::m_purger
private

Pointer to the relay log purger.

◆ m_rl_file_name

std::string mysql::csa::Relay_log_deleter::m_rl_file_name {""}
private

Relay log name handled by this deleter.

◆ m_subscribers

std::atomic<std::size_t> mysql::csa::Relay_log_deleter::m_subscribers {0}
private

With below variables we track relay log file subscribers and the number of successful subscribers.

If the number of subscribers is equal to the number of successful subscribers, we may remove the relay log. Inverse logic could be implemented with one atomic flag, however, this way we would not know if some transaction was killed without setting an error state (TBC).

◆ m_successfull_subscribers

std::atomic<std::size_t> mysql::csa::Relay_log_deleter::m_successfull_subscribers {0}
private

The number of successful subscribers (see above)


The documentation for this class was generated from the following files: