MySQL 8.4.2
Source Code Documentation
|
Class that hold the logic to decide if we should or not execute a clone operation and the logic to launch it. More...
#include <remote_clone_handler.h>
Public Types | |
enum | enum_clone_check_result { DO_CLONE = 0 , DO_RECOVERY = 1 , CHECK_ERROR = 2 , NO_RECOVERY_POSSIBLE = 3 , CLONE_CHECKS_END = 4 } |
The possible results when checking what is the recovery strategy. More... | |
Public Member Functions | |
Remote_clone_handler (ulonglong threshold, ulong components_stop_timeout) | |
Constructor for the remote cloning handler. More... | |
~Remote_clone_handler () override | |
The destructor. More... | |
void | set_clone_threshold (ulonglong threshold) |
Set the class threshold for clone activation. More... | |
int | extract_donor_info (std::tuple< uint, uint, uint, bool > *donor_info) |
enum_clone_check_result | check_clone_preconditions () |
Check if clone or distributed recovery shall be used for provisioning. More... | |
int | clone_server (const std::string &group_name, const std::string &view_id) |
Launch the clone process with some preliminary checks. More... | |
void | terminate_clone_process (bool rejoin) |
Terminate the clone process. More... | |
void | lock_gr_clone_read_mode_lock () |
Lock when trying to set the read mode and a clone might be running. More... | |
void | unlock_gr_clone_read_mode_lock () |
Unlock when trying to set the read mode and a clone might be running. More... | |
Public Member Functions inherited from Group_event_observer | |
virtual | ~Group_event_observer ()=0 |
Private Types | |
enum | enum_clone_presence_query_result { CLONE_PLUGIN_NOT_PRESENT = 0 , CLONE_PLUGIN_PRESENT = 1 , CLONE_CHECK_QUERY_ERROR = 2 } |
What is the result when we check if the clone plugin is present. More... | |
enum | enum_clone_query_status { CLONE_QUERY_NOT_EXECUTING = 0 , CLONE_QUERY_EXECUTING = 1 , CLONE_QUERY_EXECUTED = 2 } |
What are the states of the clone execution query. More... | |
Private Member Functions | |
int | after_view_change (const std::vector< Gcs_member_identifier > &joining, const std::vector< Gcs_member_identifier > &leaving, const std::vector< Gcs_member_identifier > &group, bool is_leaving, bool *skip_election, enum_primary_election_mode *election_mode, std::string &suggested_primary) override |
Executed after view install and before primary election. More... | |
int | after_primary_election (std::string primary_uuid, enum_primary_election_primary_change_status primary_change_status, enum_primary_election_mode election_mode, int error) override |
Executed after primary election. More... | |
int | before_message_handling (const Plugin_gcs_message &message, const std::string &message_origin, bool *skip_message) override |
Executed before the message is processed. More... | |
void | clone_thread_handle () |
The clone thread process. More... | |
enum_clone_presence_query_result | check_clone_plugin_presence () |
Check if clone plugin is present. More... | |
void | get_clone_donors (std::list< Group_member_info * > &suitable_donors) |
Get all the valid members for cloning. More... | |
int | set_clone_ssl_options (Sql_service_command_interface *sql_command_interface) |
Configure the SSL options for the clone plugin. More... | |
int | fallback_to_recovery_or_leave (bool critical_error=false) |
In error fall back to recovery or error out. More... | |
int | update_donor_list (Sql_service_command_interface *sql_command_interface, std::string &hostname, std::string &port) |
Executes the query to change the allowed donor list for clone. More... | |
int | evaluate_server_connection (Sql_service_command_interface *sql_command_interface) |
Checks if the server connection was not killed. More... | |
int | run_clone_query (Sql_service_command_interface *sql_command_interface, std::string &hostname, std::string &port, std::string &username, std::string &password, bool use_ssl) |
Executes the query to remotely clone a server. More... | |
int | kill_clone_query () |
Kill the current query executing a clone. More... | |
bool | evaluate_error_code (int error_code) |
Given a error code it evaluates if the error is critical or not. More... | |
void | gr_clone_debug_point () |
Function for debug points. More... | |
Static Private Member Functions | |
static void * | launch_thread (void *arg) |
The thread callback passed onto mysql_thread_create. More... | |
Private Attributes | |
std::string | m_group_name |
The group to which the recovering member belongs. More... | |
std::string | m_view_id |
The view id when the clone started. More... | |
THD * | m_clone_thd |
the THD handle. More... | |
thread_state | m_clone_process_thd_state |
the state of the thread. More... | |
my_thread_handle | m_thd_handle |
the thread handle. More... | |
mysql_mutex_t | m_run_lock |
the mutex for controlling access to the thread itself. More... | |
mysql_cond_t | m_run_cond |
the cond_var used to signal the thread. More... | |
mysql_mutex_t | m_clone_query_lock |
the mutex for the clone process query. More... | |
mysql_mutex_t | m_clone_read_mode_lock |
the mutex for the clone external running status/read mode More... | |
bool | m_being_terminated |
Is the process being terminated. More... | |
enum_clone_query_status | m_clone_query_status |
What is the status on the read only mode enabling query. More... | |
unsigned long | m_clone_query_session_id |
The session id for the clone query. More... | |
ulonglong | m_clone_activation_threshold |
The threshold after which the clone process is invoked. More... | |
mysql_mutex_t | m_donor_list_lock |
the mutex for donor list accesses. More... | |
std::list< Group_member_info * > | m_suitable_donors |
The list of available donors. More... | |
Gcs_member_identifier * | m_current_donor_address |
The current donor address. More... | |
ulong | m_stop_wait_timeout |
Timeout on shutdown. More... | |
Class that hold the logic to decide if we should or not execute a clone operation and the logic to launch it.
|
private |
Remote_clone_handler::Remote_clone_handler | ( | ulonglong | threshold, |
ulong | components_stop_timeout | ||
) |
Constructor for the remote cloning handler.
threshold | The threshold for clone activation |
components_stop_timeout | The stop timeout in error cases |
|
override |
The destructor.
|
overrideprivatevirtual |
Executed after primary election.
primary_uuid | the elected primary |
primary_change_status | if the primary changed after the election |
election_mode | what was the election mode |
error | if there was and error on the process |
Implements Group_event_observer.
|
overrideprivatevirtual |
Executed after view install and before primary election.
joining | members joining the group | |
leaving | members leaving the group | |
group | members in the group | |
is_leaving | is the member leaving | |
[out] | skip_election | skip primary election on view |
[out] | election_mode | election mode |
[out] | suggested_primary | what should be the next primary to elect |
Implements Group_event_observer.
|
overrideprivatevirtual |
Executed before the message is processed.
message | The GCS message | |
message_origin | The member that sent this message (address) | |
[out] | skip_message | skip message handling if true |
Implements Group_event_observer.
|
private |
Check if clone plugin is present.
CLONE_PLUGIN_NOT_PRESENT | The plugin is not present or active |
CLONE_PLUGIN_PRESENT | The plugin is present and active |
CLONE_CHECK_QUERY_ERROR | There was an error when checking |
Remote_clone_handler::enum_clone_check_result Remote_clone_handler::check_clone_preconditions | ( | ) |
Check if clone or distributed recovery shall be used for provisioning.
DO_CLONE | Do a remote clone |
DO_RECOVERY | Don't clone, use distributed recovery |
CHECK_ERROR | Error when choosing the strategy |
NO_RECOVERY_POSSIBLE | No available members for clone or recovery |
int Remote_clone_handler::clone_server | ( | const std::string & | group_name, |
const std::string & | view_id | ||
) |
Launch the clone process with some preliminary checks.
group_name | The group name |
view_id | The view id when clone started |
0 | the thread launched successfully |
!= | 0 for some reason we did not launch the thread |
|
private |
The clone thread process.
|
private |
Given a error code it evaluates if the error is critical or not.
Basically it tells us if there is still data in the server.
[in] | error_code | the clone returned error |
true | error is critical |
false | error is not critical |
|
private |
Checks if the server connection was not killed.
If so, establish a new one.
[in] | sql_command_interface | the server connection |
0 | yes |
!= | 0 some error occurred |
int Remote_clone_handler::extract_donor_info | ( | std::tuple< uint, uint, uint, bool > * | donor_info | ) |
|
private |
In error fall back to recovery or error out.
[in] | critical_error | the error prevent distributed recovery |
Before falling back to recovery check if there are valid donors Since cloning can be time consuming valid members may have left or joined in the meanwhile.
|
private |
Get all the valid members for cloning.
[out] | suitable_donors | the list of possible donors |
|
private |
Function for debug points.
|
private |
Kill the current query executing a clone.
0 | the kill query was successful |
!= | 0 some error occurred |
|
staticprivate |
The thread callback passed onto mysql_thread_create.
[in] | arg | a pointer to a Remote_clone_handler instance. |
|
inline |
Lock when trying to set the read mode and a clone might be running.
|
private |
Executes the query to remotely clone a server.
[in] | sql_command_interface | the connection to use |
[in] | hostname | the hostname to use |
[in] | port | the port to use |
[in] | username | the username to use |
[in] | password | the password to use |
[in] | use_ssl | make clone use SSL |
0 | the clone was successful |
!= | 0 some error occurred |
|
private |
Configure the SSL options for the clone plugin.
[in] | sql_command_interface | the connection to use |
|
inline |
Set the class threshold for clone activation.
threshold | The threshold for clone activation |
void Remote_clone_handler::terminate_clone_process | ( | bool | rejoin | ) |
Terminate the clone process.
rejoin | Are we terminating or rejoining in the plugin |
|
inline |
Unlock when trying to set the read mode and a clone might be running.
|
private |
Executes the query to change the allowed donor list for clone.
[in] | sql_command_interface | the connection to use |
[in] | hostname | the hostname to set |
[in] | port | the port to set |
0 | the value was set |
!= | 0 some error occurred |
|
private |
Is the process being terminated.
|
private |
The threshold after which the clone process is invoked.
|
private |
the state of the thread.
|
private |
the mutex for the clone process query.
|
private |
The session id for the clone query.
|
private |
What is the status on the read only mode enabling query.
|
private |
the mutex for the clone external running status/read mode
|
private |
the THD handle.
|
private |
The current donor address.
|
private |
the mutex for donor list accesses.
|
private |
The group to which the recovering member belongs.
|
private |
the cond_var used to signal the thread.
|
private |
the mutex for controlling access to the thread itself.
|
private |
Timeout on shutdown.
|
private |
The list of available donors.
|
private |
the thread handle.
|
private |
The view id when the clone started.