107#define SLAVE_INIT_DBS_IN_GROUP 4
265template <
typename Element_type>
329 if (
empty())
return nullptr;
342 static constexpr size_t error_result = std::numeric_limits<size_t>::max();
431template <
typename Element_type>
437 const auto ret = (avail++) % capacity;
440 assert(len == avail -
entry);
441 assert(
entry < avail);
452template <
typename Element_type>
457 *item = m_Q[
entry++];
459 assert(len == avail -
entry);
460 assert(
entry <= avail);
464 if (
entry == capacity) {
467 assert(avail < capacity);
468 assert(avail == len);
473template <
typename Element_type>
479 assert(avail >
entry);
480 *item = m_Q[(--avail) % capacity];
482 assert(len == avail -
entry);
510 uint param_id,
const char *param_channel);
768 bool in_active_multi_stmt =
773 (
"Setting gtid_next.type to NOT_YET_DETERMINED_GTID"));
775 }
else if (in_active_multi_stmt) {
776 my_error(ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION,
MYF(0),
911 va_list v_args)
const override
912 MY_ATTRIBUTE((format(printf, 4, 0)));
Contains the classes representing events occurring in the replication stream.
Class representing an error.
Definition: error.h:47
Stores information to monitor a transaction during the different replication stages.
Definition: rpl_gtid.h:1310
This is the abstract base class for binary log events.
Definition: log_event.h:547
ulong mts_group_idx
Index in rli->gaq array to indicate a group that this event is purging.
Definition: log_event.h:702
Definition: rpl_rli.h:201
Format_description_log_event * get_rli_description_event() const
Return the current Format_description_log_event.
Definition: rpl_rli.h:1725
bool is_in_group() const
A group is defined as the entire range of events that constitute a transaction or auto-committed stat...
Definition: rpl_rli.h:1497
Log_event * current_event
Reference to being applied event.
Definition: rpl_rli.h:1995
Slave_committed_queue * gaq
Definition: rpl_rli.h:1168
ulong adapt_to_master_version_updown(ulong master_version, ulong current_version)
The method compares two supplied versions and carries out down- or up- grade customization of executi...
Definition: rpl_rli.cc:2585
Format_description_log_event * rli_description_event
Definition: rpl_rli.h:1801
Definition: rpl_info_handler.h:57
bool is_transactional() const
Definition: rpl_info.h:110
THD * info_thd
Definition: rpl_info.h:77
Group Assigned Queue whose first element identifies first gap in committed sequence.
Definition: rpl_rli_pdb.h:350
void free_dynamic_items()
Method should be executed at slave system stop to cleanup dynamically allocated items that remained a...
Definition: rpl_rli_pdb.cc:1506
bool de_queue(Slave_job_group *item)
Dequeue from head.
Definition: rpl_rli_pdb.h:409
Slave_committed_queue(size_t max, uint n)
Definition: rpl_rli_pdb.cc:1305
bool inited
Definition: rpl_rli_pdb.h:352
bool count_done(Relay_log_info *rli)
Definition: rpl_rli_pdb.cc:1323
ulong assigned_group_index
Definition: rpl_rli_pdb.h:366
bool de_tail(Slave_job_group *item)
Similar to de_queue() but removing an item from the tail side.
Definition: rpl_rli_pdb.h:419
size_t move_queue_head(Slave_worker_array *ws)
The queue is processed from the head item by item to purge items representing committed groups.
Definition: rpl_rli_pdb.cc:1367
Prealloced_array< ulonglong, 1 > last_done
Definition: rpl_rli_pdb.h:363
Slave_job_group * get_job_group(size_t ind)
Definition: rpl_rli_pdb.h:389
~Slave_committed_queue()
Definition: rpl_rli_pdb.h:370
void update_current_binlog(const char *post_rotate)
size_t find_lwm(Slave_job_group **, size_t)
Finds low-water mark of committed jobs in GAQ.
Definition: rpl_rli_pdb.cc:1469
size_t en_queue(Slave_job_group *item)
Assigns assigned_group_index to an index of enqueued item and returns it.
Definition: rpl_rli_pdb.h:398
Slave_job_group lwm
Definition: rpl_rli_pdb.h:360
Definition: rpl_rli_pdb.h:486
Slave_jobs_queue()
Definition: rpl_rli_pdb.h:488
bool overfill
Definition: rpl_rli_pdb.h:493
ulonglong waited_overfill
Definition: rpl_rli_pdb.h:494
Error const & last_error() const
Definition: rpl_reporting.h:136
Definition: rpl_rli_pdb.h:497
ulonglong get_master_log_pos()
Definition: rpl_rli_pdb.h:635
ulong underrun_level
Definition: rpl_rli_pdb.h:572
char checkpoint_relay_log_name[FN_REFLEN]
Definition: rpl_rli_pdb.h:582
Prealloced_array< db_worker_hash_entry *, SLAVE_INIT_DBS_IN_GROUP > curr_group_exec_parts
Definition: rpl_rli_pdb.h:520
ulong excess_cnt
Definition: rpl_rli_pdb.h:577
bool curr_group_seen_sequence_number
Definition: rpl_rli_pdb.h:523
bool read_and_apply_events(uint start_relay_number, my_off_t start_relay_pos, uint end_relay_number, my_off_t end_relay_pos)
Read events from relay logs and apply them.
Definition: rpl_rli_pdb.cc:1942
void reset_gaq_index()
Definition: rpl_rli_pdb.h:799
ulong overrun_level
Definition: rpl_rli_pdb.h:567
bool commit_positions() override
The method is a wrapper to provide uniform interface with STS and is to be called from Relay_log_info...
Definition: rpl_rli_pdb.h:642
ulong bitmap_shifted
Definition: rpl_rli_pdb.h:559
longlong sequence_number()
Definition: rpl_rli_pdb.h:879
void reset_commit_order_deadlock()
Definition: rpl_rli_pdb.cc:1767
int flush_info(bool force=false)
Definition: rpl_rli_pdb.cc:470
int set_rli_description_event(Format_description_log_event *fdle) override
The method runs at Worker initialization, at runtime when Coordinator supplied a new FD event for exe...
Definition: rpl_rli_pdb.h:695
ulonglong checkpoint_master_log_pos
Definition: rpl_rli_pdb.h:585
Slave_jobs_queue jobs
Definition: rpl_rli_pdb.h:514
volatile bool relay_log_change_notified
Definition: rpl_rli_pdb.h:543
MY_BITMAP group_shifted
Definition: rpl_rli_pdb.h:587
ulong worker_checkpoint_seqno
Definition: rpl_rli_pdb.h:589
bool worker_sleep(ulong seconds)
Sleep for a given amount of seconds or until killed.
Definition: rpl_rli_pdb.cc:1745
void copy_values_for_PFS(ulong worker_id, en_running_state running_status, THD *worker_thd, const Error &last_error, Gtid_monitoring_info *monitoring_info_arg)
Definition: rpl_rli_pdb.cc:553
std::tuple< bool, bool, uint > check_and_report_end_of_retries(THD *thd)
Checks if the transaction can be retried, and if not, reports an error.
Definition: rpl_rli_pdb.cc:1791
ulong gaq_index
Definition: rpl_rli_pdb.h:915
void post_commit(bool on_rollback) override
See the comments for STS version of this method.
Definition: rpl_rli_pdb.h:652
void do_report(loglevel level, int err_code, const char *msg, va_list v_args) const override
Definition: rpl_rli_pdb.cc:1524
const char * get_for_channel_str(bool upper_case=false) const override
return an extension "for channel channel_name" for error messages per channel
Definition: rpl_rli_pdb.cc:2562
void report_commit_order_deadlock()
Called when replica-preserve-commit-order is enabled, by the worker processing an earlier transaction...
Definition: rpl_rli_pdb.cc:1775
Slave_worker(const Slave_worker &info)
Slave_worker(Relay_log_info *rli, PSI_mutex_key *param_key_info_run_lock, PSI_mutex_key *param_key_info_data_lock, PSI_mutex_key *param_key_info_sleep_lock, PSI_mutex_key *param_key_info_thd_lock, PSI_mutex_key *param_key_info_data_cond, PSI_mutex_key *param_key_info_start_cond, PSI_mutex_key *param_key_info_stop_cond, PSI_mutex_key *param_key_info_sleep_cond, uint param_id, const char *param_channel)
Definition: rpl_rli_pdb.cc:242
bool write_info(Rpl_info_handler *to) override
Definition: rpl_rli_pdb.cc:575
int init_worker(Relay_log_info *, ulong)
Method is executed by Coordinator at Worker startup time to initialize members parly with values supp...
Definition: rpl_rli_pdb.cc:314
static uint get_channel_field_index()
Returns the index of the Channel_name field of the table repository.
Definition: rpl_rli_pdb.cc:2570
bool read_info(Rpl_info_handler *from) override
Definition: rpl_rli_pdb.cc:501
void assign_partition_db(Log_event *ev)
Definition: rpl_rli_pdb.cc:2055
const char * get_master_log_name()
Definition: rpl_rli_pdb.cc:625
static void set_nullable_fields(MY_BITMAP *nullable_fields)
Sets bits for columns that are allowed to be NULL.
Definition: rpl_rli_pdb.cc:619
bool set_info_search_keys(Rpl_info_handler *to) override
To search in the slave repositories, each slave info object (mi, rli or worker) should use a primary ...
Definition: rpl_rli_pdb.cc:564
ulong server_version
Definition: rpl_rli_pdb.h:591
volatile int curr_jobs
Definition: rpl_rli_pdb.h:537
ulong id
Definition: rpl_rli_pdb.h:525
void prepare_for_retry(Log_event &event)
Make the necessary changes to both the Slave_worker and current Log_event objects,...
Definition: rpl_rli_pdb.cc:1781
Slave_worker & operator=(const Slave_worker &info)
ulonglong master_log_pos
Definition: rpl_rli_pdb.h:916
int slave_worker_exec_event(Log_event *ev)
MTS worker main routine.
Definition: rpl_rli_pdb.cc:1654
ulong get_master_server_version()
Definition: rpl_rli_pdb.h:903
bool end_group_sets_max_dbs
Definition: rpl_rli_pdb.h:541
ulong events_done
Definition: rpl_rli_pdb.h:535
bool exit_incremented
Definition: rpl_rli_pdb.h:621
volatile ulong last_group_done_index
Definition: rpl_rli_pdb.h:531
Relay_log_info * c_rli
Definition: rpl_rli_pdb.h:517
bool found_commit_order_deadlock()
Return true if replica-preserve-commit-order is enabled and an earlier transaction is waiting for a r...
Definition: rpl_rli_pdb.cc:1771
Relay_log_info * get_c_rli() override
Get coordinator's RLI.
Definition: rpl_rli_pdb.h:871
bool reset_recovery_info()
Clean up a part of Worker info table that is regarded in in gaps collecting at recovery.
Definition: rpl_rli_pdb.cc:606
mysql_mutex_t jobs_lock
Definition: rpl_rli_pdb.h:515
en_running_state
Definition: rpl_rli_pdb.h:592
@ NOT_RUNNING
Definition: rpl_rli_pdb.h:593
@ STOP_ACCEPTED
Definition: rpl_rli_pdb.h:597
@ RUNNING
Definition: rpl_rli_pdb.h:594
@ STOP
Definition: rpl_rli_pdb.h:596
@ ERROR_LEAVING
Definition: rpl_rli_pdb.h:595
void rollback_positions(Slave_job_group *ptr_g)
Definition: rpl_rli_pdb.cc:709
long wq_overrun_cnt
Definition: rpl_rli_pdb.h:561
static const uint * get_table_pk_field_indexes()
Returns an array with the expected column numbers of the primary key fields of the table repository.
Definition: rpl_rli_pdb.cc:2566
void slave_worker_ends_group(Log_event *, int)
Deallocation routine to cancel out few effects of map_db_to_worker().
Definition: rpl_rli_pdb.cc:1133
ulonglong set_master_log_pos(ulong val)
Definition: rpl_rli_pdb.h:636
bool m_flag_positions_committed
This flag indicates whether positions were already modified during the event processing,...
Definition: rpl_rli_pdb.h:925
std::atomic< bool > m_commit_order_deadlock
Definition: rpl_rli_pdb.h:920
bool retry_transaction(uint start_relay_number, my_off_t start_relay_pos, uint end_relay_number, my_off_t end_relay_pos)
It is called after an error happens.
Definition: rpl_rli_pdb.cc:1848
long usage_partition
Definition: rpl_rli_pdb.h:539
void set_gaq_index(ulong val)
Definition: rpl_rli_pdb.h:800
char checkpoint_master_log_name[FN_REFLEN]
Definition: rpl_rli_pdb.h:584
ulonglong last_groups_assigned_index
Definition: rpl_rli_pdb.h:533
void end_info()
Definition: rpl_rli_pdb.cc:456
en_running_state volatile running_status
Definition: rpl_rli_pdb.h:615
ulong wq_empty_waits
Definition: rpl_rli_pdb.h:534
ulonglong checkpoint_relay_log_pos
Definition: rpl_rli_pdb.h:583
bool fd_change_notified
Definition: rpl_rli_pdb.h:558
volatile bool checkpoint_notified
Definition: rpl_rli_pdb.h:544
ulong groups_done
Definition: rpl_rli_pdb.h:536
mysql_cond_t jobs_cond
Definition: rpl_rli_pdb.h:516
static size_t get_number_worker_fields()
Definition: rpl_rli_pdb.cc:615
~Slave_worker() override
Definition: rpl_rli_pdb.cc:284
MY_BITMAP group_executed
Definition: rpl_rli_pdb.h:586
volatile bool master_log_change_notified
Definition: rpl_rli_pdb.h:546
int rli_init_info(bool)
A part of Slave worker initializer that provides a minimum context for MTS recovery.
Definition: rpl_rli_pdb.cc:409
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:33
Relay_log_info * rli_slave
Definition: sql_class.h:1065
System_variables variables
Definition: sql_lexer_thd.h:61
bool in_active_multi_stmt_transaction() const
true if the session is in a multi-statement transaction mode (
Definition: sql_class.h:3167
The class defines a type of queue with a predefined max capacity that is implemented using the circul...
Definition: rpl_rli_pdb.h:266
bool in(size_t i)
Definition: rpl_rli_pdb.h:334
bool empty() const
Definition: rpl_rli_pdb.h:339
static constexpr size_t error_result
Definition: rpl_rli_pdb.h:342
std::atomic< size_t > len
Actual length.
Definition: rpl_rli_pdb.h:288
size_t en_queue(Element_type *item)
return the index where the arg item locates or an error encoded as a value circular_buffer_queue::err...
Definition: rpl_rli_pdb.h:432
size_t capacity
The capacity and maximum length of the queue in terms of element.
Definition: rpl_rli_pdb.h:272
size_t get_length() const
Definition: rpl_rli_pdb.h:338
circular_buffer_queue()
Definition: rpl_rli_pdb.h:301
Element_type * head_queue()
return the value of data member of the head of the queue.
Definition: rpl_rli_pdb.h:328
size_t avail
Its value modulo capacity is index of the element where the next element will be enqueued.
Definition: rpl_rli_pdb.h:278
circular_buffer_queue(size_t max)
Definition: rpl_rli_pdb.h:291
bool de_queue(Element_type *item)
Content of the being dequeued item is copied to the arg-pointer location.
Definition: rpl_rli_pdb.h:453
size_t entry
The head index of the queue.
Definition: rpl_rli_pdb.h:284
bool full() const
Definition: rpl_rli_pdb.h:340
bool inited_queue
Definition: rpl_rli_pdb.h:289
Prealloced_array< Element_type, 1 > m_Q
Definition: rpl_rli_pdb.h:268
bool de_tail(Element_type *item)
Similar to de_queue but extracting happens from the tail side.
Definition: rpl_rli_pdb.h:474
~circular_buffer_queue()=default
void my_error(int nr, myf MyFlags,...)
Fill in and print a previously registered error message.
Definition: my_error.cc:215
#define MTS_WORKER_UNDEF
Definition: rpl_replica.h:89
const int64_t SEQ_UNINIT
Uninitialized timestamp value (for either last committed or sequence number).
Definition: binlog_event.h:146
unsigned int PSI_mutex_key
Instrumented mutex key.
Definition: psi_mutex_bits.h:51
static constexpr unsigned PSI_INSTRUMENT_ME
Definition: psi_bits.h:42
Binary log event definitions.
Header for compiler-dependent features.
#define DBUG_PRINT(keyword, arglist)
Definition: my_dbug.h:180
#define DBUG_TRACE
Definition: my_dbug.h:145
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:55
ulonglong my_off_t
Definition: my_inttypes.h:71
long long int longlong
Definition: my_inttypes.h:54
#define MYF(v)
Definition: my_inttypes.h:96
Common #defines and includes for file and socket I/O.
#define FN_REFLEN
Definition: my_io.h:82
Definition of the global "loglevel" enumeration.
loglevel
Definition: my_loglevel.h:40
void my_free(void *ptr)
Frees the memory pointed by the ptr.
Definition: my_memory.cc:80
Defines various enable/disable and HAVE_ macros related to the performance schema instrumentation sys...
#define HAVE_PSI_INTERFACE
Definition: my_psi_config.h:38
Instrumentation helpers for conditions.
ABI for instrumented mutexes.
struct MasterPos master_pos
bool load(THD *, const dd::String_type &fname, dd::String_type *buf)
Read an sdi file from disk and store in a buffer.
Definition: sdi_file.cc:307
Performance schema instrumentation interface.
Instrumentation helpers for mutexes.
required string event
Definition: replication_group_member_actions.proto:31
@ UNDEFINED_GTID
GTID_NEXT is set to this state after a transaction with GTID_NEXT=='UUID:NUMBER' is committed.
Definition: rpl_gtid.h:3742
@ AUTOMATIC_GTID
Specifies that the GTID has not been generated yet; it will be generated on commit.
Definition: rpl_gtid.h:3690
enum_mts_parallel_type
Definition: rpl_mta_submode.h:46
TABLE * mts_move_temp_tables_to_thd(THD *, TABLE *)
Relocation of the list of temporary tables to thd->temporary_tables.
Definition: rpl_rli_pdb.cc:807
Slave_worker * get_least_occupied_worker(Relay_log_info *rli, Slave_worker_array *workers, Log_event *ev)
Get the least occupied worker.
Definition: rpl_rli_pdb.cc:1117
bool set_max_updated_index_on_stop(Slave_worker *worker, Slave_job_item *job_item)
This function is called by both coordinator and workers.
Definition: rpl_rli_pdb.cc:168
bool init_hash_workers(Relay_log_info *rli)
Definition: rpl_rli_pdb.cc:740
void destroy_hash_workers(Relay_log_info *)
Definition: rpl_rli_pdb.cc:751
ulong w_rr
Definition: rpl_rli_pdb.cc:77
int slave_worker_exec_job_group(Slave_worker *w, Relay_log_info *rli)
apply one job group.
Definition: rpl_rli_pdb.cc:2395
Slave_worker * get_thd_worker(THD *thd)
Definition: rpl_rli_pdb.h:960
TABLE * mts_move_temp_table_to_entry(TABLE *, THD *, db_worker_hash_entry *)
Relocating temporary table reference into entry's table list head.
Definition: rpl_rli_pdb.cc:773
bool handle_slave_worker_stop(Slave_worker *worker, Slave_job_item *job_item)
This function is called by both coordinator and workers.
Definition: rpl_rli_pdb.cc:104
Slave_worker * map_db_to_worker(const char *dbname, Relay_log_info *rli, db_worker_hash_entry **ptr_entry, bool need_temp_tables, Slave_worker *w)
The function produces a reference to the struct of a Worker that has been or will be engaged to proce...
Definition: rpl_rli_pdb.cc:902
bool append_item_to_jobs(slave_job_item *job_item, Slave_worker *w, Relay_log_info *rli)
Coordinator enqueues a job item into a Worker private queue.
Definition: rpl_rli_pdb.cc:2080
Definition: my_bitmap.h:42
Definition: rpl_rli_pdb.h:109
Slave_job_group()=default
my_off_t master_log_pos
Definition: rpl_rli_pdb.h:188
my_off_t checkpoint_log_pos
Definition: rpl_rli_pdb.h:191
Format_description_log_event * new_fd_event
Definition: rpl_rli_pdb.h:230
Slave_job_group(const Slave_job_group &other)
Definition: rpl_rli_pdb.h:116
bool notified
Definition: rpl_rli_pdb.h:200
time_t ts
Definition: rpl_rli_pdb.h:198
longlong last_committed
Definition: rpl_rli_pdb.h:203
std::atomic< int32 > done
Definition: rpl_rli_pdb.h:196
Slave_job_group & operator=(const Slave_job_group &other)
Definition: rpl_rli_pdb.h:141
Slave_worker * worker
Definition: rpl_rli_pdb.h:185
my_off_t checkpoint_relay_log_pos
Definition: rpl_rli_pdb.h:194
ulong worker_id
Definition: rpl_rli_pdb.h:184
uint checkpoint_seqno
Definition: rpl_rli_pdb.h:190
void reset(my_off_t master_pos, ulonglong seqno)
Definition: rpl_rli_pdb.h:235
my_off_t group_master_log_pos
Definition: rpl_rli_pdb.h:171
char * group_master_log_name
Definition: rpl_rli_pdb.h:167
char * checkpoint_log_name
Definition: rpl_rli_pdb.h:192
ulong shifted
Definition: rpl_rli_pdb.h:197
longlong sequence_number
Definition: rpl_rli_pdb.h:204
char * checkpoint_relay_log_name
Definition: rpl_rli_pdb.h:195
char * group_relay_log_name
Definition: rpl_rli_pdb.h:182
ulonglong total_seqno
Definition: rpl_rli_pdb.h:186
my_off_t group_relay_log_pos
Definition: rpl_rli_pdb.h:183
Definition: completion_hash.h:34
Legends running throughout the module:
Definition: rpl_rli_pdb.h:73
TABLE *volatile temporary_tables
Definition: rpl_rli_pdb.h:89
uint db_len
Definition: rpl_rli_pdb.h:74
long usage
Definition: rpl_rli_pdb.h:81
const char * db
Definition: rpl_rli_pdb.h:75
Slave_worker * worker
Definition: rpl_rli_pdb.h:76
An instrumented cond structure.
Definition: mysql_cond_bits.h:49
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:49
double seconds()
Definition: task.cc:309
Include file for Sun RPC to compile out of the box.
unsigned int uint
Definition: uca-dump.cc:29
int n
Definition: xcom_base.cc:508