MySQL 8.3.0
Source Code Documentation
rpl_source.h
Go to the documentation of this file.
1#ifndef RPL_SOURCE_H_INCLUDED
2#define RPL_SOURCE_H_INCLUDED
3
4/* Copyright (c) 2010, 2023, Oracle and/or its affiliates.
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License, version 2.0,
8 as published by the Free Software Foundation.
9
10 This program is also distributed with certain software (including
11 but not limited to OpenSSL) that is licensed under separate terms,
12 as designated in a particular file or component or in included license
13 documentation. The authors of MySQL hereby grant you an additional
14 permission to link the program and your derivative works with the
15 separately licensed software that they have included with MySQL.
16
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License, version 2.0, for more details.
21
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
25
26#include <stddef.h>
27#include <string> // std::string
28
29#include "my_hostname.h" // HOSTNAME_LENGTH
30#include "my_inttypes.h"
31#include "my_thread_local.h" // my_thread_id
32#include "mysql/gtid/uuid.h" // UUID
33#include "mysql_com.h" // USERNAME_LENGTH
34#include "sql/resource_blocker.h" // resource_blocker::User and Resource
35#include "sql/sql_const.h" // MAX_PASSWORD_LENGTH
36
37class Gtid_set;
38class String;
39class THD;
40
41extern bool server_id_supplied;
42extern int max_binlog_dump_events;
45
46// Returns the rpl_resource
48
59};
60
61int register_replica(THD *thd, uchar *packet, size_t packet_length);
62void unregister_replica(THD *thd, bool only_mine, bool need_lock_slave_list);
63bool show_replicas(THD *thd);
64String *get_replica_uuid(THD *thd, String *value);
66bool show_binlogs(THD *thd);
68
69/**
70 Process a COM_BINLOG_DUMP_GTID packet.
71
72 This function parses the packet and then calls mysql_binlog_send.
73
74 @param thd The dump thread.
75 @param packet The COM_BINLOG_DUMP_GTID packet.
76 @param packet_length The length of the packet in bytes.
77 @retval true Error
78 @retval false Success
79*/
80bool com_binlog_dump_gtid(THD *thd, char *packet, size_t packet_length);
81
82/**
83 Process a COM_BINLOG_DUMP packet.
84
85 This function parses the packet and then calls mysql_binlog_send.
86
87 @param thd The dump thread.
88 @param packet The COM_BINLOG_DUMP packet.
89 @param packet_length The length of the packet in bytes.
90 @retval true Error
91 @retval false Success
92*/
93bool com_binlog_dump(THD *thd, char *packet, size_t packet_length);
94
95/**
96 Low-level function where the dump thread iterates over the binary
97 log and sends events to the slave. This function is common for both
98 COM_BINLOG_DUMP and COM_BINLOG_DUMP_GTID.
99
100 @param thd The dump thread.
101
102 @param log_ident The filename of the binary log, as given in the
103 COM_BINLOG_DUMP[_GTID] packet. If this is is an empty string (first
104 character is '\0'), we start with the oldest binary log.
105
106 @param pos The offset in the binary log, as given in the
107 COM_BINLOG_DUMP[_GTID] packet. This must be at least 4 and at most
108 the size of the binary log file.
109
110 @param gtid_set The gtid_set that the slave sent, or NULL if the
111 protocol is COM_BINLOG_DUMP.
112
113 @param flags flags in COM_BINLOG_DUMP[_GTID] packets.
114
115 @note This function will start reading at the given (filename,
116 offset), or from the oldest log if filename[0]==0. It will send all
117 events from that position; but if gtid_set!=NULL, it will skip all
118 events in that set.
119*/
120void mysql_binlog_send(THD *thd, char *log_ident, my_off_t pos,
121 Gtid_set *gtid_set, uint32 flags);
122
123bool reset_binary_logs_and_gtids(THD *thd, bool unlock_read_lock);
124
125class user_var_entry;
126/**
127 Read a user variable that may exist under two different names.
128
129 @param thd The session to read from.
130
131 @param alt1 The first variable name alternative.
132
133 @param alt2 The second variable name alternative.
134
135 @retval If there exists a user variable in the current session with
136 the first name, return that. Otherwise, if the second one exists,
137 return that. Otherwise, return NULL.
138*/
140 const std::string alt1,
141 const std::string alt2);
142
143#endif /* RPL_SOURCE_H_INCLUDED */
Represents a set of GTIDs.
Definition: rpl_gtid.h:1555
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:166
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:35
Represents a "Resource" which can be either "used" by a number of threads, or "blocked" by a number o...
Definition: resource_blocker.h:69
Definition: item_func.h:3012
bool server_id_supplied
Definition: mysqld.cc:1203
static int flags[50]
Definition: hp_test1.cc:39
Common definition used by mysys, performance schema and server & client.
static constexpr int HOSTNAME_LENGTH
Definition: my_hostname.h:42
Some integer typedefs for easier portability.
ulonglong my_off_t
Definition: my_inttypes.h:71
unsigned char uchar
Definition: my_inttypes.h:51
uint16_t uint16
Definition: my_inttypes.h:64
uint32_t uint32
Definition: my_inttypes.h:66
uint32 my_thread_id
Definition: my_thread_local.h:33
Common definition between mysql server & client.
#define USERNAME_LENGTH
Definition: mysql_com.h:68
void mysql_binlog_send(THD *thd, char *log_ident, my_off_t pos, Gtid_set *gtid_set, uint32 flags)
Low-level function where the dump thread iterates over the binary log and sends events to the slave.
Definition: rpl_source.cc:1055
const user_var_entry * get_user_var_from_alternatives(const THD *thd, const std::string alt1, const std::string alt2)
Read a user variable that may exist under two different names.
Definition: rpl_source.cc:1062
resource_blocker::Resource & get_dump_thread_resource()
Definition: rpl_source.cc:86
bool com_binlog_dump(THD *thd, char *packet, size_t packet_length)
Process a COM_BINLOG_DUMP packet.
Definition: rpl_source.cc:933
int max_binlog_dump_events
Definition: rpl_source.cc:80
bool show_binlogs(THD *thd)
Execute a SHOW BINARY LOGS statement.
Definition: rpl_source.cc:1332
void unregister_replica(THD *thd, bool only_mine, bool need_lock_slave_list)
Definition: rpl_source.cc:205
void kill_zombie_dump_threads(THD *thd)
Definition: rpl_source.cc:1157
int register_replica(THD *thd, uchar *packet, size_t packet_length)
Register slave in 'slave_list' hash table.
Definition: rpl_source.cc:141
bool show_binary_log_status(THD *thd)
Execute a SHOW BINARY LOG STATUS statement.
Definition: rpl_source.cc:1271
bool com_binlog_dump_gtid(THD *thd, char *packet, size_t packet_length)
Process a COM_BINLOG_DUMP_GTID packet.
Definition: rpl_source.cc:985
bool opt_show_replica_auth_info
Definition: mysqld.cc:1245
String * get_replica_uuid(THD *thd, String *value)
An auxiliary function extracts slave UUID.
Definition: rpl_source.cc:1081
bool opt_sporadic_binlog_dump_fail
Definition: rpl_source.cc:81
bool show_replicas(THD *thd)
Execute a SHOW REPLICAS / SHOW SLAVE HOSTS statement.
Definition: rpl_source.cc:230
bool reset_binary_logs_and_gtids(THD *thd, bool unlock_read_lock)
Execute a RESET BINARY LOGS AND GTIDS statement.
Definition: rpl_source.cc:1199
File containing constants that can be used throughout the server.
Definition: rpl_source.h:49
char host[HOSTNAME_LENGTH+1]
Definition: rpl_source.h:52
my_thread_id thd_id
Definition: rpl_source.h:56
uint16 port
Definition: rpl_source.h:55
mysql::gtid::Uuid replica_uuid
Definition: rpl_source.h:57
char user[USERNAME_LENGTH+1]
Definition: rpl_source.h:53
uint32 master_id
Definition: rpl_source.h:51
uint32 rpl_recovery_rank
Definition: rpl_source.h:51
char password[MAX_PASSWORD_LENGTH+1]
Definition: rpl_source.h:54
bool valid_replica_uuid
Definition: rpl_source.h:58
uint32 server_id
Definition: rpl_source.h:50
Uuid is a trivial and of standard layout The structure contains the following components.
Definition: uuid.h:63
#define MAX_PASSWORD_LENGTH
Definition: validate_password.cc:65