MySQL 26.10.0
Source Code Documentation
gcs_mysql_network_provider.h
Go to the documentation of this file.
1/* Copyright (c) 2016, 2026, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is designed to work with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have either included with
13 the program or referenced in the documentation.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License, version 2.0, for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#ifndef GCS_MYSQL_NETWORK_PROVIDER_INCLUDED
25#define GCS_MYSQL_NETWORK_PROVIDER_INCLUDED
26
27#include <map>
28
29#include "include/mysql.h"
30
31#include <mysql.h>
32
34
38#include "sql/sql_class.h"
39
40/**
41 * @brief IoC interface to allow abstraction of the retrieval of Security
42 * Credentials
43 *
44 */
46 public:
48
49 /**
50 * @brief Get the user credentials needed to establish MySQL connections.
51 *
52 * This interface is used either as a proxy for @see Replication_thread_api
53 * or to be injected by unit tests.
54 *
55 * @param username username for the mysql connection
56 * @param password password for the mysql connection
57 *
58 * @return the operation status
59 * @retval false OK
60 * @retval true Error, channel not found
61 */
62 virtual bool get_credentials(std::string &username,
63 std::string &password) = 0;
64};
65
66/**
67 * @brief Implementation of Gcs_mysql_network_provider_auth_interface
68 * that retrieves auth data from MySQL.
69 */
72 public:
74 : m_recovery_channel("group_replication_recovery") {}
76
77 /**
78 * @brief Get the user credentials needed to establish MySQL connections.
79 *
80 * @see Gcs_mysql_network_provider_auth_interface#get_credentials
81 */
82 bool get_credentials(std::string &username, std::string &password) override;
83
84 private:
86};
87
88/**
89 * @brief IoC interface to allow abstraction of MySQL Client API
90 *
91 */
93 public:
95
96 /**
97 * @brief Proxy method to mysql_real_connect from the MySQL client API
98 *
99 * @param mysql mysql client connection reference. Must have been
100 * initializaed with mysql_init
101 * @param host hostname to connect
102 * @param user username for the connection
103 * @param passwd password for the connection
104 * @param db database/schema to use
105 * @param port remote port to connect
106 * @param unix_socket unix socket file (if applicable)
107 * @param clientflag client flags
108 * @return MYSQL* a mysql client connection.
109 */
110 virtual MYSQL *mysql_real_connect(MYSQL *mysql, const char *host,
111 const char *user, const char *passwd,
112 const char *db, unsigned int port,
113 const char *unix_socket,
114 unsigned long clientflag) = 0;
115 /**
116 * @brief Proxy method to simple_command from the MySQL client API
117 *
118 * @param mysql an active MySQL connection
119 * @param command the command to send
120 * @param arg command arguments
121 * @param length length of the arguments
122 * @param skip_check skip checking the command
123 *
124 * @return true in case of error. false, otherwise
125 *
126 */
127 virtual bool send_command(MYSQL *mysql, enum enum_server_command command,
128 const unsigned char *arg, size_t length,
129 bool skip_check) = 0;
130
131 /**
132 * @brief Proxy method to mysql_errno from the MySQL client API
133 *
134 * @param mysql an initialized MySQL connection
135 *
136 * @return the last client error number
137 */
138 virtual unsigned int mysql_errno(MYSQL *mysql) = 0;
139
140 /**
141 * @brief Proxy method to mysql_init from the MySQL Client API
142 *
143 * @param sock the connection to initialize
144 */
145 virtual MYSQL *mysql_init(MYSQL *sock) = 0;
146
147 /**
148 * @brief Proxy method to mysql_close from the MySQL Client API
149 *
150 * @param sock the connection to close
151 */
152 virtual void mysql_close(MYSQL *sock) = 0;
153
154 /**
155 Method to get the network namespace configured for a channel
156
157 @param[out] net_ns The network namespace to extract
158
159 @return the operation status
160 @retval false OK
161 @retval true Error, channel not found
162 */
163 virtual int channel_get_network_namespace(std::string &net_ns) = 0;
164
165 /**
166 Set active network namespace specified by a name.
167
168 @param network_namespace the name of a network namespace to be set active
169
170 @return false on success, true on error
171 @note all opened descriptors used during function run are closed on error
172 */
173 virtual bool set_network_namespace(const std::string &network_namespace) = 0;
174
175 /**
176 Restore original network namespace used to be active before a new network
177 namespace has been set.
178
179 @return false on success, true on failure
180 */
182
183 /**
184 * @brief Proxy method to mysql_free from the MySQL Memory API
185 *
186 * @param ptr the pointer to free
187 */
188 virtual void mysql_free(void *ptr) = 0;
189
190 /**
191 * @brief Proxy method to mysql_options from the MySQL Memory API
192 *
193 * @param mysql connection to set an option
194 * @param option option to set
195 * @param arg value of the option to set
196 *
197 * @return int > 0 in case of error.
198 */
199 virtual int mysql_options(MYSQL *mysql, enum mysql_option option,
200 const void *arg) = 0;
201
202 /**
203 * @brief Proxy method to mysql_ssl_set from the MySQL Memory API
204 *
205 * @param mysql connection to set SSL options
206 * @param key connection key
207 * @param cert connection certificate
208 * @param ca connection CA
209 * @param capath the CA path
210 * @param cipher cipher to use
211 *
212 * @return true in case of error;
213 * @return false otherwise.
214 */
215 virtual bool mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert,
216 const char *ca, const char *capath,
217 const char *cipher) = 0;
218};
219
220/**
221 * @brief Internal implementation of
222 * Gcs_mysql_network_provider_native_interface_impl that serves as a proxy
223 * for MySQL Client API functions.
224 *
225 */
229 public:
231 : m_recovery_channel("group_replication_recovery") {}
233
234 /**
235 * @brief Implementation of @see
236 * Gcs_mysql_network_provider_native_interface#mysql_real_connect
237 */
238 MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user,
239 const char *passwd, const char *db,
240 unsigned int port, const char *unix_socket,
241 unsigned long clientflag) override;
242 /**
243 * @brief Implementation of @see
244 * Gcs_mysql_network_provider_native_interface#send_command
245 */
246 bool send_command(MYSQL *mysql, enum enum_server_command command,
247 const unsigned char *arg, size_t length,
248 bool skip_check) override;
249
250 /**
251 * @brief Implementation of @see
252 * Gcs_mysql_network_provider_native_interface#mysql_errno
253 */
254 unsigned int mysql_errno(MYSQL *mysql) override;
255
256 /**
257 * @brief Implementation of @see
258 * Gcs_mysql_network_provider_native_interface#mysql_init
259 */
260 MYSQL *mysql_init(MYSQL *sock) override;
261
262 /**
263 * @brief Implementation of @see
264 * Gcs_mysql_network_provider_native_interface#mysql_close
265 */
266 void mysql_close(MYSQL *sock) override;
267
268 /**
269 * @brief Implementation of @see
270 * Gcs_mysql_network_provider_native_interface#channel_get_network_namespace
271 */
272 int channel_get_network_namespace(std::string &net_ns) override;
273
274 /**
275 * @brief Implementation of @see
276 * Gcs_mysql_network_provider_native_interface#set_network_namespace
277 */
278 bool set_network_namespace(const std::string &network_namespace) override;
279
280 /**
281 * @brief Implementation of @see
282 * Gcs_mysql_network_provider_native_interface#restore_original_network_namespace
283 */
285
286 /**
287 * @brief Implementation of @see
288 * Gcs_mysql_network_provider_native_interface#my_free
289 */
290 void mysql_free(void *ptr) override;
291
292 /**
293 * @brief Implementation of @see
294 * Gcs_mysql_network_provider_native_interface#mysql_options
295 */
296 int mysql_options(MYSQL *mysql, enum mysql_option option,
297 const void *arg) override;
298
299 /**
300 * @brief Implementation of @see
301 * Gcs_mysql_network_provider_native_interface#mysql_ssl_set
302 */
303 bool mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert,
304 const char *ca, const char *capath,
305 const char *cipher) override;
306
307 private:
309};
310
311/**
312 * @brief Implementation of a \see Network_provider that will manage MySQL
313 * protocol connection for GCS/XCOM.
314 */
316 private:
317 /**
318 * @brief A map that holds all open MySQL client connections.
319 *
320 * Since the public interface of Network Managers only knows about File
321 * Descriptors, this is the repository for all MySQL client connections. This
322 * object is required when using mysql_close.
323 *
324 * The map's index is the open connection's file descriptor.
325 */
326 std::map<int, MYSQL *> m_connection_map;
327
328 /**
329 * @brief A map that holds THDs for incoming MySQL Server connections.
330 *
331 * The map tracks the server threads associated with incoming connections so
332 * that close_connection() and stop() can terminate them. Multiple accepted
333 * connections may remain active concurrently.
334 *
335 * This map is not a pending connection queue. Network_connection objects are
336 * handed to XCom separately through Network_provider::set_new_connection(),
337 * which provides a single pending handoff slot. An entry added for a handoff
338 * that returns BUSY is removed before returning to the caller.
339 *
340 * The map's index is the open connection's file descriptor.
341 */
342 std::map<int, THD *> m_incoming_connection_map;
343
344 // Locking for the connection map
346
347 // Configuration parameters for this Provider
349
350 /**
351 * External IoC dependencies.
352 * - A provider for authentication parameters
353 * - A provider for all mysql native methods
354 */
357
358 public:
359 /**
360 * @brief Construct a new Gcs_mysql_network_provider
361 *
362 * @param auth_provider A provider interface implementation for authentication
363 * parameters.
364 *
365 * @param native_interface A provider interface for all mysql native methods.
366 */
377
378 m_auth_provider = auth_provider;
379 m_native_interface = native_interface;
382 }
383
384 virtual ~Gcs_mysql_network_provider() override {
385 /*Close all client connections*/
386 if (!m_connection_map.empty()) {
388 [this](const auto &client_connection) {
389 m_native_interface->mysql_close(client_connection.second);
390 m_native_interface->mysql_free(client_connection.second);
391 });
392 m_connection_map.clear();
393 }
395 }
396
397 /**
398 * @brief See @see Network_provider#start
399 */
400 std::pair<bool, int> start() override;
401
402 /**
403 * @brief See @see Network_provider#stop
404 */
405 std::pair<bool, int> stop() override;
406
407 /**
408 * @brief Get the communication stack implemented by this class
409 *
410 * @return a CommunicationStack enum value. In this case -> MYSQL_PROTOCOL
411 */
413 return MYSQL_PROTOCOL;
414 }
415
416 /**
417 * @brief See @see Network_provider#configure
418 */
419 bool configure(const Network_configuration_parameters &params) override;
420
421 /**
422 * @brief See @see Network_provider#configure_secure_connections
423 */
425 const Network_configuration_parameters &params) override;
426
428
430
431 /**
432 * @brief See @see Network_provider#open_connection
433 */
434 std::unique_ptr<Network_connection> open_connection(
435 const std::string &address, const unsigned short port,
436 const Network_security_credentials &security_credentials,
437 int connection_timeout = Network_provider::default_connection_timeout(),
440
441 int close_connection(const Network_connection &connection) override;
442
443 /**
444 * @brief Register and publish an incoming MySQL Server connection
445 *
446 * Registers the connection's THD for later close and stop handling, then
447 * attempts to publish the connection through Network_provider's single
448 * handoff slot. If the slot is occupied, the registration is rolled back and
449 * ownership remains with the caller.
450 *
451 * @param thd the THD to which the connection belongs to.
452 * @param connection the connection data itself.
453 *
454 * @retval Gr_incoming_connection_status::ACCEPTED the connection was
455 * accepted
456 * @retval Gr_incoming_connection_status::BUSY the handoff slot was occupied
457 * @retval Gr_incoming_connection_status::ERROR the connection could not be
458 * registered
459 */
461 THD *thd, Network_connection *connection);
462};
463
464/**
465 * @brief Utilitarian class for Gcs_mysql_network_provider
466 *
467 */
469 public:
470 // Out of range log value
471 static constexpr int OUT_OF_RANGE_LOG_LEVEL = 255;
472
473 /**
474 * @brief Check whether a MySQL client error represents transient contention
475 * on the incoming connection handoff slot.
476 *
477 * @param error_number MySQL client error number
478 *
479 * @return true if the connection can be retried without logging a protocol
480 * error
481 */
482 static bool is_retryable_connection_handoff_error(unsigned int error_number);
483
484 private:
485 /**
486 * @brief Maps between Network Provider generic log level and MySQL error
487 * Log level
488 *
489 * @param net_provider_log_level Network Provider generic log level
490 * @return int MySQL error Log level if there is mapping
491 * OUT_OF_RANGE_LOG_LEVEL, otherwise
492 */
494 network_provider_dynamic_log_level net_provider_log_level) {
495 switch (net_provider_log_level) {
497 return SYSTEM_LEVEL;
498
500 return ERROR_LEVEL;
501
503 return WARNING_LEVEL;
504
506 return INFORMATION_LEVEL;
507
508 default:
509 // If there is no mapping present, we will return an out of range
510 // value in order to feed LogPluginErr.
511 // When provided a non-valid but non-negative number to LogPluginErr
512 // it means that such levels will result in suppression of the
513 // messages being logged
515 }
516 }
517
518 public:
519 /**
520 * @brief Converts from the intended developer fixed level to a dynamic
521 * level provided from the API call, based on runtime conditions.
522 *
523 * A developer might code that wants ERROR level to be written to the
524 * log, but a runtime condition might modify it.
525 *
526 * If log_level is PROVIDED, nothing changes and coded_log_level is
527 * used. If log_level is other than PROVIDED, we will do a mapping
528 * between log_level and MySQL log level.
529 *
530 * For more information about this mechanism @see
531 * network_provider_dynamic_log_level
532 *
533 * @param coded_log_level Developer intended log level
534 * @param log_level External API call log level
535 * @return int the actual runtime log level
536 */
538 int coded_log_level, network_provider_dynamic_log_level log_level) {
540 ? coded_log_level
543 }
544};
545
546#endif /* GCS_MYSQL_NETWORK_PROVIDER_INCLUDED */
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:247
Implementation of Gcs_mysql_network_provider_auth_interface that retrieves auth data from MySQL.
Definition: gcs_mysql_network_provider.h:71
Gcs_mysql_network_provider_auth_interface_impl()
Definition: gcs_mysql_network_provider.h:73
Replication_thread_api m_recovery_channel
Definition: gcs_mysql_network_provider.h:85
virtual ~Gcs_mysql_network_provider_auth_interface_impl() override
Definition: gcs_mysql_network_provider.h:75
bool get_credentials(std::string &username, std::string &password) override
Get the user credentials needed to establish MySQL connections.
Definition: gcs_mysql_network_provider.cc:42
IoC interface to allow abstraction of the retrieval of Security Credentials.
Definition: gcs_mysql_network_provider.h:45
virtual bool get_credentials(std::string &username, std::string &password)=0
Get the user credentials needed to establish MySQL connections.
virtual ~Gcs_mysql_network_provider_auth_interface()
Definition: gcs_mysql_network_provider.h:47
Internal implementation of Gcs_mysql_network_provider_native_interface_impl that serves as a proxy fo...
Definition: gcs_mysql_network_provider.h:228
MYSQL * mysql_init(MYSQL *sock) override
Implementation of.
Definition: gcs_mysql_network_provider.cc:66
bool restore_original_network_namespace() override
Implementation of.
Definition: gcs_mysql_network_provider.cc:128
int channel_get_network_namespace(std::string &net_ns) override
Implementation of.
Definition: gcs_mysql_network_provider.cc:100
bool set_network_namespace(const std::string &network_namespace) override
Implementation of.
Definition: gcs_mysql_network_provider.cc:113
unsigned int mysql_errno(MYSQL *mysql) override
Implementation of.
Definition: gcs_mysql_network_provider.cc:61
void mysql_free(void *ptr) override
Implementation of.
Definition: gcs_mysql_network_provider.cc:80
virtual ~Gcs_mysql_network_provider_native_interface_impl() override
Definition: gcs_mysql_network_provider.h:232
Gcs_mysql_network_provider_native_interface_impl()
Definition: gcs_mysql_network_provider.h:230
int mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg) override
Implementation of.
Definition: gcs_mysql_network_provider.cc:84
bool mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert, const char *ca, const char *capath, const char *cipher) override
Implementation of.
Definition: gcs_mysql_network_provider.cc:89
Replication_thread_api m_recovery_channel
Definition: gcs_mysql_network_provider.h:308
MYSQL * mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag) override
Implementation of.
Definition: gcs_mysql_network_provider.cc:47
bool send_command(MYSQL *mysql, enum enum_server_command command, const unsigned char *arg, size_t length, bool skip_check) override
Implementation of.
Definition: gcs_mysql_network_provider.cc:55
void mysql_close(MYSQL *sock) override
Implementation of.
Definition: gcs_mysql_network_provider.cc:71
IoC interface to allow abstraction of MySQL Client API.
Definition: gcs_mysql_network_provider.h:92
virtual unsigned int mysql_errno(MYSQL *mysql)=0
Proxy method to mysql_errno from the MySQL client API.
virtual MYSQL * mysql_init(MYSQL *sock)=0
Proxy method to mysql_init from the MySQL Client API.
virtual int channel_get_network_namespace(std::string &net_ns)=0
Method to get the network namespace configured for a channel.
virtual bool send_command(MYSQL *mysql, enum enum_server_command command, const unsigned char *arg, size_t length, bool skip_check)=0
Proxy method to simple_command from the MySQL client API.
virtual void mysql_close(MYSQL *sock)=0
Proxy method to mysql_close from the MySQL Client API.
virtual int mysql_options(MYSQL *mysql, enum mysql_option option, const void *arg)=0
Proxy method to mysql_options from the MySQL Memory API.
virtual bool restore_original_network_namespace()=0
Restore original network namespace used to be active before a new network namespace has been set.
virtual void mysql_free(void *ptr)=0
Proxy method to mysql_free from the MySQL Memory API.
virtual bool set_network_namespace(const std::string &network_namespace)=0
Set active network namespace specified by a name.
virtual MYSQL * mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag)=0
Proxy method to mysql_real_connect from the MySQL client API.
virtual ~Gcs_mysql_network_provider_native_interface()
Definition: gcs_mysql_network_provider.h:94
virtual bool mysql_ssl_set(MYSQL *mysql, const char *key, const char *cert, const char *ca, const char *capath, const char *cipher)=0
Proxy method to mysql_ssl_set from the MySQL Memory API.
Utilitarian class for Gcs_mysql_network_provider.
Definition: gcs_mysql_network_provider.h:468
static constexpr int OUT_OF_RANGE_LOG_LEVEL
Definition: gcs_mysql_network_provider.h:471
static bool is_retryable_connection_handoff_error(unsigned int error_number)
Check whether a MySQL client error represents transient contention on the incoming connection handoff...
Definition: gcs_mysql_network_provider.cc:416
static int log_level_adaptation(int coded_log_level, network_provider_dynamic_log_level log_level)
Converts from the intended developer fixed level to a dynamic level provided from the API call,...
Definition: gcs_mysql_network_provider.h:537
static int from_network_provider_dynamic_log_level_mapping(network_provider_dynamic_log_level net_provider_log_level)
Maps between Network Provider generic log level and MySQL error Log level.
Definition: gcs_mysql_network_provider.h:493
Implementation of a.
Definition: gcs_mysql_network_provider.h:315
std::map< int, THD * > m_incoming_connection_map
A map that holds THDs for incoming MySQL Server connections.
Definition: gcs_mysql_network_provider.h:342
Network_configuration_parameters m_config_parameters
Definition: gcs_mysql_network_provider.h:348
enum_transport_protocol get_communication_stack() const override
Get the communication stack implemented by this class.
Definition: gcs_mysql_network_provider.h:412
mysql_mutex_t m_GR_LOCK_connection_map_mutex
Definition: gcs_mysql_network_provider.h:345
int close_connection(const Network_connection &connection) override
Closes an open connection to another XCom endpoint served by the same Network provider.
Definition: gcs_mysql_network_provider.cc:366
Gcs_mysql_network_provider_auth_interface * m_auth_provider
External IoC dependencies.
Definition: gcs_mysql_network_provider.h:355
std::pair< bool, int > stop() override
See.
Definition: gcs_mysql_network_provider.cc:142
bool configure_secure_connections(const Network_configuration_parameters &params) override
See.
Definition: gcs_mysql_network_provider.cc:170
std::pair< bool, int > start() override
See.
Definition: gcs_mysql_network_provider.cc:136
bool finalize_secure_connections_context() override
Definition: gcs_mysql_network_provider.cc:199
bool configure(const Network_configuration_parameters &params) override
See.
Definition: gcs_mysql_network_provider.cc:165
std::unique_ptr< Network_connection > open_connection(const std::string &address, const unsigned short port, const Network_security_credentials &security_credentials, int connection_timeout=Network_provider::default_connection_timeout(), network_provider_dynamic_log_level log_level=network_provider_dynamic_log_level::PROVIDED) override
See.
Definition: gcs_mysql_network_provider.cc:203
Gr_incoming_connection_status set_new_connection(THD *thd, Network_connection *connection)
Register and publish an incoming MySQL Server connection.
Definition: gcs_mysql_network_provider.cc:399
virtual ~Gcs_mysql_network_provider() override
Definition: gcs_mysql_network_provider.h:384
void cleanup_secure_connections_context() override
Definition: gcs_mysql_network_provider.cc:193
Gcs_mysql_network_provider_native_interface * m_native_interface
Definition: gcs_mysql_network_provider.h:356
std::map< int, MYSQL * > m_connection_map
A map that holds all open MySQL client connections.
Definition: gcs_mysql_network_provider.h:326
Gcs_mysql_network_provider(Gcs_mysql_network_provider_auth_interface *auth_provider, Gcs_mysql_network_provider_native_interface *native_interface)
Construct a new Gcs_mysql_network_provider.
Definition: gcs_mysql_network_provider.h:367
Class that provides Network Namespace services.
Definition: network_provider.h:251
Base class for External Network Providers.
Definition: network_provider.h:306
static constexpr int default_connection_timeout()
Definition: network_provider.h:465
Definition: replication_threads_api.h:37
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
#define mysql_mutex_destroy(M)
Definition: mysql_mutex.h:46
#define mysql_mutex_init(K, M, A)
Definition: mysql_mutex.h:41
enum_server_command
A list of all MySQL protocol commands.
Definition: my_command.h:48
@ WARNING_LEVEL
Definition: my_loglevel.h:44
@ ERROR_LEVEL
Definition: my_loglevel.h:43
@ INFORMATION_LEVEL
Definition: my_loglevel.h:45
@ SYSTEM_LEVEL
Definition: my_loglevel.h:42
This file defines the client API to MySQL and also the ABI of the dynamically linked libmysqlclient.
mysql_option
Definition: mysql.h:170
static char * password
Definition: mysql_secure_installation.cc:58
char * user
Definition: mysqladmin.cc:67
const char * host
Definition: mysqladmin.cc:66
static MYSQL * sock
Definition: mysqlcheck.cc:57
void for_each(const Shards< COUNT > &shards, Function &&f) noexcept
Iterate over the shards.
Definition: ut0counter.h:323
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
static loglevel log_level(const Sql_condition *condition)
Definition: histogram.cc:1750
Definition: system_info_linux.cc:46
enum_transport_protocol
Enum that describes the available XCom Communication Stacks.
Definition: network_provider.h:45
@ MYSQL_PROTOCOL
Definition: network_provider.h:48
@ SSL_DISABLED
Definition: network_provider.h:57
network_provider_dynamic_log_level
Dynamic log level enum values.
Definition: network_provider.h:103
PSI_mutex_key key_GR_LOCK_connection_map
Definition: plugin_psi.h:133
required string key
Definition: replication_asynchronous_connection_failover.proto:60
required string network_namespace
Definition: replication_asynchronous_connection_failover.proto:34
required uint64 port
Definition: replication_asynchronous_connection_failover.proto:33
Gr_incoming_connection_status
Result of handing an incoming MySQL protocol connection to Group Replication.
Definition: rpl_group_replication.h:94
Definition: mysql.h:303
Possible configuration parameters.
Definition: network_provider.h:191
struct ssl_parameters ssl_params
Definition: network_provider.h:194
Represents an open connection.
Definition: network_provider.h:201
Security credentials to establish a connection.
Definition: network_provider.h:134
An instrumented mutex structure.
Definition: mysql_mutex_bits.h:50
int ssl_mode
Definition: network_provider.h:172
#define MY_MUTEX_INIT_FAST
Definition: thr_mutex.h:67