26#ifndef ROUTING_MYSQLROUTING_INCLUDED 
   27#define ROUTING_MYSQLROUTING_INCLUDED 
   48#include <netinet/in.h> 
   49#include <netinet/tcp.h> 
   50#include <sys/socket.h> 
   67#include "mysql/harness/plugin.h" 
   91                    const std::string &parent_routing_name)
 
   92      : io_ctx_(io_ctx), parent_routing_name_(parent_routing_name) {}
 
  103  virtual std::string 
name() = 0;
 
  116                             const std::string &parent_routing_name,
 
  117                             const std::string &address, uint16_t 
port);
 
  121  bool is_open() 
const override;
 
  126  std::string 
name() 
override;
 
  140                              const std::string &parent_routing_name,
 
  141                              const std::string &socket_name);
 
  145  bool is_open() 
const override;
 
  150  std::string 
name() 
override;
 
  180      std::shared_ptr<routing_guidelines::Routing_guidelines_engine> guidelines,
 
  181      const std::string &route_name = {},
 
  195  void set_destinations(
const std::string &dests);
 
  202  void set_destinations_from_dests(
 
  203      const std::vector<mysql_harness::Destination> &dests);
 
  212    return context_.get_destination_connect_timeout();
 
  235  int set_max_connections(
int maximum);
 
  250  template <
class ClientProtocol>
 
  251  void create_connection(
 
  253      const typename ClientProtocol::endpoint &client_endpoint);
 
  257    return routing_strategy_;
 
  260  std::vector<mysql_harness::Destination> get_destination_candidates()
 
  263  std::vector<MySQLRoutingAPI::ConnData> get_connections() 
override;
 
  268    return destination_manager_.get();
 
  271  void disconnect_all();
 
  278  void stop_socket_acceptors(
const bool shutting_down) 
override;
 
  285  bool is_accepting_connections() 
const override;
 
  310  void on_routing_guidelines_update(
 
  312          &affected_routing_sources);
 
  321  update_routing_guidelines(
const std::string &routing_guidelines_document);
 
  328  void on_router_info_update(
 
  340  static void set_unix_socket_permissions(
const char *socket_file);
 
  373  bool accept_connections_{
true};
 
  384  std::unique_ptr<DestinationManager> destination_manager_{
nullptr};
 
  386  bool is_destination_standalone_{
false};
 
  409  std::atomic<bool> is_running_{
true};
 
  416  FRIEND_TEST(RoutingTests, bug_24841281);
 
  418  FRIEND_TEST(ClassicProtocolRoutingTest, NoValidDestinations);
 
  419  FRIEND_TEST(TestSetupTcpService, single_addr_ok);
 
  420  FRIEND_TEST(TestSetupTcpService, getaddrinfo_fails);
 
  421  FRIEND_TEST(TestSetupTcpService, socket_fails_for_all_addr);
 
  422  FRIEND_TEST(TestSetupTcpService, socket_fails);
 
  423  FRIEND_TEST(TestSetupTcpService, bind_fails);
 
  424  FRIEND_TEST(TestSetupTcpService, listen_fails);
 
  426  FRIEND_TEST(TestSetupTcpService, setsockopt_fails);
 
  427  FRIEND_TEST(TestSetupNamedSocketService, unix_socket_permissions_failure);
 
Definition: mysql_routing.h:113
 
std::string address_
Definition: mysql_routing.h:132
 
uint16_t port_
Definition: mysql_routing.h:133
 
net::ip::tcp::acceptor service_
Definition: mysql_routing.h:129
 
net::ip::tcp::endpoint service_endpoint_
Definition: mysql_routing.h:130
 
Definition: mysql_routing.h:137
 
local::stream_protocol::acceptor service_
Definition: mysql_routing.h:153
 
std::string socket_name_
Definition: mysql_routing.h:156
 
local::stream_protocol::endpoint service_endpoint_
Definition: mysql_routing.h:154
 
Definition: mysql_routing.h:88
 
virtual ~AcceptingEndpoint()
Definition: mysql_routing.h:105
 
virtual stdx::expected< void, std::error_code > setup()=0
 
virtual void start(MySQLRouting *r, std::list< IoThread > &, WaitableMonitor< Nothing > &waitable)=0
 
virtual std::string name()=0
 
std::string parent_routing_name_
Definition: mysql_routing.h:110
 
net::io_context & io_ctx_
Definition: mysql_routing.h:108
 
AcceptingEndpoint(const AcceptingEndpoint &)=delete
 
virtual bool is_open() const =0
 
AcceptingEndpoint(net::io_context &io_ctx, const std::string &parent_routing_name)
Definition: mysql_routing.h:90
 
virtual stdx::expected< void, std::error_code > cancel()=0
 
container for connections to MySQL Server.
Definition: connection_container.h:164
 
Manage destinations for a Connection Routing.
Definition: destination.h:84
 
TlsClientContext per destination.
Definition: destination_ssl_context.h:42
 
Facade to avoid a tight coupling between Routing component and actual routing endpoint implementation...
Definition: mysql_routing_base.h:41
 
Definition: connection.h:47
 
MySQLRoutingContext holds data used by MySQLRouting (1 per plugin instances) and MySQLRoutingConnecti...
Definition: context.h:54
 
Manage Connections from clients to MySQL servers.
Definition: mysql_routing.h:167
 
std::chrono::milliseconds get_destination_connect_timeout() const noexcept
Returns timeout when connecting to destination.
Definition: mysql_routing.h:211
 
bool is_standalone() const override
Definition: mysql_routing.h:331
 
MySQLRoutingContext & get_context() override
Definition: mysql_routing.h:349
 
std::optional< routing::RoutingStrategy > routing_strategy_
Routing strategy to use when getting next destination.
Definition: mysql_routing.h:389
 
ConnectionContainer connection_container_
container for connections
Definition: mysql_routing.h:406
 
routing::AccessMode access_mode_
access_mode of the servers in the routing
Definition: mysql_routing.h:392
 
std::optional< routing::RoutingStrategy > get_routing_strategy() const override
Definition: mysql_routing.h:255
 
AllowedNodesChangeCallbacksListIterator allowed_nodes_list_iterator_
used to unregister from subscription on allowed nodes changes
Definition: mysql_routing.h:403
 
DestinationManager * destination_manager() override
Definition: mysql_routing.h:267
 
std::vector< std::unique_ptr< AcceptingEndpoint > > accepting_endpoints_
Definition: mysql_routing.h:431
 
MySQLRoutingContext context_
wrapper for data used by all connections
Definition: mysql_routing.h:379
 
net::io_context & io_ctx_
Definition: mysql_routing.h:381
 
int max_connections_
Maximum active connections.
Definition: mysql_routing.h:400
 
bool is_running() const override
Definition: mysql_routing.h:351
 
int get_max_connections() const noexcept override
Returns maximum active connections.
Definition: mysql_routing.h:241
 
route specific configuration.
Definition: routing_config.h:40
 
TLS Context for the server side.
Definition: tls_server_context.h:51
 
Monitor can be waited for.
Definition: monitor.h:62
 
PluginFuncEnv object.
Definition: loader.h:675
 
Parse and create URIs according to RFC3986.
Definition: uri.h:66
 
Definition: socket.h:1292
 
Definition: io_context.h:61
 
Definition: internet.h:678
 
Definition: expected.h:286
 
AllowedNodesChangeCallbacksList::iterator AllowedNodesChangeCallbacksListIterator
Definition: destination_nodes_state_notifier.h:51
 
static int get_connection(MEM_ROOT *mem_root, FEDERATED_SHARE *share)
Definition: ha_federated.cc:608
 
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:180
 
static void run(mysql_harness::PluginFuncEnv *)
Definition: io_plugin.cc:199
 
mysql_harness::Plugin ROUTING_PLUGIN_EXPORT harness_plugin_routing
Definition: routing_plugin.cc:647
 
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:30
 
void setup()
Definition: components.cc:63
 
static bool timeout(bool(*wait_condition)())
Timeout function.
Definition: log0meb.cc:498
 
std::chrono::milliseconds milliseconds
Definition: authorize_manager.cc:67
 
ServerMode
Definition: datatypes.h:50
 
stdx::expected< native_handle_type, error_type > socket(int family, int sock_type, int protocol)
Definition: socket.h:63
 
AccessMode
Definition: routing.h:265
 
const mysql_service_registry_t * r
Definition: pfs_example_plugin_employee.cc:86
 
required uint64 port
Definition: replication_asynchronous_connection_failover.proto:33
 
#define ROUTING_EXPORT
Definition: routing_export.h:15
 
#define ROUTING_PLUGIN_EXPORT
Definition: routing_plugin_export.h:15
 
case opt name
Definition: sslopt-case.h:29
 
Definition: mysql_routing.h:85
 
Information about this Router instance.
Definition: routing_guidelines.h:59
 
Type for names of Routes changed during routing guidelines document update.
Definition: routing_guidelines.h:324