MySQL 8.0.37
Source Code Documentation
context.h
Go to the documentation of this file.
1/*
2 Copyright (c) 2018, 2024, Oracle and/or its affiliates.
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License, version 2.0,
6 as published by the Free Software Foundation.
7
8 This program is designed to work with certain software (including
9 but not limited to OpenSSL) that is licensed under separate terms,
10 as designated in a particular file or component or in included license
11 documentation. The authors of MySQL hereby grant you an additional
12 permission to link the program and your derivative works with the
13 separately licensed software that they have either included with
14 the program or referenced in the documentation.
15
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
20
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, write to the Free Software
23 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
24*/
25
26#ifndef ROUTING_CONTEXT_INCLUDED
27#define ROUTING_CONTEXT_INCLUDED
28
29#include <array>
30#include <atomic>
31#include <chrono>
32#include <map>
33#include <memory>
34#include <mutex>
35#include <string>
36#include <vector>
37
38#include "blocked_endpoints.h"
40#include "mysql/harness/filesystem.h" // Path
43#include "mysql_router_thread.h"
46#include "mysqlrouter/routing.h"
48#include "routing_config.h"
50#include "ssl_mode.h"
51#include "tcp_address.h"
52
53/**
54 * @brief MySQLRoutingContext holds data used by MySQLRouting (1 per plugin
55 * instances) and MySQLRoutingConnection instances (many instances). It is
56 * created and owned by MySQLRouting while MySQLRoutingConnection objects hold
57 * reference to it.
58 */
60 public:
61 MySQLRoutingContext(const RoutingConfig &routing_config, std::string name,
62 TlsServerContext *client_ssl_ctx,
63 DestinationTlsContext *dest_tls_context)
64 : routing_config_(routing_config),
65 name_(std::move(name)),
66 client_ssl_ctx_{client_ssl_ctx},
67 destination_tls_context_{dest_tls_context},
68 blocked_endpoints_{routing_config.max_connect_errors} {}
69
72 return blocked_endpoints_;
73 }
74
78
81 uint64_t get_max_connect_errors() const {
83 }
84
86
87 const std::string &get_name() const { return name_; }
88
89 /**
90 * identifier part of the name.
91 *
92 * name has the form 'routing:{id}'
93 */
94 std::string get_id() const {
95 auto pos = name_.find(':');
96
97 if (pos == name_.npos) return {};
98
99 return name_.substr(pos + 1);
100 }
101
102 unsigned int get_net_buffer_length() const {
104 }
105
106 std::chrono::milliseconds get_destination_connect_timeout() const {
107 return std::chrono::milliseconds{routing_config_.connect_timeout * 1000};
108 }
109
110 std::chrono::milliseconds get_client_connect_timeout() const {
111 return std::chrono::milliseconds{routing_config_.client_connect_timeout *
112 1000};
113 }
114
117 }
118
121 }
122
123 SslMode source_ssl_mode() const noexcept {
125 }
126 SslMode dest_ssl_mode() const noexcept {
128 }
129
130 /**
131 * get the SSL context for the client side of the route.
132 */
134
135 /**
136 * get the SSL context for the server side of the route.
137 *
138 * @param dest_id unique id of the destination
139 * @param hostname name of the destination host
140 *
141 * @returns a TlsClientContext for the destination.
142 * @retval nullptr if creating tls-context failed.
143 */
144 TlsClientContext *dest_ssl_ctx(const std::string &dest_id,
145 const std::string &hostname) {
146 if (destination_tls_context_ == nullptr) return nullptr;
147
148 return destination_tls_context_->get(dest_id, hostname);
149 }
150
153 }
154
157 }
158
160
161 std::chrono::milliseconds connection_sharing_delay() const {
163 }
164
165 private:
167
168 /** @brief Descriptive name of the connection routing */
169 const std::string name_;
170
171 mutable std::mutex mutex_conn_errors_;
172
173 /** @brief memory in kilobytes allocated for thread's stack */
175
177
179
180 /**
181 * Callbacks for communicating with quarantined destination candidates
182 * instance.
183 */
185
187
188 public:
189 /** @brief Number of active routes */
190 std::atomic<uint16_t> info_active_routes_{0};
191 /** @brief Number of handled routes, not used at the moment */
192 std::atomic<uint64_t> info_handled_routes_{0};
193};
194#endif /* ROUTING_CONTEXT_INCLUDED */
Type
supported protocols
Definition: base_protocol.h:32
Definition: blocked_endpoints.h:34
uint64_t max_connect_errors() const
Definition: blocked_endpoints.h:39
TlsClientContext per destination.
Definition: destination_ssl_context.h:41
TlsClientContext * get(const std::string &dest_id, const std::string &hostname)
get a TlsClientContent for a destination.
Definition: destination_ssl_context.cc:72
MySQLRoutingContext holds data used by MySQLRouting (1 per plugin instances) and MySQLRoutingConnecti...
Definition: context.h:59
const std::string & get_name() const
Definition: context.h:87
const SharedQuarantineHandler & shared_quarantine() const
Definition: context.h:155
std::string get_id() const
identifier part of the name.
Definition: context.h:94
std::chrono::milliseconds get_client_connect_timeout() const
Definition: context.h:110
std::atomic< uint64_t > info_handled_routes_
Number of handled routes, not used at the moment.
Definition: context.h:192
const mysql_harness::Path & get_bind_named_socket() const
Definition: context.h:119
const BlockedEndpoints & blocked_endpoints() const
Definition: context.h:71
TlsClientContext * dest_ssl_ctx(const std::string &dest_id, const std::string &hostname)
get the SSL context for the server side of the route.
Definition: context.h:144
size_t thread_stack_size_
memory in kilobytes allocated for thread's stack
Definition: context.h:174
uint64_t get_handled_routes()
Definition: context.h:80
void increase_info_handled_routes()
Definition: context.cc:47
SharedQuarantineHandler shared_quarantine_handler_
Callbacks for communicating with quarantined destination candidates instance.
Definition: context.h:184
SharedQuarantineHandler & shared_quarantine()
Definition: context.h:151
bool connection_sharing() const
Definition: context.h:159
unsigned int get_net_buffer_length() const
Definition: context.h:102
uint64_t get_max_connect_errors() const
Definition: context.h:81
std::atomic< uint16_t > info_active_routes_
Number of active routes.
Definition: context.h:190
BlockedEndpoints blocked_endpoints_
Definition: context.h:186
SslMode source_ssl_mode() const noexcept
Definition: context.h:123
std::chrono::milliseconds get_destination_connect_timeout() const
Definition: context.h:106
BlockedEndpoints & blocked_endpoints()
Definition: context.h:70
TlsServerContext * source_ssl_ctx() const
get the SSL context for the client side of the route.
Definition: context.h:133
const mysql_harness::TCPAddress & get_bind_address() const
Definition: context.h:115
DestinationTlsContext * destination_tls_context_
Definition: context.h:178
std::mutex mutex_conn_errors_
Definition: context.h:171
const RoutingConfig routing_config_
Definition: context.h:166
void increase_info_active_routes()
Definition: context.cc:39
BaseProtocol::Type get_protocol()
Definition: context.h:85
TlsServerContext * client_ssl_ctx_
Definition: context.h:176
MySQLRoutingContext(const RoutingConfig &routing_config, std::string name, TlsServerContext *client_ssl_ctx, DestinationTlsContext *dest_tls_context)
Definition: context.h:61
SslMode dest_ssl_mode() const noexcept
Definition: context.h:126
std::chrono::milliseconds connection_sharing_delay() const
Definition: context.h:161
uint16_t get_active_routes()
Definition: context.h:79
void decrease_info_active_routes()
Definition: context.cc:43
const std::string name_
Descriptive name of the connection routing.
Definition: context.h:169
route specific configuration.
Definition: routing_config.h:40
mysql_harness::Path named_socket
unix domain socket path to bind to
Definition: routing_config.h:46
SslMode dest_ssl_mode
SslMode of the server side connection.
Definition: routing_config.h:66
unsigned int client_connect_timeout
client connect timeout in seconds
Definition: routing_config.h:55
SslMode source_ssl_mode
SslMode of the client side connection.
Definition: routing_config.h:59
int connect_timeout
connect-timeout in seconds
Definition: routing_config.h:47
Protocol::Type protocol
protocol (classic, x)
Definition: routing_config.h:42
unsigned int net_buffer_length
Size of buffer to receive packets.
Definition: routing_config.h:56
bool connection_sharing
if connection sharing is allowed.
Definition: routing_config.h:78
mysql_harness::TCPAddress bind_address
IP address to bind to.
Definition: routing_config.h:45
std::chrono::milliseconds connection_sharing_delay
delay before an idling connection is moved to the pool and connection sharing is allowed.
Definition: routing_config.h:80
Definition: shared_quarantine_handler.h:36
Client TLS Context.
Definition: tls_client_context.h:39
TLS Context for the server side.
Definition: tls_server_context.h:46
Class representing a path in a file system.
Definition: filesystem.h:63
Defines an IP address with port number
Definition: tcp_address.h:40
ulong max_connect_errors
Definition: mysqld.cc:1370
static const size_t kDefaultStackSizeInKiloBytes
Definition: mysql_router_thread.h:44
Definition: gcs_xcom_synode.h:64
SslMode
Definition: ssl_mode.h:29
case opt name
Definition: sslopt-case.h:33