24#ifndef CERTIFIER_INCLUDE
25#define CERTIFIER_INCLUDE
33#include <unordered_map>
179 const uchar *data, ulong len,
183 std::map<std::string, std::string> *cert_info) = 0;
185 std::map<std::string, std::string> *cert_info) = 0;
199 std::equal_to<std::string>,
249 const uchar *data, ulong len,
274 std::list<const char *> *write_set,
bool generate_group_id,
276 bool local_transaction);
304 std::map<std::string, std::string> *cert_info)
override;
318 std::map<std::string, std::string> *cert_info)
override;
496 bool update_parallel_applier_last_committed_global,
497 bool increment_parallel_applier_sequence_number);
715 int64 *item_previous_sequence_number);
783 const unsigned char *)
override;
This class is a core component of the database state machine replication protocol.
Definition: certifier.h:112
mysql_cond_t broadcast_dispatcher_cond
Definition: certifier.h:159
mysql_mutex_t broadcast_dispatcher_lock
Definition: certifier.h:158
Certifier_broadcast_thread()
Certifier_broadcast_thread constructor.
Definition: certifier.cc:47
THD * broadcast_thd
Definition: certifier.h:154
int initialize()
Initialize broadcast thread.
Definition: certifier.cc:73
int terminate()
Terminate broadcast thread.
Definition: certifier.cc:101
mysql_mutex_t broadcast_run_lock
Definition: certifier.h:156
static const int BROADCAST_GTID_EXECUTED_PERIOD
Period (in seconds) between stable transactions set broadcast.
Definition: certifier.h:147
int broadcast_gtid_executed()
Broadcast local GTID_EXECUTED to group.
Definition: certifier.cc:202
size_t broadcast_counter
Definition: certifier.h:161
int broadcast_gtid_executed_period
Definition: certifier.h:162
bool aborted
Thread control.
Definition: certifier.h:153
void dispatcher()
Broadcast thread worker method.
Definition: certifier.cc:129
my_thread_handle broadcast_pthd
Definition: certifier.h:155
virtual ~Certifier_broadcast_thread()
Definition: certifier.cc:66
thread_state broadcast_thd_state
Definition: certifier.h:160
mysql_cond_t broadcast_run_cond
Definition: certifier.h:157
Definition: certifier.h:174
virtual bool set_group_stable_transactions_set(Gtid_set *executed_gtid_set)=0
virtual void handle_view_change()=0
virtual ulonglong get_certification_info_size() override=0
virtual bool is_conflict_detection_enable()=0
~Certifier_interface() override=default
virtual void get_certification_info(std::map< std::string, std::string > *cert_info)=0
virtual int handle_certifier_data(const uchar *data, ulong len, const Gcs_member_identifier &gcs_member_id)=0
virtual int set_certification_info(std::map< std::string, std::string > *cert_info)=0
virtual void disable_conflict_detection()=0
virtual void enable_conflict_detection()=0
virtual int stable_set_handle()=0
Definition: certifier_stats_interface.h:29
Definition: certifier.h:195
static const std::string GTID_EXTRACTED_NAME
Key used to store group_gtid_executed on certification info on View_change_log_event.
Definition: certifier.h:423
int get_group_stable_transactions_set_string(char **buffer, size_t *length) override
Returns the transactions in stable set in text format, that is, the set of transactions already appli...
Definition: certifier.cc:1193
rpl_sidno group_gtid_sid_map_group_sidno
Variable to store the sidno used for transactions which will be logged with the group_uuid.
Definition: certifier.h:434
Certification_info certification_info
Certification database.
Definition: certifier.h:582
int set_certification_info(std::map< std::string, std::string > *cert_info) override
Sets the certification info according to the given value.
Definition: certifier.cc:1608
bool conflict_detection_enable
Conflict detection is performed when: 1) group is on multi-master mode; 2) group is on single-primary...
Definition: certifier.h:692
bool is_conflict_detection_enable() override
Check if conflict detection is enable.
Definition: certifier.cc:1790
void compute_group_available_gtid_intervals()
This function computes the available GTID intervals from group UUID and stores them on group_availabl...
Definition: certifier.cc:467
int handle_certifier_data(const uchar *data, ulong len, const Gcs_member_identifier &gcs_member_id) override
Queues the packet coming from the reader for future processing.
Definition: certifier.cc:1333
int64 parallel_applier_sequence_number
Definition: certifier.h:589
int add_specified_gtid_to_group_gtid_executed(Gtid_log_event *gle)
Public method to add the given GTID value in the group_gtid_executed set which is used to support ski...
Definition: certifier.cc:953
void clear_certification_info()
Definition: certifier.cc:575
Gtid_set * stable_gtid_set
Definition: certifier.h:603
int initialize(ulonglong gtid_assignment_block_size)
Initialize certifier.
Definition: certifier.cc:602
bool add_item(const char *item, Gtid_set_ref *snapshot_version, int64 *item_previous_sequence_number)
Adds an item from transaction writeset to the certification DB.
Definition: certifier.cc:1139
void clear_members()
Method to clear the members.
Definition: certifier.cc:596
rpl_gno get_group_next_available_gtid(const char *member_uuid)
This method is used to get the next valid GNO for the transaction that is being executed.
Definition: certifier.cc:1022
Gtid_set * group_gtid_extracted
A Gtid_set which contains the gtid extracted from the certification info map of the donor.
Definition: certifier.h:668
std::atomic< bool > initialized
Is certifier initialized.
Definition: certifier.h:428
void disable_conflict_detection() override
Disables conflict detection.
Definition: certifier.cc:1774
Synchronized_queue< Data_packet * > * incoming
Definition: certifier.h:604
std::unordered_map< std::string, Gtid_set_ref *, std::hash< std::string >, std::equal_to< std::string >, Malloc_allocator< std::pair< const std::string, Gtid_set_ref * > > > Certification_info
Definition: certifier.h:201
void update_certified_transaction_count(bool result, bool local_transaction)
Definition: certifier.cc:1698
void clear_incoming()
Clear incoming queue.
Definition: certifier.cc:586
Certifier()
Definition: certifier.cc:252
Gtid_set::Interval reserve_gtid_block(longlong block_size)
This function reserves a block of GTIDs from the group_available_gtid_intervals list.
Definition: certifier.cc:522
int64 parallel_applier_last_sequence_number
Definition: certifier.h:588
std::vector< std::string > members
Definition: certifier.h:606
std::list< Gtid_set::Interval > group_available_gtid_intervals
List of free GTID intervals in group.
Definition: certifier.h:678
~Certifier() override
Definition: certifier.cc:306
rpl_sidno views_sidno_group_representation
The sidno used for view log events as seen by the group sid map.
Definition: certifier.h:439
void get_last_conflict_free_transaction(std::string *value) override
Get method to retrieve the last conflict free transaction.
Definition: certifier.cc:1743
rpl_sidno views_sidno_server_representation
The sidno used for view log events as seen by the server sid map.
Definition: certifier.h:443
Gtid generate_view_change_group_gtid()
Generate group GTID for a view change log event.
Definition: certifier.cc:1586
rpl_gno certify(Gtid_set *snapshot_version, std::list< const char * > *write_set, bool generate_group_id, const char *member_uuid, Gtid_log_event *gle, bool local_transaction)
This member function SHALL certify the set of items against transactions that have already passed the...
Definition: certifier.cc:676
ulonglong get_certification_info_size() override
Get method to retrieve the certification db size.
Definition: certifier.cc:1739
void update_parallel_applier_indexes(bool update_parallel_applier_last_committed_global, bool increment_parallel_applier_sequence_number)
This function updates parallel applier indexes.
Definition: certifier.cc:644
void get_certification_info(std::map< std::string, std::string > *cert_info) override
Retrieves the current certification info.
Definition: certifier.cc:1550
bool certifying_already_applied_transactions
Definition: certifier.h:650
ulonglong gtids_assigned_in_blocks_counter
Definition: certifier.h:684
Checkable_rwlock * stable_gtid_set_lock
Stable set and garbage collector variables.
Definition: certifier.h:601
bool same_member_message_discarded
Definition: certifier.h:593
ulonglong positive_cert
Definition: certifier.h:585
rpl_gno get_next_available_gtid_candidate(rpl_sidno sidno, rpl_gno start, rpl_gno end) const
Generate the candidate GNO for the current transaction.
Definition: certifier.cc:1093
ulonglong get_negative_certified() override
Get method to retrieve the number of negatively certified transactions.
Definition: certifier.cc:1737
ulonglong negative_cert
Definition: certifier.h:586
bool set_group_stable_transactions_set(Gtid_set *executed_gtid_set) override
This member function shall add transactions to the stable set.
Definition: certifier.cc:1224
mysql_mutex_t LOCK_certification_info
Definition: certifier.h:596
ulonglong get_positive_certified() override
Get the number of postively certified transactions by the certifier.
Definition: certifier.cc:1735
int initialize_server_gtid_set(bool get_server_gtid_retrieved=false)
Method to initialize the group_gtid_executed gtid set with the server gtid executed set and applier r...
Definition: certifier.cc:331
void add_to_group_gtid_executed_internal(rpl_sidno sidno, rpl_gno gno)
Internal method to add the given gtid gno in the group_gtid_executed set.
Definition: certifier.cc:556
Sid_map * group_gtid_sid_map
Definition: certifier.h:655
int64 parallel_applier_last_committed_global
Definition: certifier.h:587
void handle_view_change() override
Handle view changes on certifier.
Definition: certifier.cc:1537
Gtid_set * get_certified_write_set_snapshot_version(const char *item)
Find the snapshot_version corresponding to an item.
Definition: certifier.cc:1175
bool is_initialized()
Definition: certifier.h:565
Sid_map * stable_sid_map
Definition: certifier.h:602
uint64 gtid_assignment_block_size
The group GTID assignment block size.
Definition: certifier.h:673
std::map< std::string, Gtid_set::Interval > member_gtids
Extends the above to allow GTIDs to be assigned in blocks per member.
Definition: certifier.h:683
int add_group_gtid_to_group_gtid_executed(rpl_gno gno)
Public method to add the given gno value to the group_gtid_executed set which is used to support skip...
Definition: certifier.cc:983
void enable_conflict_detection() override
Enables conflict detection.
Definition: certifier.cc:1761
bool certifier_garbage_collection_block
Definition: certifier.h:592
Gtid_set * group_gtid_executed
Definition: certifier.h:661
static const std::string CERTIFICATION_INFO_ERROR_NAME
Key used to store errors in the certification info on View_change_log_event.
Definition: certifier.h:210
Gtid last_conflict_free_transaction
Last conflict free transaction identification.
Definition: certifier.h:577
rpl_gno get_next_available_gtid(const char *member_uuid, rpl_sidno sidno)
This method is used to get the next valid GNO for the given sidno, for the transaction that is being ...
Definition: certifier.cc:1026
int stable_set_handle() override
Computes intersection between all sets received, so that we have the already applied transactions on ...
Definition: certifier.cc:1410
mysql_mutex_t LOCK_members
Definition: certifier.h:694
int terminate()
Terminate certifier.
Definition: certifier.cc:635
void garbage_collect()
Removes the intersection of the received transactions stable sets from certification database.
Definition: certifier.cc:1249
Sid_map * certification_info_sid_map
Definition: certifier.h:583
Certifier_broadcast_thread * broadcast_thread
Broadcast thread.
Definition: certifier.h:699
This has the functionality of mysql_rwlock_t, with two differences:
Definition: rpl_gtid.h:309
It represents the identity of a group member within a certain group.
Definition: gcs_member_identifier.h:40
Definition: certifier.h:750
enum_payload_item_type
Definition: certifier.h:752
@ PIT_MAX
Definition: certifier.h:760
@ PIT_GTID_EXECUTED
Definition: certifier.h:757
@ PIT_UNKNOWN
Definition: certifier.h:754
Gtid_Executed_Message()
Gtid_Executed_Message constructor.
Definition: certifier.cc:1808
std::vector< uchar > data
Definition: certifier.h:786
~Gtid_Executed_Message() override
void append_gtid_executed(uchar *gtid_data, size_t len)
Appends Gtid executed information in a raw format.
Definition: certifier.cc:1813
void encode_payload(std::vector< unsigned char > *buffer) const override
Encodes the contents of this instance payload into the buffer.
Definition: certifier.cc:1817
void decode_payload(const unsigned char *buffer, const unsigned char *) override
Decodes the contents of the buffer and sets the payload field values according to the values decoded.
Definition: certifier.cc:1825
This is a subclass if Gtid_event and Log_event.
Definition: log_event.h:3790
This class extends Gtid_set to include a reference counter.
Definition: certifier.h:55
Gtid_set_ref(Sid_map *sid_map, int64 parallel_applier_sequence_number)
Definition: certifier.h:57
int64 parallel_applier_sequence_number
Definition: certifier.h:87
virtual ~Gtid_set_ref()=default
size_t link()
Increment the number of references by one.
Definition: certifier.h:69
size_t unlink()
Decrement the number of references by one.
Definition: certifier.h:76
int64 get_parallel_applier_sequence_number() const
Definition: certifier.h:81
size_t reference_counter
Definition: certifier.h:86
Represents a set of GTIDs.
Definition: rpl_gtid.h:1455
Sid_map * sid_map
Sid_map associated with this Gtid_set.
Definition: rpl_gtid.h:2319
Malloc_allocator is a C++ STL memory allocator based on my_malloc/my_free.
Definition: malloc_allocator.h:63
This is the base GCS plugin message.
Definition: gcs_plugin_messages.h:64
Represents a bidirectional map between SID and SIDNO.
Definition: rpl_gtid.h:724
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:34
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:177
Some integer typedefs for easier portability.
unsigned long long int ulonglong
Definition: my_inttypes.h:56
unsigned char uchar
Definition: my_inttypes.h:52
int64_t int64
Definition: my_inttypes.h:68
long long int longlong
Definition: my_inttypes.h:55
uint64_t uint64
Definition: my_inttypes.h:69
bool length(const dd::Spatial_reference_system *srs, const Geometry *g1, double *length, bool *null) noexcept
Computes the length of linestrings and multilinestrings.
Definition: length.cc:76
mutable_buffer buffer(void *p, size_t n) noexcept
Definition: buffer.h:420
Cursor end()
A past-the-end Cursor.
Definition: rules_table_service.cc:192
std::unordered_map< Key, Value, Hash, Key_equal, ut::allocator< std::pair< const Key, Value > > > unordered_map
Definition: ut0new.h:2898
int rpl_sidno
Type of SIDNO (source ID number, first component of GTID)
Definition: rpl_gtid.h:96
binary_log::gtids::gno_t rpl_gno
GNO, the second (numeric) component of a GTID, is an alias of binary_log::gtids::gno_t.
Definition: rpl_gtid.h:103
Represents one element in the linked list of intervals associated with a SIDNO.
Definition: rpl_gtid.h:1893
TODO: Move this structure to libbinlogevents/include/control_events.h when we start using C++11.
Definition: rpl_gtid.h:1066
Definition: my_thread_bits.h:52
An instrumented cond structure.
Definition: mysql_cond_bits.h:50
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:50
Definition: plugin_utils.h:47