26#ifndef ROUTING_CONNECTION_INCLUDED 
   27#define ROUTING_CONNECTION_INCLUDED 
   72  virtual std::optional<mysql_harness::DestinationEndpoint>
 
   75  virtual std::optional<mysql_harness::DestinationEndpoint>
 
   80  virtual std::optional<mysql_harness::DestinationEndpoint>
 
  186    const auto now = clock_type::now();
 
  188      stats.last_sent_to_server = now;
 
  189      stats.bytes_down += bytes;
 
  194    const auto now = clock_type::now();
 
  196      stats.last_received_from_server = now;
 
  197      stats.bytes_up += bytes;
 
  213    return disconnect_([](
auto requested) { 
return requested; });
 
  341template <
class ConnectionType>
 
  370    if (
socket().is_local()) {
 
  371      return ret_type{std::in_place, std::make_unique<UnixDomainConnection>(
 
  372                                         std::move(
socket().as_local()),
 
  376    return ret_type{std::in_place, std::make_unique<TcpConnection>(
 
  377                                       std::move(
socket().as_tcp()),
 
Definition: connection.h:237
 
void set_routing_source(std::string name)
Definition: connection.h:267
 
std::function< bool(const mysql_harness::Destination &)> on_is_destination_good_
Definition: connection.h:338
 
void connect_timed_out(bool v)
Definition: connection.h:255
 
net::steady_timer & timer()
Definition: connection.h:253
 
stdx::expected< void, std::error_code > connect_init()
Definition: connection.cc:95
 
const routing_guidelines::Server_info & server_info() const
Definition: connection.h:271
 
std::unique_ptr< Destination > destination_
Definition: connection.h:321
 
routing_guidelines::Session_info session_info_
Definition: connection.h:318
 
std::optional< mysql_harness::Destination > destination_id_
Definition: connection.h:332
 
std::error_code last_ec_
Definition: connection.h:325
 
net::steady_timer connect_timer_
Definition: connection.h:329
 
stdx::expected< void, std::error_code > resolve()
Definition: connection.cc:58
 
Function
Definition: connection.h:245
 
stdx::expected< void, std::error_code > init_endpoint()
Definition: connection.cc:89
 
mysql_harness::DestinationEndpoint server_endpoint_
Definition: connection.h:316
 
stdx::expected< void, std::error_code > connected()
Definition: connection.cc:223
 
stdx::expected< void, std::error_code > connect_failed(std::error_code ec)
 
bool connect_timed_out_
Definition: connection.h:331
 
MySQLRoutingContext & context_
Definition: connection.h:311
 
void on_connect_failure(std::function< void(const mysql_harness::Destination &, std::error_code)> func)
Definition: connection.h:275
 
void destination_id(std::optional< mysql_harness::Destination > id)
Definition: connection.h:259
 
bool is_destination_good(const mysql_harness::Destination &dest) const
Definition: connection.h:291
 
DestinationManager * destination_manager_
Definition: connection.h:320
 
std::function< void(const mysql_harness::Destination &)> on_connect_success_
Definition: connection.h:336
 
mysql_harness::DestinationEndpoint & endpoint()
Definition: connection.h:251
 
bool connect_timed_out() const
Definition: connection.h:257
 
Function func_
Definition: connection.h:327
 
ConnectorBase(net::io_context &io_ctx, MySQLRoutingContext &context, DestinationManager *destination_manager)
Definition: connection.h:239
 
net::ip::tcp::resolver resolver_
Definition: connection.h:313
 
std::optional< mysql_harness::Destination > destination_id() const
Definition: connection.h:262
 
mysql_harness::DestinationSocket & socket()
Definition: connection.h:250
 
std::vector< mysql_harness::DestinationEndpoint > endpoints_
Definition: connection.h:322
 
stdx::expected< void, std::error_code > next_destination()
Definition: connection.cc:249
 
net::io_context & io_ctx_
Definition: connection.h:310
 
std::string routing_source() const
Definition: connection.h:266
 
stdx::expected< void, std::error_code > try_connect()
Definition: connection.cc:106
 
std::vector< mysql_harness::DestinationEndpoint >::iterator endpoints_it_
Definition: connection.h:323
 
std::function< void(const mysql_harness::Destination &, std::error_code)> on_connect_failure_
Definition: connection.h:335
 
stdx::expected< void, std::error_code > init_destination(routing_guidelines::Session_info session_info)
Definition: connection.cc:41
 
stdx::expected< void, std::error_code > connect_finish()
Definition: connection.cc:190
 
void on_connect_success(std::function< void(const mysql_harness::Destination &)> func)
Definition: connection.h:281
 
stdx::expected< void, std::error_code > next_endpoint()
Definition: connection.cc:232
 
void on_is_destination_good(std::function< bool(const mysql_harness::Destination &dest)> func)
Definition: connection.h:286
 
mysql_harness::DestinationSocket server_sock_
Definition: connection.h:314
 
Definition: connection.h:342
 
stdx::expected< ConnectionType, std::error_code > connect(routing_guidelines::Session_info session_info)
Definition: connection.h:346
 
Manage destinations for a Connection Routing.
Definition: destination.h:84
 
Monitor pattern.
Definition: monitor.h:39
 
Definition: connection.h:47
 
virtual std::optional< mysql_harness::Destination > read_write_destination_id() const
Definition: connection.h:67
 
void accepted()
Definition: connection.cc:284
 
MySQLRoutingConnectionBase(MySQLRoutingContext &context, std::function< void(MySQLRoutingConnectionBase *)> remove_callback)
Definition: connection.h:49
 
clock_type::time_point time_point_type
Definition: connection.h:133
 
virtual void connected()
Definition: connection.cc:291
 
virtual void set_routing_source(std::string name)=0
 
std::optional< double > routing_guidelines_session_rand_
Definition: connection.h:234
 
const MySQLRoutingContext & context() const
Definition: connection.h:57
 
time_point_type get_started() const
Definition: connection.h:135
 
Stats get_stats() const
Definition: connection.h:181
 
std::size_t get_bytes_down() const
Definition: connection.h:128
 
std::chrono::system_clock clock_type
Definition: connection.h:132
 
void transfered_to_server(size_t bytes)
Definition: connection.h:185
 
virtual std::optional< mysql_harness::DestinationEndpoint > read_write_destination_endpoint() const
Definition: connection.h:81
 
std::string get_client_address() const
Returns address of client which connected to router.
Definition: connection.h:116
 
std::size_t get_bytes_up() const
Definition: connection.h:124
 
Monitor< bool > disconnect_
Definition: connection.h:228
 
net::impl::socket::native_handle_type client_fd_
Definition: connection.h:233
 
virtual std::optional< mysql_harness::DestinationEndpoint > destination_endpoint() const =0
 
std::string get_server_address() const
Returns address of server to which connection is established.
Definition: connection.h:101
 
void disassociate()
Definition: connection.h:201
 
void log_connection_summary()
Definition: connection.cc:305
 
virtual std::string get_routing_source() const =0
 
Monitor< Stats > stats_
Definition: connection.h:226
 
virtual void disconnect()=0
 
time_point_type get_connected_to_server() const
Definition: connection.h:139
 
virtual std::optional< mysql_harness::Destination > read_only_destination_id() const
Definition: connection.h:62
 
routing_guidelines::Session_info get_session_info() const
Definition: connection.cc:320
 
std::function< void(MySQLRoutingConnectionBase *)> remove_callback_
callback that is called when thread of execution completes
Definition: connection.h:224
 
virtual ~MySQLRoutingConnectionBase()=default
 
MySQLRoutingContext & context()
Definition: connection.h:56
 
void client_address(const std::string &dest)
Definition: connection.h:120
 
void transfered_to_client(size_t bytes)
Definition: connection.h:193
 
virtual void wait_until_completed()=0
 
virtual void completed()=0
 
time_point_type get_last_received_from_server() const
Definition: connection.h:147
 
time_point_type get_last_sent_to_server() const
Definition: connection.h:143
 
void set_routing_guidelines_session_rand()
Definition: connection.cc:342
 
virtual std::optional< mysql_harness::DestinationEndpoint > read_only_destination_endpoint() const
Definition: connection.h:76
 
auto disconnect_request(F &&f)
Definition: connection.h:208
 
virtual std::optional< mysql_harness::Destination > get_destination_id() const =0
 
virtual net::impl::socket::native_handle_type get_client_fd() const =0
 
void server_address(const std::string &dest)
Definition: connection.h:105
 
virtual routing_guidelines::Server_info get_server_info() const =0
 
bool disconnect_requested() const
Definition: connection.h:212
 
MySQLRoutingContext & context_
wrapper for common data used by all routing threads
Definition: connection.h:222
 
MySQLRoutingContext holds data used by MySQLRouting (1 per plugin instances) and MySQLRoutingConnecti...
Definition: context.h:54
 
Definition: destination_endpoint.h:38
 
Definition: destination_socket.h:40
 
Definition: destination.h:95
 
Definition: socket.h:1090
 
Definition: io_context.h:61
 
Definition: internet.h:608
 
Definition: expected.h:286
 
#define F
Definition: jit_executor_value.cc:374
 
struct stats stats
Definition: mysqlslap.cc:241
 
bool has_value(const std::optional< ValueType > &v)
Definition: gtid.h:93
 
std::error_code make_error_code(DynamicLoaderErrc ec)
make error_code from a DynamicLoaderErrc.
Definition: dynamic_loader.cc:97
 
int native_handle_type
Definition: socket_constants.h:51
 
Definition: gcs_xcom_synode.h:64
 
unexpected(E) -> unexpected< E >
 
case opt name
Definition: sslopt-case.h:29
 
Definition: connection.h:152
 
time_point_type started
Definition: connection.h:175
 
time_point_type last_sent_to_server
Definition: connection.h:177
 
time_point_type connected_to_server
Definition: connection.h:176
 
std::size_t bytes_down
Definition: connection.h:173
 
Stats(std::string client_address, std::string server_address, std::size_t bytes_up, std::size_t bytes_down, time_point_type started, time_point_type connected_to_server, time_point_type last_sent_to_server, time_point_type last_received_from_server)
Definition: connection.h:155
 
std::string client_address
Definition: connection.h:169
 
std::string server_address
Definition: connection.h:170
 
time_point_type last_received_from_server
Definition: connection.h:178
 
std::size_t bytes_up
Definition: connection.h:172
 
Information about one server destination.
Definition: routing_guidelines.h:80
 
Information about incoming session.
Definition: routing_guidelines.h:103
 
Definition: mysqlslap.cc:243