32#ifndef CLONE_REPL_INCLUDE
33#define CLONE_REPL_INCLUDE
52using Gtid_info = std::array<unsigned char, GTID_INFO_SIZE>;
143 <<
"GTID recovery trx_no: " << max_trx_no;
146 if (max_trx_no == 0) {
245 int list_index = (list_number &
static_cast<uint64_t
>(1));
263 ut_a(request_number > 0);
272 return (request_number);
302 ut_ad(active_list.size() == 0);
304 return (flush_number);
Persist GTID along with transaction commit.
Definition: clone0repl.h:70
std::atomic< bool > m_flush_in_progress
Flush of GTID is in progress.
Definition: clone0repl.h:376
trx_id_t get_oldest_trx_no()
Get oldest transaction number for which GTID is not persisted to table.
Definition: clone0repl.h:118
static const int s_max_gtid_threshold
Maximum Number of transaction/GTID to hold.
Definition: clone0repl.h:340
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:650
bool start()
Start GTID persistence and background thread.
Definition: clone0repl.cc:718
void stop()
Definition: clone0repl.cc:737
bool has_gtid(trx_t *trx, THD *&thd, bool &passed_check)
Check if current transaction has GTID.
Definition: clone0repl.cc:279
trx_undo_t::Gtid_storage persists_gtid(const trx_t *trx)
Check if GTID persistence is set.
Definition: clone0repl.cc:86
static const int s_gtid_threshold
Number of transaction/GTID threshold for writing to disk table.
Definition: clone0repl.h:335
void set_persist_gtid(trx_t *trx, bool set)
Set or reset GTID persist flag in THD.
Definition: clone0repl.cc:107
std::atomic< bool > m_explicit_request
If explicit request to flush is made.
Definition: clone0repl.h:354
bool is_active() const
Definition: clone0repl.h:110
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:483
static constexpr std::chrono::milliseconds s_time_threshold
Time threshold to trigger persisting GTID.
Definition: clone0repl.h:329
std::atomic< int > m_num_gtid_mem
Number of GTID accumulated in memory.
Definition: clone0repl.h:373
Gtid_info_list & get_active_list()
Definition: clone0repl.h:236
Gtid_info_list m_gtids[2]
Two lists of GTID.
Definition: clone0repl.h:345
bool check_gtid_rollback(THD *thd, trx_t *trx, bool found_gtid)
Check if GTID needs to persist at rollback.
Definition: clone0repl.cc:241
bool check_flushed(uint64_t request_number) const
Check if flush has finished up to a list number.
Definition: clone0repl.h:278
bool debug_skip_write(bool compression)
Check if we need to skip write or compression based on debug variables.
Definition: clone0repl.cc:407
void periodic_write()
Write GTIDs periodically to disk table.
Definition: clone0repl.cc:586
Clone_persist_gtid()
Constructor: start gtid thread.
Definition: clone0repl.h:73
std::atomic< uint64_t > m_active_number
Number of the current GTID list.
Definition: clone0repl.h:348
os_event_t m_event
Event for GTID background thread.
Definition: clone0repl.h:360
uint64_t m_flush_request_number
Number for which last flush request was made.
Definition: clone0repl.h:357
bool check_compress()
Check if GTID compression is necessary based on threshold.
Definition: clone0repl.cc:383
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:141
uint32_t m_compression_counter
Counter to keep track of the number of writes till it reaches compression threshold.
Definition: clone0repl.h:364
static const uint32_t s_compression_threshold
Threshold for the count for compressing GTID.
Definition: clone0repl.h:332
void flush_gtids(THD *thd)
Write all GTIDs to table and update GTID transaction number.
Definition: clone0repl.cc:500
bool check_max_gtid_threshold()
Definition: clone0repl.cc:578
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:161
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:190
std::atomic< bool > m_thread_active
true, if background thread is active.
Definition: clone0repl.h:382
std::atomic< uint64_t > m_gtid_trx_no
Definition: clone0repl.h:370
~Clone_persist_gtid()
Destructor: stop gtid thread.
Definition: clone0repl.h:90
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:44
std::atomic< bool > m_close_thread
Set to true, when the background thread is asked to exit.
Definition: clone0repl.h:379
uint64_t request_immediate_flush(bool compress)
Request immediate flush of all GTIDs accumulated.
Definition: clone0repl.h:257
uint64_t switch_active_list()
Switch active GTID list.
Definition: clone0repl.h:292
void get_gtid_info(trx_t *trx, Gtid_desc >id_desc)
Get transaction GTID information.
Definition: clone0repl.cc:335
int write_other_gtids()
Write GTIDs of non Innodb transactions to table.
Definition: clone0repl.cc:375
bool flush_immediate() const
Definition: clone0repl.h:283
std::atomic< bool > m_active
true, if GTID persistence is active.
Definition: clone0repl.h:385
Gtid_info_list & get_list(uint64_t list_number)
Definition: clone0repl.h:244
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:418
std::atomic< uint64_t > m_flush_number
Number up to which GTIDs are flushed.
Definition: clone0repl.h:351
void wait_flush(bool compress_gtid, bool early_timeout, Clone_Alert_Func cbk)
Definition: clone0repl.cc:746
bool check_gtid_commit(THD *thd, bool found_gtid, bool &set_explicit)
Check if GTID needs to persist at commit.
Definition: clone0repl.cc:228
uint32_t m_compression_gtid_counter
Counter to keep number of GTIDs flushed before compression.
Definition: clone0repl.h:367
bool is_thread_active() const
Definition: clone0repl.h:113
Represents a set of GTIDs.
Definition: rpl_gtid.h:1555
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:35
Represents a bidirectional map between TSID and SIDNO.
Definition: rpl_gtid.h:748
Performance Schema stage instrumentation to monitor clone progress.
std::function< int()> Clone_Alert_Func
Function to alert caller for long wait.
Definition: clone0monitor.h:42
constexpr uint32_t GTID_VERSION
GTID format version.
Definition: clone0repl.h:49
std::vector< Gtid_desc > Gtid_info_list
List of GTIDs.
Definition: clone0repl.h:57
constexpr size_t GTID_INFO_SIZE
Serialized GTID information size.
Definition: clone0repl.h:46
std::array< unsigned char, GTID_INFO_SIZE > Gtid_info
Serialized GTID.
Definition: clone0repl.h:52
static int compress(PACK_MRG_INFO *file, char *join_name)
Definition: myisampack.cc:466
static mysql_service_status_t flush(reference_caching_cache cache) noexcept
Definition: component.cc:113
std::set< Key, Compare, ut::allocator< Key > > set
Specialization of set which uses ut_allocator.
Definition: ut0new.h:2881
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:527
void os_event_destroy(os_event_t &event)
Frees an event object.
Definition: os0event.cc:594
The interface to the threading wrapper.
static bool rollback(THD *thd)
Abort the current statement and transaction.
Definition: sql_cmd_srs.cc:139
@ 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:935
ulong srv_force_recovery
Normally 0.
Definition: srv0srv.cc:534
Starts the Innobase database server.
GTID descriptor with version information.
Definition: clone0repl.h:60
uint32_t m_version
Definition: clone0repl.h:66
bool m_is_set
If GTID descriptor is set.
Definition: clone0repl.h:62
Gtid_info m_info
Serialized GTID information.
Definition: clone0repl.h:64
InnoDB condition variable.
Definition: os0event.cc:62
Definition: trx0trx.h:683
Gtid_storage
Undo log may could be allocated to store transaction GTIDs.
Definition: trx0undo.h:340
static void trx_sys_serialisation_mutex_exit()
Release the trx_sys->serialisation_mutex.
Definition: trx0sys.h:620
static void trx_sys_serialisation_mutex_enter()
Acquire the trx_sys->serialisation_mutex.
Definition: trx0sys.h:615
static bool trx_sys_serialisation_mutex_own()
Test if trx_sys->serialisation_mutex is owned.
Definition: trx0sys.h:609
constexpr trx_id_t TRX_ID_MAX
Maximum transaction identifier.
Definition: trx0types.h:144
ib_id_t trx_id_t
Transaction identifier (DB_TRX_ID, DATA_TRX_ID)
Definition: trx0types.h:137
#define ut_ad(EXPR)
Debug assertion.
Definition: ut0dbg.h:104
#define ut_a(EXPR)
Abort execution if EXPR does not evaluate to nonzero.
Definition: ut0dbg.h:92
static void prepare(pax_msg *p, pax_op op)
Definition: xcom_base.cc:1587