23#ifndef APPLIER_INCLUDE
24#define APPLIER_INCLUDE
46#define ACTION_PACKET_TYPE 2
47#define SINGLE_PRIMARY_PACKET_TYPE 4
48#define SYNC_BEFORE_EXECUTION_PACKET_TYPE 5
49#define TRANSACTION_PREPARED_PACKET_TYPE 6
50#define LEAVING_MEMBERS_PACKET_TYPE 7
51#define RECOVERY_METADATA_PROCESSING_PACKET_TYPE 8
52#define ERROR_PACKET_TYPE 9
55#define APPLIER_GTID_CHECK_TIMEOUT_ERROR -1
56#define APPLIER_RELAY_LOG_NOT_INITED -2
57#define APPLIER_THREAD_ABORTED -3
144 std::shared_ptr<Continuation> checkpoint_condition_arg)
239 const std::vector<Gcs_member_identifier> &leaving_members)
280 bool *abort_flag,
bool wait_for_execution =
true) = 0;
284 double timeout,
bool check_and_purge_partial_transactions) = 0;
286 std::shared_ptr<Continuation> checkpoint_condition,
bool *abort_flag,
287 bool update_THD_status =
true) = 0;
290 std::string &retrieved_set,
double timeout,
291 bool update_THD_status =
true) = 0;
309 std::list<Gcs_member_identifier> *online_members,
316 std::shared_ptr<Continuation> checkpoint_condition) = 0;
383 ulong stop_timeout,
rpl_sidno group_sidno,
432 std::list<Gcs_member_identifier> *online_members,
435 new Data_packet(data, len,
key, consistency_level, online_members));
630 bool *abort_flag,
bool wait_for_execution =
true)
override;
669 double timeout,
bool check_and_purge_partial_transactions)
override;
694 std::shared_ptr<Continuation> checkpoint_condition,
bool *abort_flag,
695 bool update_THD_status =
true)
override;
724 bool update_THD_status =
true)
override;
768 std::shared_ptr<Continuation> checkpoint_condition)
override;
#define ERROR_PACKET_TYPE
Make the applier fail.
Definition: applier.h:52
#define RECOVERY_METADATA_PROCESSING_PACKET_TYPE
Definition: applier.h:51
#define ACTION_PACKET_TYPE
Definition: applier.h:46
char applier_module_channel_name[]
Definition: applier.cc:48
#define LEAVING_MEMBERS_PACKET_TYPE
Definition: applier.h:50
enum_applier_state
Definition: applier.h:269
@ APPLIER_STATE_ON
Definition: applier.h:270
@ APPLIER_STATE_OFF
Definition: applier.h:271
@ APPLIER_ERROR
Definition: applier.h:272
#define TRANSACTION_PREPARED_PACKET_TYPE
Definition: applier.h:49
enum enum_applier_state Member_applier_state
#define SINGLE_PRIMARY_PACKET_TYPE
Definition: applier.h:47
#define SYNC_BEFORE_EXECUTION_PACKET_TYPE
Definition: applier.h:48
enum_packet_action
Definition: applier.h:62
@ TERMINATION_PACKET
Definition: applier.h:63
@ ACTION_NUMBER
Definition: applier.h:66
@ SUSPENSION_PACKET
Definition: applier.h:64
@ CHECKPOINT_PACKET
Definition: applier.h:65
A packet to control the applier in a event oriented way.
Definition: applier.h:73
Action_packet(enum_packet_action action)
Create a new action packet.
Definition: applier.h:79
enum_packet_action packet_action
Definition: applier.h:84
~Action_packet() override=default
Definition: applier_channel_state_observer.h:29
Definition: applier.h:275
virtual Pipeline_stats_member_collector * get_pipeline_stats_member_collector()=0
virtual bool get_retrieved_gtid_set(std::string &retrieved_set)=0
virtual ~Applier_module_interface()=default
virtual int wait_for_applier_complete_suspension(bool *abort_flag, bool wait_for_execution=true)=0
virtual void add_packet(Packet *packet)=0
virtual size_t get_message_queue_size()=0
virtual Certification_handler * get_certification_handler()=0
virtual Flow_control_module * get_flow_control_module()=0
virtual int wait_for_applier_event_execution(double timeout, bool check_and_purge_partial_transactions)=0
virtual int wait_for_applier_event_execution(std::string &retrieved_set, double timeout, bool update_THD_status=true)=0
virtual void add_sync_before_execution_action_packet(Sync_before_execution_action_packet *packet)=0
virtual void add_leaving_members_action_packet(Leaving_members_action_packet *packet)=0
virtual void awake_applier_module()=0
virtual int purge_applier_queue_and_restart_applier_module()=0
virtual Member_applier_state get_applier_status()=0
virtual int handle(const uchar *data, ulong len, enum_group_replication_consistency_level consistency_level, std::list< Gcs_member_identifier > *online_members, PSI_memory_key key)=0
virtual void add_transaction_prepared_action_packet(Transaction_prepared_action_packet *packet)=0
virtual void add_suspension_packet()=0
virtual bool wait_for_current_events_execution(std::shared_ptr< Continuation > checkpoint_condition, bool *abort_flag, bool update_THD_status=true)=0
virtual void add_metadata_processing_packet(Recovery_metadata_processing_packets *packet)=0
virtual void run_flow_control_step()=0
virtual void add_view_change_packet(View_change_packet *packet)=0
virtual bool queue_and_wait_on_queue_checkpoint(std::shared_ptr< Continuation > checkpoint_condition)=0
virtual void add_single_primary_action_packet(Single_primary_action_packet *packet)=0
virtual int handle_pipeline_action(Pipeline_action *action)=0
virtual void interrupt_applier_suspension_wait()=0
Definition: applier.h:321
~Applier_module() override
Definition: applier.cc:76
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:361
Certification_handler * get_certification_handler() override
Returns the handler instance in the applier module responsible for certification.
Definition: applier.cc:1003
bool is_applier_thread_aborted()
Is the applier marked for shutdown?
Definition: applier.h:356
void add_termination_packet()
Queues a packet that will make the applier module terminate it's handling process.
Definition: applier.h:527
Plugin_stage_monitor_handler stage_handler
Definition: applier.h:976
int applier_error
Definition: applier.h:945
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:229
bool apply_action_packet(Action_packet *action_packet)
Apply an action packet received by the applier.
Definition: applier.cc:246
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:862
int applier_thread_handle()
Runs the applier thread process, reading events and processing them.
Definition: applier.cc:460
Member_applier_state get_applier_status() override
Definition: applier.h:745
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:981
int setup_pipeline_handlers()
Configure the applier pipeline handlers.
Definition: applier.cc:163
bool applier_killed_status
Definition: applier.h:947
void set_stop_wait_timeout(ulong timeout)
Sets the applier shutdown timeout.
Definition: applier.h:480
bool m_ignore_applier_errors_during_stop
Definition: applier.h:949
my_thread_handle applier_pthd
Definition: applier.h:929
int apply_single_primary_action_packet(Single_primary_action_packet *packet)
Apply an single primary action packet received by the applier.
Definition: applier.cc:419
void ignore_errors_during_stop(bool ignore_errors)
Check whether to ignore applier errors during stop or not.
Definition: applier.h:504
int purge_applier_queue_and_restart_applier_module() override
Purges the relay logs and restarts the applier thread.
Definition: applier.cc:120
mysql_mutex_t run_lock
Definition: applier.h:938
int apply_transaction_prepared_action_packet(Transaction_prepared_action_packet *packet)
Apply a transaction prepared action packet received by the applier.
Definition: applier.cc:438
bool suspended
Definition: applier.h:957
int setup_applier_module(Handler_pipeline_type pipeline_type, bool reset_logs, ulong stop_timeout, rpl_sidno group_sidno, ulonglong gtid_assignment_block_size)
Configure the applier pipeline according to the given configuration.
Definition: applier.cc:94
void add_suspension_packet() override
Queues a packet that will eventually make the applier module suspend.
Definition: applier.h:516
mysql_cond_t suspension_waiting_condition
Definition: applier.h:960
rpl_sidno group_replication_sidno
Definition: applier.h:934
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:1011
bool is_running()
Is the applier running?
Definition: applier.h:367
void add_packet(Packet *packet) override
Generic add packet method.
Definition: applier.h:533
void add_single_primary_action_packet(Single_primary_action_packet *packet) override
Queues a single primary action packet into the applier.
Definition: applier.h:560
int apply_leaving_members_action_packet(Leaving_members_action_packet *packet)
Apply a leaving members action packet received by the applier.
Definition: applier.cc:453
void suspend_applier_module()
Suspends the applier module, being transactions still queued in the incoming queue.
Definition: applier.h:882
void set_applier_thread_context()
Set the thread context for the applier thread.
Definition: applier.cc:189
int initialize_applier_thread()
Initializes and launches the applier thread.
Definition: applier.cc:703
int terminate_applier_thread()
Terminates the applier thread.
Definition: applier.cc:756
size_t get_message_queue_size() override
Returns the applier module's queue size.
Definition: applier.h:743
bool reset_applier_logs
Definition: applier.h:933
void inform_of_applier_stop(char *channel_name, bool aborted)
This method informs the applier module that an applying thread stopped.
Definition: applier.cc:834
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:914
Flow_control_module flow_control_module
Definition: applier.h:975
void add_metadata_processing_packet(Recovery_metadata_processing_packets *packet) override
Definition: applier.h:548
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:926
int terminate_applier_pipeline()
Terminates the pipeline, shutting down the handlers and deleting them.
Definition: applier.cc:741
Event_handler * pipeline
Definition: applier.h:966
bool get_retrieved_gtid_set(std::string &retrieved_set) override
Returns the retrieved gtid set for the applier channel.
Definition: applier.cc:952
int handle(const uchar *data, ulong len, enum_group_replication_consistency_level consistency_level, std::list< Gcs_member_identifier > *online_members, PSI_memory_key key) override
Queues the packet coming from the reader for future application.
Definition: applier.h:430
bool applier_aborted
Definition: applier.h:943
Pipeline_stats_member_collector * get_pipeline_stats_member_collector() override
Definition: applier.h:754
mysql_mutex_t suspend_lock
Definition: applier.h:953
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:268
void awake_applier_module() override
Awakes the applier module.
Definition: applier.h:609
Pipeline_member_stats * get_local_pipeline_stats()
Return the local applier stats.
Definition: applier.cc:1076
bool queue_and_wait_on_queue_checkpoint(std::shared_ptr< Continuation > checkpoint_condition) override
Definition: applier.cc:1070
int inject_event_into_pipeline(Pipeline_event *pevent, Continuation *cont)
Injects an event into the pipeline and waits for its handling.
Definition: applier.cc:235
thread_state applier_thd_state
Definition: applier.h:941
ulonglong gtid_assignment_block_size
Definition: applier.h:935
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:446
void add_view_change_packet(View_change_packet *packet) override
Queues a view change packet into the applier.
Definition: applier.h:544
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:584
THD * applier_thd
Definition: applier.h:930
mysql_cond_t suspend_cond
Definition: applier.h:955
int handle_pipeline_action(Pipeline_action *action) override
Gives the pipeline an action for execution.
Definition: applier.h:448
Pipeline_stats_member_collector pipeline_stats_member_collector
Definition: applier.h:974
void run_flow_control_step() override
Definition: applier.h:763
mysql_cond_t run_cond
Definition: applier.h:939
virtual void queue_certification_enabling_packet()
Queues a single a packet that will enable certification on this member.
Definition: applier.cc:1065
ulong stop_wait_timeout
Definition: applier.h:969
Applier_module()
Definition: applier.cc:57
int apply_metadata_processing_packet(Recovery_metadata_processing_packets *metadata_processing_packet)
Apply a Recovery metadata processing information received from the GCS.
Definition: applier.cc:347
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:908
Flow_control_module * get_flow_control_module() override
Definition: applier.h:759
Applier_channel_state_observer * applier_channel_observer
Definition: applier.h:972
void add_leaving_members_action_packet(Leaving_members_action_packet *packet) override
Queues a leaving members action packet into the applier.
Definition: applier.h:596
Synchronized_queue< Packet * > * incoming
Definition: applier.h:963
void add_transaction_prepared_action_packet(Transaction_prepared_action_packet *packet) override
Queues a transaction prepared action packet into the applier.
Definition: applier.h:572
Definition: certification_handler.h:31
Class used to wait on the execution of some action.
Definition: pipeline_interfaces.h:535
A wrapper for raw network packets.
Definition: pipeline_interfaces.h:75
A packet to inform the applier it should fail.
Definition: applier.h:251
const char * m_error_message
The error message for the failure process.
Definition: applier.h:266
~Error_action_packet() override=default
Error_action_packet(const char *error_message)
Create a new error packet.
Definition: applier.h:255
const char * get_error_message()
Returns the error message for the failure.
Definition: applier.h:262
Interface for the application of events, them being packets or log events.
Definition: pipeline_interfaces.h:660
virtual int handle_action(Pipeline_action *action)=0
Handling of an action as defined in the handler implementation.
The pipeline stats aggregator of all group members stats and flow control module.
Definition: pipeline_stats.h:607
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:748
It represents the identity of a group member within a certain group.
Definition: gcs_member_identifier.h:39
Represents a set of GTIDs.
Definition: rpl_gtid.h:1555
Action to configure existing applier handlers.
Definition: pipeline_handlers.h:104
A packet to inform pipeline listeners of leaving members, this packet will be handled on the global m...
Definition: applier.h:231
const std::vector< Gcs_member_identifier > m_leaving_members
Definition: applier.h:245
~Leaving_members_action_packet() override=default
Leaving_members_action_packet(const std::vector< Gcs_member_identifier > &leaving_members)
Create a new leaving members packet.
Definition: applier.h:238
A generic interface for different kinds of packets.
Definition: pipeline_interfaces.h:50
A wrapper for pipeline actions.
Definition: pipeline_interfaces.h:630
A wrapper for log events/packets.
Definition: pipeline_interfaces.h:166
Computed statistics per member.
Definition: pipeline_stats.h:432
The pipeline collector for the local member stats.
Definition: pipeline_stats.h:283
Definition: stage_monitor_handler.h:29
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
A packet to wait for queue consumption.
Definition: applier.h:138
std::shared_ptr< Continuation > checkpoint_condition
If we discard a packet.
Definition: applier.h:152
void signal_checkpoint_reached()
Definition: applier.h:148
Queue_checkpoint_packet(std::shared_ptr< Continuation > checkpoint_condition_arg)
Create a new Queue_checkpoint_packet packet.
Definition: applier.h:143
A packet to send new primary election related info to the applier.
Definition: applier.h:117
enum_action
Definition: applier.h:119
@ NEW_PRIMARY
Definition: applier.h:119
@ QUEUE_APPLIED
Definition: applier.h:119
Single_primary_action_packet(enum enum_action action_arg)
Create a new single primary action packet with associated data.
Definition: applier.h:126
~Single_primary_action_packet() override=default
enum enum_action action
Definition: applier.h:131
A packet to request a synchronization point on the global message order on a given member before tran...
Definition: applier.h:205
const Gcs_member_identifier m_gcs_member_id
Definition: applier.h:222
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:213
const my_thread_id m_thread_id
Definition: applier.h:221
~Sync_before_execution_action_packet() override=default
Definition: plugin_utils.h:181
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:35
std::atomic< killed_state > killed
Definition: sql_class.h:2667
A packet to inform that a given member did prepare a given transaction.
Definition: applier.h:159
const gr::Gtid_tsid & get_tsid() const
tsid accessor
Definition: applier.h:190
const Gcs_member_identifier m_gcs_member_id
Definition: applier.h:186
const rpl_gno m_gno
Definition: applier.h:185
~Transaction_prepared_action_packet() override=default
gr::Gtid_tsid m_tsid
Definition: applier.h:197
Transaction_prepared_action_packet(const gr::Gtid_tsid &tsid, bool is_tsid_specified, rpl_gno gno, const Gcs_member_identifier &gcs_member_id)
Create a new transaction prepared action.
Definition: applier.h:170
bool is_tsid_specified() const
returns information on whether TSID is specified for this trx
Definition: applier.h:194
const bool m_tsid_specified
Definition: applier.h:184
A packet to send view change related info to the applier.
Definition: pipeline_interfaces.h:115
Represents Transaction Source Identifier which is composed of source UUID and transaction tag.
Definition: tsid.h:46
#define mysql_cond_wait(C, M)
Definition: mysql_cond.h:47
#define mysql_mutex_lock(M)
Definition: mysql_mutex.h:49
#define mysql_mutex_unlock(M)
Definition: mysql_mutex.h:56
unsigned int PSI_memory_key
Instrumented memory key.
Definition: psi_memory_bits.h:48
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:55
unsigned char uchar
Definition: my_inttypes.h:51
static my_thread_id thread_id
Definition: my_thr_init.cc:62
uint32 my_thread_id
Definition: my_thread_local.h:33
int(* mysql_cond_broadcast)(mysql_cond_t *that, const char *src_file, unsigned int src_line)
Definition: mysql_cond_service.h:51
static bool ignore_errors
Definition: mysqlcheck.cc:61
static bool timeout(bool(*wait_condition)())
Timeout function.
Definition: log0meb.cc:497
Handler_pipeline_type
Definition: pipeline_factory.h:44
API for Group Replication plugin.
enum_group_replication_consistency_level
Definition: plugin_group_replication.h:34
PSI_stage_info info_GR_STAGE_module_suspending
Definition: plugin_psi.h:229
PSI_stage_info info_GR_STAGE_module_executing
Definition: plugin_psi.h:228
required string key
Definition: replication_asynchronous_connection_failover.proto:59
repeated Action action
Definition: replication_group_member_actions.proto:42
mysql::gtid::gno_t rpl_gno
GNO, the second (numeric) component of a GTID, is an alias of mysql::gtid::gno_t.
Definition: rpl_gtid.h:111
cs::index::rpl_sidno rpl_sidno
Type of SIDNO (source ID number, first component of GTID)
Definition: rpl_gtid.h:107
PSI_stage_key m_key
The registered stage key.
Definition: psi_stage_bits.h:75
Definition: my_thread_bits.h:57
An instrumented cond structure.
Definition: mysql_cond_bits.h:49
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:49
Definition: plugin_utils.h:47
bool is_running() const
Definition: plugin_utils.h:84