25#ifndef ROUTING_MYSQLROUTING_INCLUDED
26#define ROUTING_MYSQLROUTING_INCLUDED
50#include <netinet/in.h>
51#include <netinet/tcp.h>
52#include <sys/socket.h>
69#include "mysql/harness/plugin.h"
147 const std::string &bind_address = {
"0.0.0.0"},
149 const std::string &route_name = {},
151 std::chrono::milliseconds destination_connect_timeout =
186 void set_destinations_from_csv(
const std::string &csv);
195 return context_.get_destination_connect_timeout();
206 void validate_destination_connect_timeout(std::chrono::milliseconds
timeout);
218 int set_max_connections(
int maximum);
233 template <
class ClientProtocol>
234 void create_connection(
236 const typename ClientProtocol::endpoint &client_endpoint);
250 void disconnect_all();
275 std::string get_port_str()
const;
299 static void set_unix_socket_permissions(
const char *socket_file);
321 bool is_destination_standalone_{
false};
354 std::atomic<bool> is_running_{
true};
361 FRIEND_TEST(RoutingTests, bug_24841281);
363 FRIEND_TEST(ClassicProtocolRoutingTest, NoValidDestinations);
364 FRIEND_TEST(TestSetupTcpService, single_addr_ok);
365 FRIEND_TEST(TestSetupTcpService, getaddrinfo_fails);
366 FRIEND_TEST(TestSetupTcpService, socket_fails_for_all_addr);
367 FRIEND_TEST(TestSetupTcpService, socket_fails);
368 FRIEND_TEST(TestSetupTcpService, bind_fails);
369 FRIEND_TEST(TestSetupTcpService, listen_fails);
371 FRIEND_TEST(TestSetupTcpService, setsockopt_fails);
372 FRIEND_TEST(TestSetupNamedSocketService, unix_socket_permissions_failure);
Type
supported protocols
Definition: base_protocol.h:31
container for connections to MySQL Server.
Definition: connection_container.h:166
TlsClientContext per destination.
Definition: destination_ssl_context.h:40
Facade to avoid a tight coupling between Routing component and actual routing endpoint implementation...
Definition: mysql_routing_base.h:40
virtual routing::AccessMode get_mode() const =0
virtual std::vector< mysql_harness::TCPAddress > get_destinations() const =0
virtual void stop_socket_acceptors()=0
virtual routing::RoutingStrategy get_routing_strategy() const =0
virtual bool is_accepting_connections() const =0
virtual stdx::expected< void, std::error_code > start_accepting_connections()=0
virtual std::vector< MySQLRoutingAPI::ConnData > get_connections()=0
MySQLRoutingContext holds data used by MySQLRouting (1 per plugin instances) and MySQLRoutingConnecti...
Definition: context.h:57
Manage Connections from clients to MySQL servers.
Definition: mysql_routing.h:120
std::chrono::milliseconds get_destination_connect_timeout() const noexcept
Returns timeout when connecting to destination.
Definition: mysql_routing.h:194
std::unique_ptr< RouteDestination > destination_
Destination object to use when getting next connection.
Definition: mysql_routing.h:319
local::stream_protocol::acceptor service_named_socket_
Socket descriptor of the named socket service.
Definition: mysql_routing.h:343
net::ip::tcp::acceptor service_tcp_
Socket descriptor of the TCP service.
Definition: mysql_routing.h:338
MySQLRoutingContext & get_context() override
Definition: mysql_routing.h:305
ConnectionContainer connection_container_
container for connections
Definition: mysql_routing.h:351
routing::AccessMode access_mode_
Access mode of the servers in the routing.
Definition: mysql_routing.h:327
AllowedNodesChangeCallbacksListIterator allowed_nodes_list_iterator_
used to unregister from subscription on allowed nodes changes
Definition: mysql_routing.h:348
MySQLRoutingContext context_
wrapper for data used by all connections
Definition: mysql_routing.h:314
net::io_context & io_ctx_
Definition: mysql_routing.h:316
RouteDestination * destinations()
Definition: mysql_routing.h:246
int max_connections_
Maximum active connections.
Definition: mysql_routing.h:335
local::stream_protocol::endpoint service_named_endpoint_
Definition: mysql_routing.h:344
net::ip::tcp::acceptor & tcp_socket()
Definition: mysql_routing.h:248
bool is_running() const override
Definition: mysql_routing.h:307
int get_max_connections() const noexcept override
Returns maximum active connections.
Definition: mysql_routing.h:224
net::ip::tcp::endpoint service_tcp_endpoint_
Definition: mysql_routing.h:339
routing::RoutingStrategy routing_strategy_
Routing strategy to use when getting next destination.
Definition: mysql_routing.h:324
Manage destinations for a Connection Routing.
Definition: destination.h:196
virtual mysql_harness::TCPAddress get(const std::string &address, uint16_t port)
Gets destination based on address and port.
Definition: destination.cc:129
TLS Context for the server side.
Definition: tls_server_context.h:45
Monitor can be waited for.
Definition: monitor.h:61
Class representing a path in a file system.
Definition: filesystem.h:61
PluginFuncEnv object.
Definition: loader.h:674
Parse and create URIs according to RFC3986.
Definition: uri.h:69
Definition: socket.h:1408
Definition: io_context.h:59
Definition: internet.h:677
Definition: expected.h:936
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:168
static std::unique_ptr< net::io_context > io_ctx
Definition: io_plugin.cc:104
mysql_harness::Plugin ROUTING_PLUGIN_EXPORT harness_plugin_routing
Definition: routing_plugin.cc:460
std::string get_routing_thread_name(const std::string &config_name, const std::string &prefix)
return a short string suitable to be used as a thread name
Definition: mysql_routing_common.cc:29
ulong max_connections
Definition: mysqld.cc:1352
ulong connect_timeout
Definition: mysqld.cc:1311
ulong max_connect_errors
Definition: mysqld.cc:1352
static bool timeout(bool(*wait_condition)())
Timeout function.
Definition: log0meb.cc:493
stdx::expected< native_handle_type, error_type > socket(int family, int sock_type, int protocol)
Definition: socket.h:56
constexpr const unsigned long long kDefaultMaxConnectErrors
Maximum connect or handshake errors per host.
Definition: routing.h:66
AccessMode
Modes supported by Routing plugin.
Definition: routing.h:97
RoutingStrategy
Routing strategies supported by Routing plugin.
Definition: routing.h:104
constexpr const std::chrono::seconds kDefaultClientConnectTimeout
Timeout waiting for handshake response from client.
Definition: routing.h:87
constexpr const std::chrono::seconds kDefaultDestinationConnectionTimeout
Timeout connecting to destination (in seconds).
Definition: routing.h:57
constexpr const unsigned int kDefaultNetBufferLength
Default net buffer length.
Definition: routing.h:79
constexpr const int kDefaultMaxConnections
Max number of active routes for this routing instance.
Definition: routing.h:50
required uint64 port
Definition: replication_asynchronous_connection_failover.proto:32
#define ROUTING_EXPORT
Definition: routing_export.h:15
#define ROUTING_PLUGIN_EXPORT
Definition: routing_plugin_export.h:15
AllowedNodesChangeCallbacksList::iterator AllowedNodesChangeCallbacksListIterator
Definition: destination.h:72
SslMode
Definition: ssl_mode.h:28
Definition: mysql_routing.h:87