![]() |
MySQL 8.4.4
Source Code Documentation
|
#include <recovery_metadata_message.h>
Public Types | |
enum | enum_payload_item_type { PIT_UNKNOWN = 0 , PIT_VIEW_ID = 1 , PIT_RECOVERY_METADATA_COMPRESSION_TYPE = 2 , PIT_UNTIL_CONDITION_AFTER_GTIDS = 3 , PIT_COMPRESSED_CERTIFICATION_INFO_PACKET_COUNT = 4 , PIT_COMPRESSED_CERTIFICATION_INFO_PAYLOAD = 5 , PIT_COMPRESSED_CERTIFICATION_INFO_UNCOMPRESSED_LENGTH = 6 , PIT_RECOVERY_METADATA_MESSAGE_ERROR = 7 , PIT_SENT_TIMESTAMP = 8 , PIT_MAX = 9 } |
Recovery Metadata message payload type. More... | |
enum | Recovery_metadata_message_payload_error { RECOVERY_METADATA_NO_ERROR = 0 , RECOVERY_METADATA_ERROR = 1 } |
Recovery Metadata message payload error. More... | |
enum class | enum_recovery_metadata_message_error { RECOVERY_METADATA_MESSAGE_OK , ERR_CERT_INFO_EMPTY , ERR_AFTER_GTID_SET_ENCODING , ERR_PAYLOAD_BUFFER_EMPTY , ERR_PAYLOAD_TYPE_DECODING , ERR_PAYLOAD_DECODING , ERR_PAYLOAD_TYPE_NOT_DECODED , ERR_PAYLOAD_TYPE_UNKOWN } |
Recovery Metadata message error. More... | |
The different cargo type codes. More... |
Public Member Functions | |
Recovery_metadata_message (const std::string &view_id, Recovery_metadata_message_payload_error error=RECOVERY_METADATA_NO_ERROR, GR_compress::enum_compression_type compression_type=GR_compress::enum_compression_type::ZSTD_COMPRESSION) | |
Message constructor. More... | |
virtual | ~Recovery_metadata_message () override |
Message destructor. More... | |
Recovery_metadata_message (const uchar *buf, size_t len) | |
Message constructor for raw data. More... | |
std::string & | get_encode_view_id () |
Return the message view_id which was generated when new member joined. More... | |
Recovery_metadata_message_payload_error | get_encode_message_error () |
Return the message error type. More... | |
void | set_encode_message_error () |
Set the message error type. More... | |
GR_compress::enum_compression_type | get_encode_compression_type () |
Return the compression type with which Certification Information compressed. More... | |
std::string & | get_encode_group_gtid_executed () |
Returns the gtid executed from the certification info map of the donor. More... | |
std::vector< GR_compress * > & | get_encode_compressor_list () |
Returns the compressed Certification Information divided in multiple elements of the vector. More... | |
void | set_joining_members (std::vector< Gcs_member_identifier > &joining_members) |
Set members joining the view. More... | |
void | set_valid_metadata_senders (std::vector< Gcs_member_identifier > &online_members) |
Set members ONLINE in the view. More... | |
void | sort_valid_metadata_sender_list_using_uuid () |
Set the vector m_valid_metadata_sender_list. More... | |
void | set_metadata_sender (Gcs_member_identifier &sender_gcs_id) |
Set metadata sender. More... | |
bool | donor_left () |
Check if recovery metadata donor has left the group. More... | |
std::pair< bool, Gcs_member_identifier > | compute_and_get_current_metadata_sender () |
Compute the current metadata sender and return the GCS Member ID of the current metadata sender. More... | |
bool | am_i_recovery_metadata_sender () |
Checks if local member is metadata sender. More... | |
void | delete_members_left (std::vector< Gcs_member_identifier > &member_left) |
Remove the members that left the group from the joining and valid sender list. More... | |
bool | is_joiner_or_valid_sender_list_empty () |
Return if joiner and valid metadata sender list is empty or not. More... | |
bool | save_copy_of_recovery_metadata_payload () |
Save copy of undecoded metadata, so it can be decoded and used later when required. More... | |
void | delete_copy_of_recovery_metadata_payload () |
Delete the saved copy of undecoded metadata. More... | |
void | set_decoded_message_error () |
Set the decoded message error type. More... | |
std::pair< enum_recovery_metadata_message_error, std::reference_wrapper< std::string > > | get_decoded_view_id () |
Return view_id generated when new member joined. More... | |
std::pair< enum_recovery_metadata_message_error, Recovery_metadata_message_payload_error > | get_decoded_message_error () |
Return the payload send message error received error in Recovery Metadata message. More... | |
std::pair< enum_recovery_metadata_message_error, GR_compress::enum_compression_type > | get_decoded_compression_type () |
Return the compression type with which Certification Information compressed in received Recovery Metadata message. More... | |
std::pair< enum_recovery_metadata_message_error, std::reference_wrapper< std::string > > | get_decoded_group_gtid_executed () |
Return the executed gtid set received from sender in received Recovery Metadata message. More... | |
std::pair< enum_recovery_metadata_message_error, unsigned int > | get_decoded_compressed_certification_info_packet_count () |
Return the Compressed Certification Info packet count received in Recovery Metadata message. More... | |
std::tuple< Recovery_metadata_message::enum_recovery_metadata_message_error, unsigned long long, unsigned long long > | get_decoded_compressed_certification_info_uncompressed_length (const unsigned char *payload_start_pos) |
Return the Certification Info packet's uncompressed_length i.e. More... | |
std::tuple< Recovery_metadata_message::enum_recovery_metadata_message_error, const unsigned char *, unsigned long long > | get_decoded_compressed_certification_info_payload (const unsigned char *payload_start_pos) |
Return the compressed Certification Info payload. More... | |
Static Public Member Functions | |
static uint64_t | get_sent_timestamp (const unsigned char *buffer, size_t length) |
Return the time at which the message contained in the buffer was sent. More... | |
Public Attributes | |
std::map< int, std::string > | m_payload_item_type_string |
Recovery Metadata message payload type name. More... | |
Protected Member Functions | |
void | encode_payload (std::vector< unsigned char > *buffer) const override |
Encodes the message contents for transmission. More... | |
void | decode_payload (const unsigned char *buffer, const unsigned char *end) override |
Message decoding method. More... | |
Private Member Functions | |
bool | encode_compressed_certification_info_payload (std::vector< unsigned char > *buffer) const |
Encodes the certification info for transmission. More... | |
std::tuple< enum_recovery_metadata_message_error, const unsigned char *, unsigned long long > | decode_payload_type (int payload_type, const unsigned char *payload_start=nullptr) const |
Message decoding method to decode received metadata payload. More... | |
Private Attributes | |
std::string | m_encode_view_id |
The view_id generated when new member joined. More... | |
Recovery_metadata_message_payload_error | m_encode_metadata_message_error |
The enum_recovery_metadata_message_error message error type. More... | |
GR_compress::enum_compression_type | m_encode_metadata_compression_type |
The compression type with which Certification Information compressed. More... | |
std::string | m_encoded_group_gtid_executed {} |
The executed gtid set received from sender. More... | |
std::string | m_decoded_view_id |
The view_id received from sender. More... | |
std::string | m_decoded_group_gtid_executed {} |
The executed gtid set from sender. More... | |
std::pair< enum_recovery_metadata_message_error, std::reference_wrapper< std::string > > | m_decoded_view_id_error |
The pair of <enum_recovery_metadata_message_error error, View ID>. More... | |
std::pair< enum_recovery_metadata_message_error, Recovery_metadata_message_payload_error > | m_decoded_message_send_error |
The pair of <enum_recovery_metadata_message_error error, Recovery_metadata_message_payload_error payload_error>. More... | |
std::pair< enum_recovery_metadata_message_error, GR_compress::enum_compression_type > | m_decoded_compression_type_error |
The pair of <enum_recovery_metadata_message_error error, GR_compress::enum_compression_type>. More... | |
std::pair< enum_recovery_metadata_message_error, std::reference_wrapper< std::string > > | m_decoded_group_gtid_executed_error |
The pair of <enum_recovery_metadata_message_error error, executed gtid set>. More... | |
std::pair< enum_recovery_metadata_message_error, unsigned int > | m_decoded_certification_info_packet_count_error |
The pair of <enum_recovery_metadata_message_error error, Compress Certification Info packet count>. More... | |
std::tuple< Recovery_metadata_message::enum_recovery_metadata_message_error, unsigned long long, unsigned long long > | m_decoded_certification_info_uncompressed_length_error |
The tuple of <enum_recovery_metadata_message_error error, Certification Info packet uncompressed_length i.e. More... | |
std::tuple< Recovery_metadata_message::enum_recovery_metadata_message_error, const unsigned char *, unsigned long long > | m_decoded_compressed_certification_info_error |
The std::tuple of <enum_recovery_metadata_message_error error, compressed Certification Info packet, length of compressed Certification Info packet>. More... | |
std::vector< GR_compress * > | m_encode_compressor_list |
The Certification Information in compressed and serialized format, used by the joining member for the recovery. More... | |
std::vector< Gcs_member_identifier > | m_members_joined_in_view |
The members joining in the view. More... | |
std::vector< Gcs_member_identifier > | m_valid_metadata_senders |
The members ONLINE in the view. More... | |
Gcs_member_identifier | m_member_id_sending_metadata |
The GCS Member ID of the member sending recovery metadata. More... | |
const unsigned char * | m_decode_metadata_buffer |
This pointer is added to start of buffer part which is yet to be decoded. More... | |
bool | m_decode_is_metadata_buffer_local_copy {false} |
The metadata is broadcasted to all group members but only joiners require after_gtids and compressed certification info part of metadata which is processed by recovery thread, while view_id and metadata error part of metadata required by other members is processed by GCS thread. More... | |
const unsigned char * | m_decode_metadata_end |
The end position of received metadata message payload. More... | |
size_t | m_decode_metadata_length {0} |
The length of yet to be decoded part of buffer. More... | |
Additional Inherited Members |
Recovery Metadata message payload type.
|
strong |
Recovery_metadata_message::Recovery_metadata_message | ( | const std::string & | view_id, |
Recovery_metadata_message_payload_error | error = RECOVERY_METADATA_NO_ERROR , |
||
GR_compress::enum_compression_type | compression_type = GR_compress::enum_compression_type::ZSTD_COMPRESSION |
||
) |
Message constructor.
[in] | view_id | the view_id generated when new member joined |
[in] | error | the message error type |
[in] | compression_type | the compression type with which Certification Information compressed |
|
overridevirtual |
Message destructor.
Recovery_metadata_message::Recovery_metadata_message | ( | const uchar * | buf, |
size_t | len | ||
) |
Message constructor for raw data.
[in] | buf | raw data |
[in] | len | raw length |
bool Recovery_metadata_message::am_i_recovery_metadata_sender | ( | ) |
Checks if local member is metadata sender.
false | local member is recovery metadata sender. |
true | local member is not recovery metadata sender. |
std::pair< bool, Gcs_member_identifier > Recovery_metadata_message::compute_and_get_current_metadata_sender | ( | ) |
Compute the current metadata sender and return the GCS Member ID of the current metadata sender.
|
overrideprotectedvirtual |
Message decoding method.
[in] | buffer | the received data |
[in] | end | the end of the buffer |
Implements Plugin_gcs_message.
|
private |
Message decoding method to decode received metadata payload.
The metadata is broadcasted to all group members but only joiners require after_gtids and compressed certification info part of metadata. And on all other members only require view_id and metadata error part of metadata.
[in] | payload_type | the payload type to be decoded |
[in] | payload_start | If payload_start is provided then payload types are search from that position |
void Recovery_metadata_message::delete_copy_of_recovery_metadata_payload | ( | ) |
Delete the saved copy of undecoded metadata.
void Recovery_metadata_message::delete_members_left | ( | std::vector< Gcs_member_identifier > & | member_left | ) |
Remove the members that left the group from the joining and valid sender list.
[in] | member_left | All GCS Member ID that left the group. |
bool Recovery_metadata_message::donor_left | ( | ) |
Check if recovery metadata donor has left the group.
true | donor left the group |
false | donor is still on the group true donor left |
|
private |
Encodes the certification info for transmission.
[out] | buffer | the buffer to encode to |
false | OK |
true | Error |
|
overrideprotectedvirtual |
Encodes the message contents for transmission.
[out] | buffer | the message buffer to be written |
Implements Plugin_gcs_message.
std::pair< Recovery_metadata_message::enum_recovery_metadata_message_error, unsigned int > Recovery_metadata_message::get_decoded_compressed_certification_info_packet_count | ( | ) |
Return the Compressed Certification Info packet count received in Recovery Metadata message.
If the Compressed Certification Info packet count was already decoded earlier it returns saved value.
std::tuple< Recovery_metadata_message::enum_recovery_metadata_message_error, const unsigned char *, unsigned long long > Recovery_metadata_message::get_decoded_compressed_certification_info_payload | ( | const unsigned char * | payload_start_pos | ) |
Return the compressed Certification Info payload.
The Recovery Metadata message can have multiple packets of Compressed Certification Info. If the start position argument is provided the next compressed Certification Info packet type i.e. PIT_COMPRESSED_CERTIFICATION_INFO_PAYLOAD packet type is searched and fetched after that position.
[in] | payload_start_pos | the next compressed Certification Info packet packet type is searched and fetched after the position. |
std::tuple< Recovery_metadata_message::enum_recovery_metadata_message_error, unsigned long long, unsigned long long > Recovery_metadata_message::get_decoded_compressed_certification_info_uncompressed_length | ( | const unsigned char * | payload_start_pos | ) |
Return the Certification Info packet's uncompressed_length i.e.
size of packet before compression. The Recovery Metadata message can have multiple packets of Compressed Certification Info. If the start position argument is provided the next Certification Info packet uncompressed_length packet type i.e. PIT_COMPRESSED_CERTIFICATION_INFO_UNCOMPRESSED_LENGTH packet type is searched and fetched after that position.
[in] | payload_start_pos | the next Certification Info packet uncompressed_length packet type is searched and fetched after the position. |
std::pair< Recovery_metadata_message::enum_recovery_metadata_message_error, GR_compress::enum_compression_type > Recovery_metadata_message::get_decoded_compression_type | ( | ) |
Return the compression type with which Certification Information compressed in received Recovery Metadata message.
If the compression type was already decoded earlier it returns saved compression type value.
std::pair< Recovery_metadata_message::enum_recovery_metadata_message_error, std::reference_wrapper< std::string > > Recovery_metadata_message::get_decoded_group_gtid_executed | ( | ) |
Return the executed gtid set received from sender in received Recovery Metadata message.
If the executed gtid set was already decoded earlier it returns saved executed gtid set value.
std::pair< Recovery_metadata_message::enum_recovery_metadata_message_error, Recovery_metadata_message::Recovery_metadata_message_payload_error > Recovery_metadata_message::get_decoded_message_error | ( | ) |
Return the payload send message error received error in Recovery Metadata message.
If the payload send message error was decoded earlier it return saved error value.
std::pair< Recovery_metadata_message::enum_recovery_metadata_message_error, std::reference_wrapper< std::string > > Recovery_metadata_message::get_decoded_view_id | ( | ) |
Return view_id generated when new member joined.
Decodes and return view_id generated when new member joined. If the view_id was decoded earlier it return saved view_id value.
GR_compress::enum_compression_type Recovery_metadata_message::get_encode_compression_type | ( | ) |
Return the compression type with which Certification Information compressed.
std::vector< GR_compress * > & Recovery_metadata_message::get_encode_compressor_list | ( | ) |
Returns the compressed Certification Information divided in multiple elements of the vector.
std::string & Recovery_metadata_message::get_encode_group_gtid_executed | ( | ) |
Returns the gtid executed from the certification info map of the donor.
It is the set of transactions that is executed at the time of view change at donor.
Recovery_metadata_message::Recovery_metadata_message_payload_error Recovery_metadata_message::get_encode_message_error | ( | ) |
Return the message error type.
std::string & Recovery_metadata_message::get_encode_view_id | ( | ) |
Return the message view_id which was generated when new member joined.
|
static |
Return the time at which the message contained in the buffer was sent.
[in] | buffer | the buffer to decode from. |
[in] | length | the buffer length |
bool Recovery_metadata_message::is_joiner_or_valid_sender_list_empty | ( | ) |
Return if joiner and valid metadata sender list is empty or not.
If any of the list is empty true is return.
false | Atleast 1 joiner and valid metadata sender is present in group |
true | Either there are no joiner or valid metadata sender |
bool Recovery_metadata_message::save_copy_of_recovery_metadata_payload | ( | ) |
Save copy of undecoded metadata, so it can be decoded and used later when required.
The metadata is broadcasted to all group members but only joiners require after_gtids and compressed certification info part of metadata. And on all other members only require view_id and metadata error part of metadata. The view id and metadata error part only is decoded by GCS thread. Only joiner require this rest of metadata part for receovery and processing on GCS thread will block it for longer duration, so it's copy is saved in this function and decoded by recovery thread.
false | OK |
true | Error |
void Recovery_metadata_message::set_decoded_message_error | ( | ) |
Set the decoded message error type.
void Recovery_metadata_message::set_encode_message_error | ( | ) |
Set the message error type.
void Recovery_metadata_message::set_joining_members | ( | std::vector< Gcs_member_identifier > & | joining_members | ) |
Set members joining the view.
[in] | joining_members | members joining the view |
void Recovery_metadata_message::set_metadata_sender | ( | Gcs_member_identifier & | sender_gcs_id | ) |
Set metadata sender.
[in] | sender_gcs_id | GCS Member ID of the sender. |
void Recovery_metadata_message::set_valid_metadata_senders | ( | std::vector< Gcs_member_identifier > & | online_members | ) |
Set members ONLINE in the view.
[in] | online_members | members ONLINE in view |
void Recovery_metadata_message::sort_valid_metadata_sender_list_using_uuid | ( | ) |
Set the vector m_valid_metadata_sender_list.
|
private |
The metadata is broadcasted to all group members but only joiners require after_gtids and compressed certification info part of metadata which is processed by recovery thread, while view_id and metadata error part of metadata required by other members is processed by GCS thread.
The processing of after_gtids and compressed certification info on GCS thread will block it for longer duration, so it's copy is saved in this
|
private |
This pointer is added to start of buffer part which is yet to be decoded.
The buffer is the metadata message payload received from metadata sender members consisting of after_gtids, compressed certification info payload.
|
private |
The end position of received metadata message payload.
|
private |
The length of yet to be decoded part of buffer.
The buffer is the metadata message payload received from metadata sender members consisting of after_gtids, compressed certification info payload.
|
private |
The pair of <enum_recovery_metadata_message_error error, Compress Certification Info packet count>.
The Compress Certification Info packet count is the number of compressed Certification Info packets received from the Recovery Metadata sender.
|
private |
The tuple of <enum_recovery_metadata_message_error error, Certification Info packet uncompressed_length i.e.
size of packet before compression, length of uncompressed_length payload>.
|
private |
The std::tuple of <enum_recovery_metadata_message_error error, compressed Certification Info packet, length of compressed Certification Info packet>.
|
private |
The pair of <enum_recovery_metadata_message_error error, GR_compress::enum_compression_type>.
The compression type with which Certification Information compressed.
|
private |
The executed gtid set from sender.
|
private |
The pair of <enum_recovery_metadata_message_error error, executed gtid set>.
The executed gtid set is received from sender.
|
private |
The pair of <enum_recovery_metadata_message_error error, Recovery_metadata_message_payload_error payload_error>.
The payload error is received error in Recovery Metadata message and determines errors while delivering message to group.
|
private |
The view_id received from sender.
|
private |
The pair of <enum_recovery_metadata_message_error error, View ID>.
The View ID generated when new member joined.
|
mutableprivate |
The Certification Information in compressed and serialized format, used by the joining member for the recovery.
|
private |
The compression type with which Certification Information compressed.
|
private |
The enum_recovery_metadata_message_error message error type.
|
private |
The view_id generated when new member joined.
|
private |
The executed gtid set received from sender.
|
private |
The GCS Member ID of the member sending recovery metadata.
|
private |
The members joining in the view.
std::map<int, std::string> Recovery_metadata_message::m_payload_item_type_string |
Recovery Metadata message payload type name.
|
private |
The members ONLINE in the view.