 |
MySQL
8.0.23
Source Code Documentation
|
Go to the documentation of this file.
23 #ifndef APPLIER_INCLUDE
24 #define APPLIER_INCLUDE
46 #define ACTION_PACKET_TYPE 2
47 #define VIEW_CHANGE_PACKET_TYPE 3
48 #define SINGLE_PRIMARY_PACKET_TYPE 4
49 #define SYNC_BEFORE_EXECUTION_PACKET_TYPE 5
50 #define TRANSACTION_PREPARED_PACKET_TYPE 6
51 #define LEAVING_MEMBERS_PACKET_TYPE 7
54 #define APPLIER_GTID_CHECK_TIMEOUT_ERROR -1
55 #define APPLIER_RELAY_LOG_NOT_INITED -2
56 #define APPLIER_THREAD_ABORTED -3
137 std::shared_ptr<Continuation> checkpoint_condition_arg)
168 if (sid !=
nullptr) {
224 const std::vector<Gcs_member_identifier> &leaving_members)
244 bool *abort_flag,
bool wait_for_execution =
true) = 0;
248 double timeout,
bool check_and_purge_partial_transactions) = 0;
250 std::shared_ptr<Continuation> checkpoint_condition,
bool *abort_flag,
251 bool update_THD_status =
true) = 0;
254 std::string &retrieved_set,
double timeout,
255 bool update_THD_status =
true) = 0;
270 std::list<Gcs_member_identifier> *online_members) = 0;
276 std::shared_ptr<Continuation> checkpoint_condition) = 0;
344 ulong stop_timeout,
rpl_sidno group_sidno,
393 std::list<Gcs_member_identifier> *online_members)
override {
395 new Data_packet(data, len, consistency_level, online_members));
569 bool *abort_flag,
bool wait_for_execution =
true)
override;
608 double timeout,
bool check_and_purge_partial_transactions)
override;
633 std::shared_ptr<Continuation> checkpoint_condition,
bool *abort_flag,
634 bool update_THD_status =
true)
override;
663 bool update_THD_status =
true)
override;
707 std::shared_ptr<Continuation> checkpoint_condition)
override;
Definition: plugin_utils.h:696
@ NEW_PRIMARY
Definition: applier.h:112
virtual void add_sync_before_execution_action_packet(Sync_before_execution_action_packet *packet)=0
@ SUSPENSION_PACKET
Definition: applier.h:63
int wait_for_applier_event_execution(double timeout, bool check_and_purge_partial_transactions) override
Waits for the execution of all events by part of the current SQL applier.
Definition: applier.cc:822
enum_packet_action packet_action
Definition: applier.h:83
mysql_cond_t suspension_waiting_condition
Definition: applier.h:887
Definition: sql_class.h:807
int applier_error
Definition: applier.h:872
virtual int wait_for_applier_event_execution(double timeout, bool check_and_purge_partial_transactions)=0
int apply_transaction_prepared_action_packet(Transaction_prepared_action_packet *packet)
Apply a transaction prepared action packet received by the applier.
Definition: applier.cc:387
Definition: pipeline_handlers.h:104
Transaction_prepared_action_packet(const rpl_sid *sid, rpl_gno gno, const Gcs_member_identifier &gcs_member_id)
Create a new transaction prepared action.
Definition: applier.h:162
int initialize_applier_thread()
Initializes and launches the applier thread.
Definition: applier.cc:611
Certification_handler * get_certification_handler() override
Returns the handler instance in the applier module responsible for certification.
Definition: applier.cc:899
#define mysql_mutex_lock(M)
Definition: mysql_mutex.h:49
int setup_applier_module(Handler_pipeline_type pipeline_type, bool reset_logs, ulong stop_timeout, rpl_sidno group_sidno, ulonglong gtid_assignment_block_size, Shared_writelock *shared_stop_lock)
Configure the applier pipeline according to the given configuration.
Definition: applier.cc:93
Definition: pipeline_interfaces.h:122
static my_thread_id thread_id
Definition: my_thr_init.cc:62
bool applier_aborted
Definition: applier.h:870
#define LEAVING_MEMBERS_PACKET_TYPE
Definition: applier.h:51
void set_applier_thread_context()
Set the thread context for the applier thread.
Definition: applier.cc:191
int apply_leaving_members_action_packet(Leaving_members_action_packet *packet)
Apply a leaving members action packet received by the applier.
Definition: applier.cc:399
virtual int wait_for_applier_complete_suspension(bool *abort_flag, bool wait_for_execution=true)=0
const Gcs_member_identifier m_gcs_member_id
Definition: applier.h:177
enum_packet_action
Definition: applier.h:61
size_t size() override
Checks the queue size.
Definition: plugin_utils.h:235
@ QUEUE_APPLIED
Definition: applier.h:112
Dialog Client Authentication nullptr
Definition: dialog.cc:353
PSI_stage_key m_key
The registered stage key.
Definition: psi_stage_bits.h:75
int wait_for_applier_complete_suspension(bool *abort_flag, bool wait_for_execution=true) override
Waits for the applier to suspend and apply all the transactions previous to the suspend request.
Definition: applier.cc:759
void suspend_applier_module()
Suspends the applier module, being transactions still queued in the incoming queue.
Definition: applier.h:809
const rpl_gno m_gno
Definition: applier.h:176
virtual void add_view_change_packet(View_change_packet *packet)=0
~Single_primary_action_packet() override
Definition: applier.h:122
Definition: applier.h:216
Action_packet(enum_packet_action action)
Create a new action packet.
Definition: applier.h:78
bool wait_for_current_events_execution(std::shared_ptr< Continuation > checkpoint_condition, bool *abort_flag, bool update_THD_status=true) override
Waits for the execution of all current events by part of the current SQL applier.
Definition: applier.cc:877
bool queue_and_wait_on_queue_checkpoint(std::shared_ptr< Continuation > checkpoint_condition) override
Definition: applier.cc:966
mysql_cond_t suspend_cond
Definition: applier.h:880
#define SINGLE_PRIMARY_PACKET_TYPE
Definition: applier.h:48
Pipeline_stats_member_collector * get_pipeline_stats_member_collector() override
Definition: applier.h:693
int purge_applier_queue_and_restart_applier_module() override
Purges the relay logs and restarts the applier thread.
Definition: applier.cc:122
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:49
virtual Member_applier_state get_applier_status()=0
my_thread_handle applier_pthd
Definition: applier.h:856
int apply_sync_before_execution_action_packet(Sync_before_execution_action_packet *packet)
Apply a synchronization before execution action packet received by the applier.
Definition: applier.cc:393
@ ACTION_NUMBER
Definition: applier.h:65
const std::vector< Gcs_member_identifier > m_leaving_members
Definition: applier.h:230
Leaving_members_action_packet(const std::vector< Gcs_member_identifier > &leaving_members)
Create a new leaving members packet.
Definition: applier.h:223
virtual bool get_retrieved_gtid_set(std::string &retrieved_set)=0
int rpl_sidno
Type of SIDNO (source ID number, first component of GTID)
Definition: rpl_gtid.h:93
void add_suspension_packet() override
Queues a packet that will eventually make the applier module suspend.
Definition: applier.h:464
Definition: applier.h:131
std::shared_ptr< Continuation > checkpoint_condition
If we discard a packet.
Definition: applier.h:145
@ APPLIER_STATE_ON
Definition: applier.h:234
int(* mysql_cond_broadcast)(mysql_cond_t *that, const char *src_file, unsigned int src_line)
Definition: mysql_cond_service.h:51
#define true
Definition: config_static.h:44
Plugin_stage_monitor_handler stage_handler
Definition: applier.h:906
virtual void queue_certification_enabling_packet()
Queues a single a packet that will enable certification on this member.
Definition: applier.cc:961
Definition: pipeline_interfaces.h:530
int terminate_applier_thread()
Terminates the applier thread.
Definition: applier.cc:664
Definition: certification_handler.h:31
const my_thread_id m_thread_id
Definition: applier.h:206
void flow_control_step(Pipeline_stats_member_collector *)
Evaluate the information received in the last flow control period and adjust the system parameters ac...
Definition: pipeline_stats.cc:736
bool is_applier_thread_aborted()
Is the applier marked for shutdown?
Definition: applier.h:316
int inject_event_into_pipeline(Pipeline_event *pevent, Continuation *cont)
Injects an event into the pipeline and waits for its handling.
Definition: applier.cc:237
Definition: stage_monitor_handler.h:29
bool is_applier_thread_waiting()
Checks if the applier, and its workers when parallel applier is enabled, has already consumed all rel...
Definition: applier.cc:810
virtual int handle_action(Pipeline_action *action)=0
Handling of an action as defined in the handler implementation.
~View_change_packet() override
Definition: applier.h:100
int set_stage(PSI_stage_key key, const char *file, int line, ulonglong estimated_work, ulonglong work_completed)
Set that a new stage is now in progress.
Definition: stage_monitor_handler.cc:78
Shared_writelock * shared_stop_write_lock
Definition: applier.h:890
thread_state applier_thd_state
Definition: applier.h:868
void set_stop_wait_timeout(ulong timeout)
Sets the applier shutdown timeout.
Definition: applier.h:440
const bool m_sid_specified
Definition: applier.h:175
Synchronized_queue< Packet * > * incoming
Definition: applier.h:893
Definition: applier_channel_state_observer.h:29
virtual void run_flow_control_step()=0
Event_handler * pipeline
Definition: applier.h:896
int apply_view_change_packet(View_change_packet *view_change_packet, Format_description_log_event *fde_evt, Continuation *cont)
Apply a View Change packet received by the applier.
Definition: applier.cc:270
int setup_pipeline_handlers()
Configure the applier pipeline handlers.
Definition: applier.cc:165
bool suspended
Definition: applier.h:882
Sync_before_execution_action_packet(my_thread_id thread_id, const Gcs_member_identifier &gcs_member_id)
Create a new synchronization point request.
Definition: applier.h:198
Definition: applier.h:239
Definition: pipeline_interfaces.h:70
virtual void awake_applier_module()=0
void add_sync_before_execution_action_packet(Sync_before_execution_action_packet *packet) override
Queues a synchronization before execution action packet into the applier.
Definition: applier.h:523
void run_flow_control_step() override
Definition: applier.h:702
#define mysql_cond_wait(C, M)
Definition: mysql_cond.h:47
#define SYNC_BEFORE_EXECUTION_PACKET_TYPE
Definition: applier.h:49
Definition: gcs_member_identifier.h:39
bool applier_killed_status
Definition: applier.h:874
void awake_applier_module() override
Awakes the applier module.
Definition: applier.h:548
virtual size_t get_message_queue_size()=0
const Gcs_member_identifier m_gcs_member_id
Definition: applier.h:207
Applier_channel_state_observer * applier_channel_observer
Definition: applier.h:902
void add_leaving_members_action_packet(Leaving_members_action_packet *packet) override
Queues a leaving members action packet into the applier.
Definition: applier.h:535
Definition: applier.h:281
void add_view_change_packet(View_change_packet *packet) override
Queues a view change packet into the applier.
Definition: applier.h:488
void signal_checkpoint_reached()
Definition: applier.h:141
virtual int handle(const uchar *data, ulong len, enum_group_replication_consistency_level consistency_level, std::list< Gcs_member_identifier > *online_members)=0
long long int rpl_gno
Type of GNO, the second (numeric) component of GTID.
Definition: rpl_gtid.h:99
ulong stop_wait_timeout
Definition: applier.h:899
mysql_mutex_t suspend_lock
Definition: applier.h:878
virtual void add_leaving_members_action_packet(Leaving_members_action_packet *packet)=0
Queue_checkpoint_packet(std::shared_ptr< Continuation > checkpoint_condition_arg)
Create a new Queue_checkpoint_packet packet.
Definition: applier.h:136
std::atomic< killed_state > killed
Definition: sql_class.h:2400
virtual int purge_applier_queue_and_restart_applier_module()=0
std::string view_id
Definition: applier.h:102
ulonglong gtid_assignment_block_size
Definition: applier.h:862
void add_transaction_prepared_action_packet(Transaction_prepared_action_packet *packet) override
Queues a transaction prepared action packet into the applier.
Definition: applier.h:511
enum_applier_state
Definition: applier.h:233
~Applier_module() override
Definition: applier.cc:75
bool waiting_for_applier_suspension
Definition: applier.h:884
~Sync_before_execution_action_packet() override
Definition: applier.h:204
std::vector< std::string > group_executed_set
Definition: applier.h:103
unsigned char uchar
Definition: my_inttypes.h:51
int handle(const uchar *data, ulong len, enum_group_replication_consistency_level consistency_level, std::list< Gcs_member_identifier > *online_members) override
Queues the packet coming from the reader for future application.
Definition: applier.h:391
#define TRANSACTION_PREPARED_PACKET_TYPE
Definition: applier.h:50
#define mysql_mutex_unlock(M)
Definition: mysql_mutex.h:56
enum enum_applier_state Member_applier_state
View_change_packet(std::string &view_id_arg)
Create a new data packet with associated data.
Definition: applier.h:97
void add_termination_packet()
Queues a packet that will make the applier module terminate it's handling process.
Definition: applier.h:475
Definition: my_thread_bits.h:51
virtual void add_single_primary_action_packet(Single_primary_action_packet *packet)=0
rpl_sidno group_replication_sidno
Definition: applier.h:861
Definition: plugin_utils.h:42
virtual void interrupt_applier_suspension_wait()=0
void interrupt_applier_suspension_wait() override
Interrupts the current applier waiting process either for it's suspension or it's wait for the consum...
Definition: applier.cc:804
~Leaving_members_action_packet() override
Definition: applier.h:228
Definition: pipeline_interfaces.h:500
Pipeline_stats_member_collector pipeline_stats_member_collector
Definition: applier.h:904
void copy_from(const unsigned char *data)
Copies the given 16-byte data to this UUID.
Definition: uuid.h:64
virtual Flow_control_module * get_flow_control_module()=0
~Action_packet() override
Definition: applier.h:81
bool apply_action_packet(Action_packet *action_packet)
Apply an action packet received by the applier.
Definition: applier.cc:248
uint32 my_thread_id
Definition: my_thread_local.h:33
enum_action
Definition: applier.h:112
Represents a set of GTIDs.
Definition: rpl_gtid.h:1433
bool get_retrieved_gtid_set(std::string &retrieved_set) override
Returns the retrieved gtid set for the applier channel.
Definition: applier.cc:848
Definition: applier.h:110
virtual void add_suspension_packet()=0
Single_primary_action_packet(enum enum_action action_arg)
Create a new single primary action packet with associated data.
Definition: applier.h:119
Definition: applier.h:152
Handler_pipeline_type
Definition: pipeline_factory.h:44
char applier_module_channel_name[]
Definition: applier.cc:45
Definition: applier.h:190
#define ACTION_PACKET_TYPE
Definition: applier.h:46
#define VIEW_CHANGE_PACKET_TYPE
Definition: applier.h:47
Definition: pipeline_interfaces.h:45
virtual void add_transaction_prepared_action_packet(Transaction_prepared_action_packet *packet)=0
@ TERMINATION_PACKET
Definition: applier.h:62
Definition: pipeline_stats.h:268
@ CHECKPOINT_PACKET
Definition: applier.h:64
void add_single_primary_action_packet(Single_primary_action_packet *packet) override
Queues a single primary action packet into the applier.
Definition: applier.h:499
mysql_mutex_t run_lock
Definition: applier.h:865
int intersect_group_executed_sets(std::vector< std::string > >id_sets, Gtid_set *output_set)
This method calculates the intersection of the given sets passed as a list of strings.
Definition: applier.cc:907
void inform_of_applier_stop(char *channel_name, bool aborted)
This method informs the applier module that an applying thread stopped.
Definition: applier.cc:742
bool push(const T &value) override
Inserts an element in the queue.
Definition: plugin_utils.h:194
@ APPLIER_ERROR
Definition: applier.h:236
size_t get_message_queue_size() override
Returns the applier module's queue size.
Definition: applier.h:682
Flow_control_module flow_control_module
Definition: applier.h:905
mysql_cond_t run_cond
Definition: applier.h:866
unsigned long long int ulonglong
Definition: my_inttypes.h:55
@ APPLIER_STATE_OFF
Definition: applier.h:235
Definition: pipeline_stats.h:412
bool is_running()
Is the applier running?
Definition: applier.h:327
An instrumented cond structure.
Definition: mysql_cond_bits.h:49
virtual Certification_handler * get_certification_handler()=0
PSI_stage_info info_GR_STAGE_module_suspending
Definition: plugin_psi.h:207
enum_group_replication_consistency_level
Definition: plugin_group_replication.h:34
rpl_sid m_sid
Definition: applier.h:182
virtual int wait_for_applier_event_execution(std::string &retrieved_set, double timeout, bool update_THD_status=true)=0
Definition: pipeline_interfaces.h:405
virtual ~Applier_module_interface()
Definition: applier.h:241
Definition: pipeline_stats.h:587
Applier_module()
Definition: applier.cc:54
int handle_pipeline_action(Pipeline_action *action) override
Gives the pipeline an action for execution.
Definition: applier.h:408
int applier_thread_handle()
Runs the applier thread process, reading events and processing them.
Definition: applier.cc:405
enum enum_action action
Definition: applier.h:124
PSI_stage_info info_GR_STAGE_module_executing
Definition: plugin_psi.h:206
Pipeline_member_stats * get_local_pipeline_stats()
Return the local applier stats.
Definition: applier.cc:972
Member_applier_state get_applier_status() override
Definition: applier.h:684
virtual int handle_pipeline_action(Pipeline_action *action)=0
void clean_applier_thread_context()
Cleans the thread context for the applier thread This includes such tasks as removing the thread from...
Definition: applier.cc:231
Flow_control_module * get_flow_control_module() override
Definition: applier.h:698
~Transaction_prepared_action_packet() override
Definition: applier.h:173
const rpl_sid * get_sid()
Definition: applier.h:179
bool reset_applier_logs
Definition: applier.h:860
int apply_data_packet(Data_packet *data_packet, Format_description_log_event *fde_evt, Continuation *cont)
Apply a Data packet received by the applier.
Definition: applier.cc:328
virtual Pipeline_stats_member_collector * get_pipeline_stats_member_collector()=0
bool is_running() const
Definition: plugin_utils.h:79
virtual bool queue_and_wait_on_queue_checkpoint(std::shared_ptr< Continuation > checkpoint_condition)=0
virtual bool wait_for_current_events_execution(std::shared_ptr< Continuation > checkpoint_condition, bool *abort_flag, bool update_THD_status=true)=0
int apply_single_primary_action_packet(Single_primary_action_packet *packet)
Apply an single primary action packet received by the applier.
Definition: applier.cc:368
int terminate_applier_pipeline()
Terminates the pipeline, shutting down the handlers and deleting them.
Definition: applier.cc:649
#define false
Definition: config_static.h:43
THD * applier_thd
Definition: applier.h:857