26#ifndef ROUTING_CLASSIC_CONNECTION_BASE_INCLUDED
27#define ROUTING_CLASSIC_CONNECTION_BASE_INCLUDED
57 public std::enable_shared_from_this<MysqlRoutingClassicConnectionBase> {
64 std::unique_ptr<ConnectionBase> client_connection,
65 std::unique_ptr<RoutingConnectionBase> client_routing_connection,
69 std::move(client_routing_connection),
90 template <
typename... Args>
91 [[nodiscard]]
static std::shared_ptr<MysqlRoutingClassicConnectionBase>
94 return std::shared_ptr<MysqlRoutingClassicConnectionBase>(
99 std::shared_ptr<MysqlRoutingClassicConnectionBase>
getptr() {
100 return shared_from_this();
104 std::vector<uint8_t> &error_frame,
const uint8_t seq_id,
106 const uint16_t error_code,
const std::string &msg,
107 const std::string &sql_state);
141 bool call_finish =
true);
190 return processors_.push_back(std::move(processor));
198 bool ignore_some_state_changed =
false);
207 std::string_view stage,
Function func);
291 const std::optional<mysql_harness::Destination> &
destination_id) {
300 const std::optional<mysql_harness::Destination> &
destination_id) {
312 const std::optional<mysql_harness::DestinationEndpoint> &ep) {
318 std::optional<mysql_harness::DestinationEndpoint>
323 const std::optional<mysql_harness::DestinationEndpoint> &ep) {
327 std::optional<mysql_harness::DestinationEndpoint>
333 const std::optional<mysql_harness::DestinationEndpoint> &ep) {
448 std::optional<classic_protocol::session_track::TransactionCharacteristics>
454 std::optional<classic_protocol::session_track::TransactionCharacteristics>
459 std::optional<classic_protocol::session_track::TransactionState>
trx_state()
465 is_completed_.wait([](
auto ready) {
return ready ==
true; });
479 std::optional<mysql_harness::Destination>
481 std::optional<mysql_harness::Destination>
492 std::optional<classic_protocol::session_track::TransactionState>
trx_state_;
493 std::optional<classic_protocol::session_track::TransactionCharacteristics>
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:251
Manage destinations for a Connection Routing.
Definition: destination.h:163
execution context for SQL.
Definition: sql_exec_context.h:39
Definition: connection.h:47
MySQLRoutingContext & context()
Definition: connection.h:56
void client_address(const std::string &dest)
Definition: connection.h:120
MySQLRoutingContext holds data used by MySQLRouting (1 per plugin instances) and MySQLRoutingConnecti...
Definition: context.h:54
Definition: classic_connection_base.h:57
std::chrono::seconds wait_for_my_writes_timeout() const
Definition: classic_connection_base.h:433
ClientSideConnection client_conn_
Definition: classic_connection_base.h:476
std::optional< classic_protocol::session_track::TransactionCharacteristics > trx_characteristics_
Definition: classic_connection_base.h:494
std::string get_routing_source() const override
Definition: classic_connection_base.h:517
std::optional< mysql_harness::DestinationEndpoint > rw_destination_endpoint_
Definition: classic_connection_base.h:484
bool wait_for_my_writes_
Definition: classic_connection_base.h:600
bool authenticated_
Definition: classic_connection_base.h:385
void completed() override
Definition: classic_connection_base.h:468
std::unique_ptr< Destination > destination_
Definition: classic_connection_base.h:571
const ServerSideConnection::protocol_state_type & server_protocol() const
Definition: classic_connection_base.h:260
mysqlrouter::ServerMode expected_server_mode_
Definition: classic_connection_base.h:586
std::optional< classic_protocol::session_track::TransactionCharacteristics > trx_characteristics() const
Definition: classic_connection_base.h:449
const ClientSideConnection::protocol_state_type & client_protocol() const
Definition: classic_connection_base.h:252
void reset_to_initial()
reset the connection's settings to the initial-values.
Definition: classic_connection_base.cc:1000
TraceSpan events_
Definition: classic_connection_base.h:576
bool connection_sharing_possible() const
check if connection sharing is possible.
Definition: classic_connection_base.cc:844
bool authenticated() const
check if the connection is authenticated.
Definition: classic_connection_base.h:350
bool collation_connection_maybe_dirty_
Definition: classic_connection_base.h:497
std::optional< mysql_harness::Destination > read_write_destination_id() const override
Definition: classic_connection_base.h:295
void async_wait_client_closed()
std::optional< mysql_harness::DestinationEndpoint > destination_endpoint() const override
Definition: classic_connection_base.h:304
virtual void stash_server_conn()
Definition: classic_connection_base.cc:1033
TransportConstraints expected_server_transport_constraints_
Definition: classic_connection_base.h:499
void on_handshake_received()
Definition: classic_connection_base.cc:100
void destination_id(const std::optional< mysql_harness::Destination > &id)
Definition: classic_connection_base.h:279
void recv_server_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:139
std::optional< classic_protocol::session_track::TransactionState > trx_state() const
Definition: classic_connection_base.h:459
routing_guidelines::Server_info get_server_info() const override
Definition: classic_connection_base.h:525
void pop_processor()
Definition: classic_connection_base.h:193
void current_server_mode(mysqlrouter::ServerMode v)
Definition: classic_connection_base.h:418
void async_recv_server(Function next)
Definition: classic_connection_base.cc:289
virtual void async_run()
Definition: classic_connection_base.h:128
ExecutionContext exec_ctx_
Definition: classic_connection_base.h:507
std::optional< mysql_harness::Destination > rw_destination_id_
Definition: classic_connection_base.h:480
void trx_characteristics(std::optional< classic_protocol::session_track::TransactionCharacteristics > trx_chars)
Definition: classic_connection_base.h:453
void wait_for_my_writes(bool v)
Definition: classic_connection_base.h:425
net::steady_timer connect_timer_
Definition: classic_connection_base.h:565
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:62
void server_socket_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:166
void call_next_function(Function next)
Definition: classic_connection_base.h:158
DestinationManager * destination_manager_
Definition: classic_connection_base.h:612
bool diagnostic_area_changed_
Definition: classic_connection_base.h:569
void collation_connection_maybe_dirty(bool val)
Definition: classic_connection_base.h:440
ServerSideConnection & server_conn()
Definition: classic_connection_base.h:267
void authenticated(bool v)
Definition: classic_connection_base.h:351
void expected_server_transport_constraints(TransportConstraints val)
Definition: classic_connection_base.h:401
net::steady_timer & connect_timer()
Definition: classic_connection_base.h:531
std::optional< mysql_harness::DestinationEndpoint > ro_destination_endpoint_
Definition: classic_connection_base.h:485
void send_client_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:148
bool connection_sharing_allowed() const
check if connection sharing is allowed.
Definition: classic_connection_base.cc:955
void has_transient_error_at_connect(bool val)
Definition: classic_connection_base.h:555
bool has_transient_error_at_connect() const
Definition: classic_connection_base.h:559
SslMode source_ssl_mode() const
Definition: classic_connection_base.h:112
mysqlrouter::ServerMode current_server_mode() const
Definition: classic_connection_base.h:421
static std::shared_ptr< MysqlRoutingClassicConnectionBase > create(Args &&...args)
Definition: classic_connection_base.h:92
DestinationManager * destination_manager() const
Definition: classic_connection_base.h:120
std::optional< mysql_harness::Destination > ro_destination_id_
Definition: classic_connection_base.h:482
void async_send_server(Function next)
Definition: classic_connection_base.cc:262
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:485
void trace_and_call_function(Tracer::Event::Direction dir, std::string_view stage, Function func)
Definition: classic_connection_base.cc:794
std::string connection_sharing_blocked_by() const
Definition: classic_connection_base.cc:962
const ClientSideConnection & client_conn() const
Definition: classic_connection_base.h:265
virtual void client_socket_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:183
ServerSideConnection::protocol_state_type & server_protocol()
Definition: classic_connection_base.h:256
void async_send_client_and_finish()
void connect_error_code(const std::error_code &ec)
Definition: classic_connection_base.h:533
std::optional< classic_protocol::session_track::TransactionState > trx_state_
Definition: classic_connection_base.h:492
void async_send_client(Function next)
Definition: classic_connection_base.cc:212
void on_handshake_aborted()
Definition: classic_connection_base.cc:113
WaitableMonitor< bool > is_completed_
Definition: classic_connection_base.h:610
routing_guidelines::Session_info get_session_info()
Definition: classic_connection_base.cc:1038
std::shared_ptr< MysqlRoutingClassicConnectionBase > getptr()
Definition: classic_connection_base.h:99
void disconnect() override
Definition: classic_connection_base.cc:398
bool some_state_changed_
Definition: classic_connection_base.h:495
int active_work_
Definition: classic_connection_base.h:383
void gtid_at_least_executed(const std::string >id)
Definition: classic_connection_base.h:428
TraceSpan & events()
Definition: classic_connection_base.h:542
SslMode dest_ssl_mode() const
Definition: classic_connection_base.h:114
void async_recv_client(Function next)
Definition: classic_connection_base.cc:239
void connection_sharing_allowed_reset()
reset the connection-sharing state.
Definition: classic_connection_base.cc:994
MysqlRoutingClassicConnectionBase(MySQLRoutingContext &context, DestinationManager *destination_manager, std::unique_ptr< ConnectionBase > client_connection, std::unique_ptr< RoutingConnectionBase > client_routing_connection, std::function< void(MySQLRoutingConnectionBase *)> remove_callback)
Definition: classic_connection_base.h:62
void set_routing_source(std::string name) override
Definition: classic_connection_base.h:521
void send_server_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:130
void some_state_changed(bool v)
Definition: classic_connection_base.h:409
void server_side_client_greeting()
Definition: classic_connection_base.cc:420
void async_wait_send_server(Function next)
Definition: classic_connection_base.cc:381
FromEither
Definition: classic_connection_base.h:544
void expected_server_mode(mysqlrouter::ServerMode v)
Definition: classic_connection_base.h:411
std::vector< std::unique_ptr< BasicProcessor > > processors_
Definition: classic_connection_base.h:186
bool has_transient_error_at_connect_
Definition: classic_connection_base.h:608
TransportConstraints expected_server_transport_constraints() const
Definition: classic_connection_base.h:405
FromEither recv_from_either_
Definition: classic_connection_base.h:573
std::optional< mysql_harness::DestinationEndpoint > read_write_destination_endpoint() const override
Definition: classic_connection_base.h:328
void push_processor(std::unique_ptr< BasicProcessor > processor)
Definition: classic_connection_base.h:189
FromEither recv_from_either() const
Definition: classic_connection_base.h:553
mysqlrouter::ServerMode current_server_mode_
Definition: classic_connection_base.h:596
std::string gtid_at_least_executed_
Definition: classic_connection_base.h:603
bool in_handshake_
client side handshake isn't finished yet.
Definition: classic_connection_base.h:490
std::error_code connect_ec_
Definition: classic_connection_base.h:567
ExecutionContext & execution_context()
Definition: classic_connection_base.h:503
void read_write_destination_id(const std::optional< mysql_harness::Destination > &destination_id)
Definition: classic_connection_base.h:299
net::impl::socket::native_handle_type get_client_fd() const override
Definition: classic_connection_base.h:116
net::steady_timer & read_timer()
Definition: classic_connection_base.h:530
ClientSideConnection::protocol_state_type & client_protocol()
Definition: classic_connection_base.h:248
const TraceSpan & events() const
Definition: classic_connection_base.h:541
ClientSideConnection & client_conn()
Definition: classic_connection_base.h:264
void async_recv_both(Function next)
Definition: classic_connection_base.cc:308
void loop()
Definition: classic_connection_base.cc:804
void recv_from_either(FromEither v)
Definition: classic_connection_base.h:551
const ServerSideConnection & server_conn() const
Definition: classic_connection_base.h:268
void destination_endpoint(const std::optional< mysql_harness::DestinationEndpoint > &ep)
Definition: classic_connection_base.h:311
void read_only_destination_endpoint(const std::optional< mysql_harness::DestinationEndpoint > &ep)
Definition: classic_connection_base.h:322
bool wait_for_my_writes() const
Definition: classic_connection_base.h:426
std::chrono::seconds wait_for_my_writes_timeout_
Definition: classic_connection_base.h:606
virtual void done()
Definition: classic_connection_base.cc:482
void resume()
Definition: classic_connection_base.h:149
std::optional< mysql_harness::DestinationEndpoint > read_only_destination_endpoint() const override
Definition: classic_connection_base.h:319
void read_write_destination_endpoint(const std::optional< mysql_harness::DestinationEndpoint > &ep)
Definition: classic_connection_base.h:332
net::steady_timer read_timer_
Definition: classic_connection_base.h:564
Tracer tracer_
Definition: classic_connection_base.h:515
void recv_client_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:157
void finish()
Definition: classic_connection_base.cc:434
ServerSideConnection server_conn_
Definition: classic_connection_base.h:477
void diagnostic_area_changed(bool diagnostic_area_changed)
Definition: classic_connection_base.h:536
Function
Definition: classic_connection_base.h:152
const ExecutionContext & execution_context() const
Definition: classic_connection_base.h:504
bool greeting_from_router() const
if the router is sending the initial server-greeting.
Definition: classic_connection_base.h:395
std::optional< mysql_harness::Destination > read_only_destination_id() const override
Definition: classic_connection_base.h:285
std::optional< mysql_harness::Destination > get_destination_id() const override
Definition: classic_connection_base.h:272
void set_destination(std::unique_ptr< Destination > destination)
Definition: classic_connection_base.h:337
void wait_until_completed() override
Definition: classic_connection_base.h:464
mysqlrouter::ServerMode expected_server_mode() const
Definition: classic_connection_base.h:414
Tracer & tracer()
Definition: classic_connection_base.h:512
void trace(Tracer::Event e)
Definition: classic_connection_base.h:510
void read_only_destination_id(const std::optional< mysql_harness::Destination > &destination_id)
Definition: classic_connection_base.h:290
bool diagnostic_area_changed() const
Definition: classic_connection_base.h:539
void wait_for_my_writes_timeout(std::chrono::seconds timeout)
Definition: classic_connection_base.h:436
std::error_code connect_error_code() const
Definition: classic_connection_base.h:534
std::string gtid_at_least_executed() const
Definition: classic_connection_base.h:431
bool collation_connection_maybe_dirty() const
Definition: classic_connection_base.h:444
Definition: classic_protocol_state.h:406
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
Definition: transport_constraints.h:31
Monitor can be waited for.
Definition: monitor.h:62
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
case opt name
Definition: sslopt-case.h:29
Information about one server destination.
Definition: routing_guidelines.h:78
Information about incoming session.
Definition: routing_guidelines.h:101
double seconds()
Definition: task.cc:314