26#ifndef ROUTING_CLASSIC_CONNECTION_BASE_INCLUDED
27#define ROUTING_CLASSIC_CONNECTION_BASE_INCLUDED
34#include <unordered_map>
56 public std::enable_shared_from_this<MysqlRoutingClassicConnectionBase> {
63 std::unique_ptr<ConnectionBase> client_connection,
64 std::unique_ptr<RoutingConnectionBase> client_routing_connection,
72 std::move(client_routing_connection),
92 template <
typename... Args>
93 [[nodiscard]]
static std::shared_ptr<MysqlRoutingClassicConnectionBase>
96 return std::shared_ptr<MysqlRoutingClassicConnectionBase>(
101 std::shared_ptr<MysqlRoutingClassicConnectionBase>
getptr() {
102 return shared_from_this();
106 std::vector<uint8_t> &error_frame,
const uint8_t seq_id,
108 const uint16_t error_code,
const std::string &msg,
109 const std::string &sql_state);
137 bool call_finish =
true);
186 return processors_.push_back(std::move(processor));
194 bool ignore_some_state_changed =
false);
203 std::string_view stage,
Function func);
312 const std::optional<net::ip::tcp::endpoint> &ep) {
322 const std::optional<net::ip::tcp::endpoint> &ep) {
440 std::optional<classic_protocol::session_track::TransactionCharacteristics>
446 std::optional<classic_protocol::session_track::TransactionCharacteristics>
451 std::optional<classic_protocol::session_track::TransactionState>
trx_state()
474 std::optional<classic_protocol::session_track::TransactionState>
trx_state_;
475 std::optional<classic_protocol::session_track::TransactionCharacteristics>
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:251
A forward iterable container of destinations.
Definition: destination.h:107
execution context for SQL.
Definition: sql_exec_context.h:39
Definition: connection.h:44
MySQLRoutingContext & context()
Definition: connection.h:53
void client_address(const std::string &dest)
Definition: connection.h:105
MySQLRoutingContext holds data used by MySQLRouting (1 per plugin instances) and MySQLRoutingConnecti...
Definition: context.h:59
Definition: classic_connection_base.h:56
std::chrono::seconds wait_for_my_writes_timeout() const
Definition: classic_connection_base.h:422
ClientSideConnection client_conn_
Definition: classic_connection_base.h:460
std::optional< classic_protocol::session_track::TransactionCharacteristics > trx_characteristics_
Definition: classic_connection_base.h:476
bool wait_for_my_writes_
Definition: classic_connection_base.h:569
bool authenticated_
Definition: classic_connection_base.h:370
RouteDestination * destinations()
Definition: classic_connection_base.h:429
void destination_id(const std::string &id)
Definition: classic_connection_base.h:274
const ServerSideConnection::protocol_state_type & server_protocol() const
Definition: classic_connection_base.h:256
mysqlrouter::ServerMode expected_server_mode_
Definition: classic_connection_base.h:555
void requires_client_cert(bool v)
set if the server-connection requires a client cert
Definition: classic_connection_base.h:393
std::optional< classic_protocol::session_track::TransactionCharacteristics > trx_characteristics() const
Definition: classic_connection_base.h:441
const ClientSideConnection::protocol_state_type & client_protocol() const
Definition: classic_connection_base.h:248
void reset_to_initial()
reset the connection's settings to the initial-values.
Definition: classic_connection_base.cc:999
TraceSpan events_
Definition: classic_connection_base.h:545
bool connection_sharing_possible() const
check if connection sharing is possible.
Definition: classic_connection_base.cc:843
bool authenticated() const
check if the connection is authenticated.
Definition: classic_connection_base.h:335
bool collation_connection_maybe_dirty_
Definition: classic_connection_base.h:479
std::optional< net::ip::tcp::endpoint > read_write_destination_endpoint() const override
Definition: classic_connection_base.h:316
bool requires_client_cert_
Definition: classic_connection_base.h:483
void async_wait_client_closed()
virtual void stash_server_conn()
Definition: classic_connection_base.cc:1032
void on_handshake_received()
Definition: classic_connection_base.cc:99
void recv_server_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:138
Destinations destinations_
Definition: classic_connection_base.h:458
void destination_endpoint(const std::optional< net::ip::tcp::endpoint > &ep)
Definition: classic_connection_base.h:301
std::optional< net::ip::tcp::endpoint > rw_destination_endpoint_
Definition: classic_connection_base.h:466
std::optional< classic_protocol::session_track::TransactionState > trx_state() const
Definition: classic_connection_base.h:451
void pop_processor()
Definition: classic_connection_base.h:189
void current_server_mode(mysqlrouter::ServerMode v)
Definition: classic_connection_base.h:407
void async_recv_server(Function next)
Definition: classic_connection_base.cc:288
virtual void async_run()
Definition: classic_connection_base.h:124
ExecutionContext exec_ctx_
Definition: classic_connection_base.h:490
void trx_characteristics(std::optional< classic_protocol::session_track::TransactionCharacteristics > trx_chars)
Definition: classic_connection_base.h:445
void wait_for_my_writes(bool v)
Definition: classic_connection_base.h:414
net::steady_timer connect_timer_
Definition: classic_connection_base.h:536
static stdx::expected< size_t, std::error_code > encode_error_packet(std::vector< uint8_t > &error_frame, const uint8_t seq_id, const classic_protocol::capabilities::value_type caps, const uint16_t error_code, const std::string &msg, const std::string &sql_state)
Definition: classic_connection_base.cc:61
std::optional< net::ip::tcp::endpoint > destination_endpoint() const override
Definition: classic_connection_base.h:295
void server_socket_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:165
void call_next_function(Function next)
Definition: classic_connection_base.h:154
bool diagnostic_area_changed_
Definition: classic_connection_base.h:540
void collation_connection_maybe_dirty(bool val)
Definition: classic_connection_base.h:432
ServerSideConnection & server_conn()
Definition: classic_connection_base.h:263
void authenticated(bool v)
Definition: classic_connection_base.h:336
net::steady_timer & connect_timer()
Definition: classic_connection_base.h:502
void send_client_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:147
bool connection_sharing_allowed() const
check if connection sharing is allowed.
Definition: classic_connection_base.cc:954
void has_transient_error_at_connect(bool val)
Definition: classic_connection_base.h:526
bool requires_tls() const
get if the server-connection requires TLS
Definition: classic_connection_base.h:390
bool has_transient_error_at_connect() const
Definition: classic_connection_base.h:530
SslMode source_ssl_mode() const
Definition: classic_connection_base.h:114
mysqlrouter::ServerMode current_server_mode() const
Definition: classic_connection_base.h:410
static std::shared_ptr< MysqlRoutingClassicConnectionBase > create(Args &&...args)
Definition: classic_connection_base.h:94
void async_send_server(Function next)
Definition: classic_connection_base.cc:261
stdx::expected< void, std::error_code > track_session_changes(net::const_buffer session_trackers, classic_protocol::capabilities::value_type caps, bool ignore_some_state_changed=false)
Definition: classic_connection_base.cc:484
void trace_and_call_function(Tracer::Event::Direction dir, std::string_view stage, Function func)
Definition: classic_connection_base.cc:793
std::string connection_sharing_blocked_by() const
Definition: classic_connection_base.cc:961
std::string read_only_destination_id() const override
Definition: classic_connection_base.h:280
const ClientSideConnection & client_conn() const
Definition: classic_connection_base.h:261
std::string ro_destination_id_
Definition: classic_connection_base.h:464
virtual void client_socket_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:182
ServerSideConnection::protocol_state_type & server_protocol()
Definition: classic_connection_base.h:252
void async_send_client_and_finish()
void read_write_destination_id(const std::string &destination_id)
Definition: classic_connection_base.h:291
void connect_error_code(const std::error_code &ec)
Definition: classic_connection_base.h:504
std::optional< net::ip::tcp::endpoint > read_only_destination_endpoint() const override
Definition: classic_connection_base.h:307
std::optional< classic_protocol::session_track::TransactionState > trx_state_
Definition: classic_connection_base.h:474
void async_send_client(Function next)
Definition: classic_connection_base.cc:211
void on_handshake_aborted()
Definition: classic_connection_base.cc:112
std::shared_ptr< MysqlRoutingClassicConnectionBase > getptr()
Definition: classic_connection_base.h:101
void disconnect() override
Definition: classic_connection_base.cc:397
Destinations & current_destinations()
Definition: classic_connection_base.h:430
bool some_state_changed_
Definition: classic_connection_base.h:477
bool requires_tls_
Definition: classic_connection_base.h:481
int active_work_
Definition: classic_connection_base.h:368
std::string rw_destination_id_
Definition: classic_connection_base.h:463
void gtid_at_least_executed(const std::string >id)
Definition: classic_connection_base.h:417
TraceSpan & events()
Definition: classic_connection_base.h:513
void requires_tls(bool v)
set if the server-connection requires TLS
Definition: classic_connection_base.h:387
SslMode dest_ssl_mode() const
Definition: classic_connection_base.h:116
void async_recv_client(Function next)
Definition: classic_connection_base.cc:238
void connection_sharing_allowed_reset()
reset the connection-sharing state.
Definition: classic_connection_base.cc:993
void send_server_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:129
void some_state_changed(bool v)
Definition: classic_connection_base.h:398
bool requires_client_cert() const
get if the server-connection requires a client cert
Definition: classic_connection_base.h:396
void server_side_client_greeting()
Definition: classic_connection_base.cc:419
void async_wait_send_server(Function next)
Definition: classic_connection_base.cc:380
FromEither
Definition: classic_connection_base.h:515
void expected_server_mode(mysqlrouter::ServerMode v)
Definition: classic_connection_base.h:400
std::vector< std::unique_ptr< BasicProcessor > > processors_
Definition: classic_connection_base.h:182
bool has_transient_error_at_connect_
Definition: classic_connection_base.h:577
RouteDestination * route_destination_
Definition: classic_connection_base.h:457
FromEither recv_from_either_
Definition: classic_connection_base.h:542
void push_processor(std::unique_ptr< BasicProcessor > processor)
Definition: classic_connection_base.h:185
FromEither recv_from_either() const
Definition: classic_connection_base.h:524
mysqlrouter::ServerMode current_server_mode_
Definition: classic_connection_base.h:565
std::string gtid_at_least_executed_
Definition: classic_connection_base.h:572
bool in_handshake_
client side handshake isn't finished yet.
Definition: classic_connection_base.h:472
void read_only_destination_endpoint(const std::optional< net::ip::tcp::endpoint > &ep)
Definition: classic_connection_base.h:311
std::optional< net::ip::tcp::endpoint > ro_destination_endpoint_
Definition: classic_connection_base.h:467
std::error_code connect_ec_
Definition: classic_connection_base.h:538
ExecutionContext & execution_context()
Definition: classic_connection_base.h:486
net::impl::socket::native_handle_type get_client_fd() const override
Definition: classic_connection_base.h:118
net::steady_timer & read_timer()
Definition: classic_connection_base.h:501
ClientSideConnection::protocol_state_type & client_protocol()
Definition: classic_connection_base.h:244
void read_only_destination_id(const std::string &destination_id)
Definition: classic_connection_base.h:284
const TraceSpan & events() const
Definition: classic_connection_base.h:512
void read_write_destination_endpoint(const std::optional< net::ip::tcp::endpoint > &ep)
Definition: classic_connection_base.h:321
ClientSideConnection & client_conn()
Definition: classic_connection_base.h:260
void async_recv_both(Function next)
Definition: classic_connection_base.cc:307
void loop()
Definition: classic_connection_base.cc:803
void recv_from_either(FromEither v)
Definition: classic_connection_base.h:522
const ServerSideConnection & server_conn() const
Definition: classic_connection_base.h:264
std::string get_destination_id() const override
Definition: classic_connection_base.h:268
bool wait_for_my_writes() const
Definition: classic_connection_base.h:415
std::chrono::seconds wait_for_my_writes_timeout_
Definition: classic_connection_base.h:575
virtual void done()
Definition: classic_connection_base.cc:481
void resume()
Definition: classic_connection_base.h:145
net::steady_timer read_timer_
Definition: classic_connection_base.h:535
Tracer tracer_
Definition: classic_connection_base.h:498
void recv_client_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:156
void finish()
Definition: classic_connection_base.cc:433
ServerSideConnection server_conn_
Definition: classic_connection_base.h:461
void diagnostic_area_changed(bool diagnostic_area_changed)
Definition: classic_connection_base.h:507
Function
Definition: classic_connection_base.h:148
const ExecutionContext & execution_context() const
Definition: classic_connection_base.h:487
std::string read_write_destination_id() const override
Definition: classic_connection_base.h:288
bool greeting_from_router() const
if the router is sending the initial server-greeting.
Definition: classic_connection_base.h:380
mysqlrouter::ServerMode expected_server_mode() const
Definition: classic_connection_base.h:403
Tracer & tracer()
Definition: classic_connection_base.h:495
void trace(Tracer::Event e)
Definition: classic_connection_base.h:493
MysqlRoutingClassicConnectionBase(MySQLRoutingContext &context, RouteDestination *route_destination, std::unique_ptr< ConnectionBase > client_connection, std::unique_ptr< RoutingConnectionBase > client_routing_connection, std::function< void(MySQLRoutingConnectionBase *)> remove_callback)
Definition: classic_connection_base.h:61
bool diagnostic_area_changed() const
Definition: classic_connection_base.h:510
void wait_for_my_writes_timeout(std::chrono::seconds timeout)
Definition: classic_connection_base.h:425
std::error_code connect_error_code() const
Definition: classic_connection_base.h:505
std::string gtid_at_least_executed() const
Definition: classic_connection_base.h:420
bool collation_connection_maybe_dirty() const
Definition: classic_connection_base.h:436
Manage destinations for a Connection Routing.
Definition: destination.h:189
Definition: classic_protocol_state.h:375
typename base_class_::protocol_state_type protocol_state_type
Definition: basic_protocol_splicer.h:91
protocol_state_type & protocol()
Definition: connection_base.h:398
std::unique_ptr< ConnectionBase > & connection()
Definition: connection_base.h:404
net::impl::socket::native_handle_type native_handle() const
Definition: connection_base.h:367
SslMode ssl_mode() const
Definition: connection_base.h:363
Events of a command.
Definition: trace_span.h:77
Direction
Definition: tracer.h:73
traces the timestamps of events in a stderr log.
Definition: tracer.h:49
void trace(Event e)
Definition: tracer.h:128
std::bitset< 32 > value_type
Definition: classic_protocol_constants.h:73
std::string dir
Double write files location.
Definition: buf0dblwr.cc:77
static bool timeout(bool(*wait_condition)())
Timeout function.
Definition: log0meb.cc:498
ServerMode
Definition: datatypes.h:50
int native_handle_type
Definition: socket_constants.h:51
Definition: gcs_xcom_synode.h:64
SslMode
Definition: ssl_mode.h:29
double seconds()
Definition: task.cc:314