MySQL 8.4.4
Source Code Documentation
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages Concepts
AckContainer Class Reference

AckContainer stores received acks internally and tell the caller the ack's position when a transaction is fully acknowledged, so it can wake up the waiting transactions. More...

#include <semisync_source.h>

Inheritance diagram for AckContainer:
[legend]

Public Member Functions

 AckContainer ()
 
 ~AckContainer ()
 
void clear ()
 Clear the content of the ack array. More...
 
int resize (unsigned int size, const AckInfo **ackinfo)
 Adjust capacity for the container and report the ack to semisync master, if it is full. More...
 
const AckInfoinsert (int server_id, const char *log_file_name, my_off_t log_file_pos)
 Insert an ack's information into the container and report the minimum ack to semisync master if it is full. More...
 
const AckInfoinsert (const AckInfo &ackinfo)
 
- Public Member Functions inherited from Trace
void function_enter (const char *func_name)
 
int function_exit (const char *func_name, int exit_code)
 
bool function_exit (const char *func_name, bool exit_code)
 
void function_exit (const char *func_name)
 
 Trace ()
 
 Trace (unsigned long trace_level)
 

Private Member Functions

 AckContainer (AckContainer &container)
 
AckContaineroperator= (const AckContainer &container)
 
bool full ()
 
unsigned int size ()
 
void remove_all (const char *log_file_name, my_off_t log_file_pos)
 Remove all acks which equal to the given position. More...
 
unsigned int updateIfExist (int server_id, const char *log_file_name, my_off_t log_file_pos)
 Update a slave's ack into the container if another ack of the slave is already in it. More...
 
AckInfominAck (const char *log_file_name, my_off_t log_file_pos)
 Find the minimum ack which is smaller than given position. More...
 

Private Attributes

AckInfo m_greatest_ack
 
AckInfom_ack_array
 
unsigned int m_size
 
unsigned int m_empty_slot
 

Additional Inherited Members

- Public Attributes inherited from Trace
unsigned long trace_level_
 
- Static Public Attributes inherited from Trace
static const unsigned long kTraceFunction = 0x0040
 
static const unsigned long kTraceGeneral = 0x0001
 
static const unsigned long kTraceDetail = 0x0010
 
static const unsigned long kTraceNetWait = 0x0020
 

Detailed Description

AckContainer stores received acks internally and tell the caller the ack's position when a transaction is fully acknowledged, so it can wake up the waiting transactions.

Constructor & Destructor Documentation

◆ AckContainer() [1/2]

AckContainer::AckContainer ( )
inline

◆ ~AckContainer()

AckContainer::~AckContainer ( )
inline

◆ AckContainer() [2/2]

AckContainer::AckContainer ( AckContainer container)
private

Member Function Documentation

◆ clear()

void AckContainer::clear ( )
inline

Clear the content of the ack array.

◆ full()

bool AckContainer::full ( )
inlineprivate

◆ insert() [1/2]

const AckInfo * AckContainer::insert ( const AckInfo ackinfo)
inline

◆ insert() [2/2]

const AckInfo * AckContainer::insert ( int  server_id,
const char *  log_file_name,
my_off_t  log_file_pos 
)

Insert an ack's information into the container and report the minimum ack to semisync master if it is full.

Parameters
[in]server_idslave server_id of the ack
[in]log_file_namebinlog file name of the ack
[in]log_file_posbinlog file position of the ack
Returns
Pointer of an ack if the ack should be reported to semisync master. Otherwise, NULL is returned.

◆ minAck()

AckInfo * AckContainer::minAck ( const char *  log_file_name,
my_off_t  log_file_pos 
)
inlineprivate

Find the minimum ack which is smaller than given position.

When more than one slots are minimum acks, it returns the one has smallest index.

Parameters
[in]log_file_namebinlog file name
[in]log_file_posbinlog file position
Returns
NULL if no ack is smaller than given position, otherwise return its pointer.

◆ operator=()

AckContainer & AckContainer::operator= ( const AckContainer container)
private

◆ remove_all()

void AckContainer::remove_all ( const char *  log_file_name,
my_off_t  log_file_pos 
)
inlineprivate

Remove all acks which equal to the given position.

Parameters
[in]log_file_namebinlog name of the ack that should be removed
[in]log_file_posbinlog position of the ack that should removed

◆ resize()

int AckContainer::resize ( unsigned int  size,
const AckInfo **  ackinfo 
)

Adjust capacity for the container and report the ack to semisync master, if it is full.

Parameters
[in]sizesize of the container.
ackinfoAcknowledgement information
Returns
0 if succeeds, otherwise fails.

◆ size()

unsigned int AckContainer::size ( )
inlineprivate

◆ updateIfExist()

unsigned int AckContainer::updateIfExist ( int  server_id,
const char *  log_file_name,
my_off_t  log_file_pos 
)
inlineprivate

Update a slave's ack into the container if another ack of the slave is already in it.

Parameters
[in]server_idserver_id of the ack
[in]log_file_namebinlog file name of the ack
[in]log_file_posbinlog file position of the ack
Returns
index of the slot that is updated. if it equals to the size of container, then no slot is updated.

Member Data Documentation

◆ m_ack_array

AckInfo* AckContainer::m_ack_array
private

◆ m_empty_slot

unsigned int AckContainer::m_empty_slot
private

◆ m_greatest_ack

AckInfo AckContainer::m_greatest_ack
private

◆ m_size

unsigned int AckContainer::m_size
private

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