33#ifndef CLONE_REPL_INCLUDE
34#define CLONE_REPL_INCLUDE
54using Gtid_info = std::array<unsigned char, GTID_INFO_SIZE>;
145 <<
"GTID recovery trx_no: " << max_trx_no;
148 if (max_trx_no == 0) {
247 int list_index = (list_number &
static_cast<uint64_t
>(1));
265 ut_a(request_number > 0);
274 return (request_number);
304 ut_ad(active_list.size() == 0);
306 return (flush_number);
Persist GTID along with transaction commit.
Definition: clone0repl.h:72
std::atomic< bool > m_flush_in_progress
Flush of GTID is in progress.
Definition: clone0repl.h:378
trx_id_t get_oldest_trx_no()
Get oldest transaction number for which GTID is not persisted to table.
Definition: clone0repl.h:120
static const int s_max_gtid_threshold
Maximum Number of transaction/GTID to hold.
Definition: clone0repl.h:342
Clone_persist_gtid & operator=(Clone_persist_gtid const &)=delete
Disable assignment.
bool wait_thread(bool start, bool flush, uint64_t flush_number, bool compress, bool early_timeout, Clone_Alert_Func cbk)
Wait for gtid thread to start, finish or flush.
Definition: clone0repl.cc:658
bool start()
Start GTID persistence and background thread.
Definition: clone0repl.cc:726
void stop()
Definition: clone0repl.cc:745
bool has_gtid(trx_t *trx, THD *&thd, bool &passed_check)
Check if current transaction has GTID.
Definition: clone0repl.cc:281
trx_undo_t::Gtid_storage persists_gtid(const trx_t *trx)
Check if GTID persistence is set.
Definition: clone0repl.cc:88
static const int s_gtid_threshold
Number of transaction/GTID threshold for writing to disk table.
Definition: clone0repl.h:337
void set_persist_gtid(trx_t *trx, bool set)
Set or reset GTID persist flag in THD.
Definition: clone0repl.cc:109
std::atomic< bool > m_explicit_request
If explicit request to flush is made.
Definition: clone0repl.h:356
bool is_active() const
Definition: clone0repl.h:112
void update_gtid_trx_no(trx_id_t new_gtid_trx_no)
Update transaction number up to which GTIDs are flushed to table.
Definition: clone0repl.cc:485
static constexpr std::chrono::milliseconds s_time_threshold
Time threshold to trigger persisting GTID.
Definition: clone0repl.h:331
std::atomic< int > m_num_gtid_mem
Number of GTID accumulated in memory.
Definition: clone0repl.h:375
Gtid_info_list & get_active_list()
Definition: clone0repl.h:238
Gtid_info_list m_gtids[2]
Two lists of GTID.
Definition: clone0repl.h:347
bool check_gtid_rollback(THD *thd, trx_t *trx, bool found_gtid)
Check if GTID needs to persist at rollback.
Definition: clone0repl.cc:243
bool check_flushed(uint64_t request_number) const
Check if flush has finished up to a list number.
Definition: clone0repl.h:280
bool debug_skip_write(bool compression)
Check if we need to skip write or compression based on debug variables.
Definition: clone0repl.cc:409
void periodic_write()
Write GTIDs periodically to disk table.
Definition: clone0repl.cc:588
Clone_persist_gtid()
Constructor: start gtid thread.
Definition: clone0repl.h:75
std::atomic< uint64_t > m_active_number
Number of the current GTID list.
Definition: clone0repl.h:350
os_event_t m_event
Event for GTID background thread.
Definition: clone0repl.h:362
uint64_t m_flush_request_number
Number for which last flush request was made.
Definition: clone0repl.h:359
bool check_compress()
Check if GTID compression is necessary based on threshold.
Definition: clone0repl.cc:385
void set_oldest_trx_no_recovery(trx_id_t max_trx_no)
Set oldest transaction number for which GTID is not persisted to table.
Definition: clone0repl.h:143
uint32_t m_compression_counter
Counter to keep track of the number of writes till it reaches compression threshold.
Definition: clone0repl.h:366
static const uint32_t s_compression_threshold
Threshold for the count for compressing GTID.
Definition: clone0repl.h:334
void flush_gtids(THD *thd)
Write all GTIDs to table and update GTID transaction number.
Definition: clone0repl.cc:502
bool check_max_gtid_threshold()
Definition: clone0repl.cc:580
bool trx_check_set(trx_t *trx, bool prepare, bool rollback, bool &set_explicit)
Set transaction flag to persist GTID and check if space need to be allocated for GTID.
Definition: clone0repl.cc:163
bool check_gtid_prepare(THD *thd, trx_t *trx, bool found_gtid, bool &alloc)
Check if GTID needs to persist at XA prepare.
Definition: clone0repl.cc:192
std::atomic< bool > m_thread_active
true, if background thread is active.
Definition: clone0repl.h:384
std::atomic< uint64_t > m_gtid_trx_no
Definition: clone0repl.h:372
~Clone_persist_gtid()
Destructor: stop gtid thread.
Definition: clone0repl.h:92
Clone_persist_gtid(Clone_persist_gtid const &)=delete
Disable copy construction.
void add(const Gtid_desc >id_desc)
Add GTID to in memory list.
Definition: clone0repl.cc:46
std::atomic< bool > m_close_thread
Set to true, when the background thread is asked to exit.
Definition: clone0repl.h:381
uint64_t request_immediate_flush(bool compress)
Request immediate flush of all GTIDs accumulated.
Definition: clone0repl.h:259
uint64_t switch_active_list()
Switch active GTID list.
Definition: clone0repl.h:294
void get_gtid_info(trx_t *trx, Gtid_desc >id_desc)
Get transaction GTID information.
Definition: clone0repl.cc:337
int write_other_gtids()
Write GTIDs of non Innodb transactions to table.
Definition: clone0repl.cc:377
bool flush_immediate() const
Definition: clone0repl.h:285
std::atomic< bool > m_active
true, if GTID persistence is active.
Definition: clone0repl.h:387
Gtid_info_list & get_list(uint64_t list_number)
Definition: clone0repl.h:246
int write_to_table(uint64_t flush_list_number, Gtid_set &table_gtid_set, Tsid_map &tsid_map)
Persist GTID to gtid_executed table.
Definition: clone0repl.cc:420
std::atomic< uint64_t > m_flush_number
Number up to which GTIDs are flushed.
Definition: clone0repl.h:353
void wait_flush(bool compress_gtid, bool early_timeout, Clone_Alert_Func cbk)
Definition: clone0repl.cc:754
bool check_gtid_commit(THD *thd, bool found_gtid, bool &set_explicit)
Check if GTID needs to persist at commit.
Definition: clone0repl.cc:230
uint32_t m_compression_gtid_counter
Counter to keep number of GTIDs flushed before compression.
Definition: clone0repl.h:369
bool is_thread_active() const
Definition: clone0repl.h:115
Represents a set of GTIDs.
Definition: rpl_gtid.h:1558
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
Represents a bidirectional map between TSID and SIDNO.
Definition: rpl_gtid.h:751
The class info is used to emit informational log messages.
Definition: ut0log.h:183
Performance Schema stage instrumentation to monitor clone progress.
std::function< int()> Clone_Alert_Func
Function to alert caller for long wait.
Definition: clone0monitor.h:43
constexpr uint32_t GTID_VERSION
GTID format version.
Definition: clone0repl.h:51
std::vector< Gtid_desc > Gtid_info_list
List of GTIDs.
Definition: clone0repl.h:59
constexpr size_t GTID_INFO_SIZE
Serialized GTID information size.
Definition: clone0repl.h:48
std::array< unsigned char, GTID_INFO_SIZE > Gtid_info
Serialized GTID.
Definition: clone0repl.h:54
static int compress(PACK_MRG_INFO *file, char *join_name)
Definition: myisampack.cc:466
std::chrono::milliseconds milliseconds
Definition: authorize_manager.cc:69
static mysql_service_status_t flush(reference_caching_cache cache) noexcept
Definition: component.cc:114
std::set< Key, Compare, ut::allocator< Key > > set
Specialization of set which uses ut_allocator.
Definition: ut0new.h:2732
os_event_t os_event_create()
Creates an event semaphore, i.e., a semaphore which may just have two states: signaled and nonsignale...
Definition: os0event.cc:514
void os_event_destroy(os_event_t &event)
Frees an event object.
Definition: os0event.cc:579
The interface to the threading wrapper.
static bool rollback(THD *thd)
Abort the current statement and transaction.
Definition: sql_cmd_srs.cc:140
ulong srv_force_recovery
Normally 0.
Definition: srv0srv.cc:527
@ SRV_FORCE_NO_UNDO_LOG_SCAN
do not look at undo logs when starting the database: InnoDB will treat even incomplete transactions a...
Definition: srv0srv.h:923
Starts the Innobase database server.
GTID descriptor with version information.
Definition: clone0repl.h:62
uint32_t m_version
Definition: clone0repl.h:68
bool m_is_set
If GTID descriptor is set.
Definition: clone0repl.h:64
Gtid_info m_info
Serialized GTID information.
Definition: clone0repl.h:66
InnoDB condition variable.
Definition: os0event.cc:63
Definition: trx0trx.h:670
Gtid_storage
Undo log may could be allocated to store transaction GTIDs.
Definition: trx0undo.h:355
static void trx_sys_serialisation_mutex_exit()
Release the trx_sys->serialisation_mutex.
Definition: trx0sys.h:841
static void trx_sys_serialisation_mutex_enter()
Acquire the trx_sys->serialisation_mutex.
Definition: trx0sys.h:836
static bool trx_sys_serialisation_mutex_own()
Test if trx_sys->serialisation_mutex is owned.
Definition: trx0sys.h:830
constexpr trx_id_t TRX_ID_MAX
Maximum transaction identifier.
Definition: trx0types.h:145
ib_id_t trx_id_t
Transaction identifier (DB_TRX_ID, DATA_TRX_ID)
Definition: trx0types.h:138
#define ut_ad(EXPR)
Debug assertion.
Definition: ut0dbg.h:109
#define ut_a(EXPR)
Abort execution if EXPR does not evaluate to nonzero.
Definition: ut0dbg.h:97
static void prepare(pax_msg *p, pax_op op)
Definition: xcom_base.cc:1592