25#ifndef ROUTING_CLASSIC_CONNECTION_BASE_INCLUDED
26#define ROUTING_CLASSIC_CONNECTION_BASE_INCLUDED
33#include <unordered_map>
61 std::optional<classic_protocol::message::server::Greeting>
99 std::optional<classic_protocol::message::client::Greeting> msg) {
109 std::optional<classic_protocol::message::server::Greeting> msg) {
257 public std::enable_shared_from_this<MysqlRoutingClassicConnectionBase> {
264 std::unique_ptr<ConnectionBase> client_connection,
265 std::unique_ptr<RoutingConnectionBase> client_routing_connection,
274 std::move(client_routing_connection),
287 template <
typename... Args>
288 [[nodiscard]]
static std::shared_ptr<MysqlRoutingClassicConnectionBase>
295 return std::shared_ptr<MysqlRoutingClassicConnectionBase>(
300 std::shared_ptr<MysqlRoutingClassicConnectionBase>
getptr() {
301 return shared_from_this();
305 std::vector<uint8_t> &error_frame,
const uint8_t seq_id,
307 const uint16_t error_code,
const std::string &msg,
308 const std::string &sql_state);
348 bool call_finish =
true);
397 return processors_.push_back(std::move(processor));
405 bool ignore_some_state_changed =
false);
414 std::string_view stage,
Function func);
619 std::optional<classic_protocol::session_track::TransactionCharacteristics>
624 std::optional<classic_protocol::session_track::TransactionState>
trx_state()
643 std::optional<classic_protocol::session_track::TransactionState>
trx_state_;
644 std::optional<classic_protocol::session_track::TransactionCharacteristics>
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:250
protocol state of a classic protocol connection.
Definition: classic_connection_base.h:54
classic_protocol::capabilities::value_type server_caps_
Definition: classic_connection_base.h:218
uint8_t seq_id() const
Definition: classic_connection_base.h:114
std::string schema()
Definition: classic_connection_base.h:153
ClassicProtocolState()=default
PreparedStatements & prepared_statements()
Definition: classic_connection_base.h:171
std::chrono::seconds wait_for_my_writes_timeout_
Definition: classic_connection_base.h:249
void sent_attributes(std::string attrs)
Definition: classic_connection_base.h:162
void seq_id(uint8_t id)
Definition: classic_connection_base.h:116
std::string gtid_executed() const
Definition: classic_connection_base.h:197
std::string auth_method_name() const
Definition: classic_connection_base.h:131
void wait_for_my_writes(bool v)
Definition: classic_connection_base.h:199
void status_flags(classic_protocol::status::value_type val)
Definition: classic_connection_base.h:177
void trace_commands(bool val)
Definition: classic_connection_base.h:191
bool trace_commands_
Definition: classic_connection_base.h:244
uint8_t & seq_id()
Definition: classic_connection_base.h:113
std::unordered_map< uint32_t, PreparedStatement > PreparedStatements
Definition: classic_connection_base.h:166
bool wait_for_my_writes_
Definition: classic_connection_base.h:248
std::optional< classic_protocol::message::server::Greeting > server_greeting() const
Definition: classic_connection_base.h:103
void server_capabilities(classic_protocol::capabilities::value_type caps)
Definition: classic_connection_base.h:73
std::string auth_method_data() const
Definition: classic_connection_base.h:139
std::chrono::seconds wait_for_my_writes_timeout() const
Definition: classic_connection_base.h:202
const std::optional< std::string > & password() const
Definition: classic_connection_base.h:151
bool wait_for_my_writes() const
Definition: classic_connection_base.h:200
void password(std::optional< std::string > pw)
Definition: classic_connection_base.h:150
std::string sent_attributes()
Definition: classic_connection_base.h:161
std::string auth_method_name_
Definition: classic_connection_base.h:235
void client_greeting(std::optional< classic_protocol::message::client::Greeting > msg)
Definition: classic_connection_base.h:98
void server_greeting(std::optional< classic_protocol::message::server::Greeting > msg)
Definition: classic_connection_base.h:108
std::string sent_attributes_
Definition: classic_connection_base.h:233
std::optional< FrameInfo > & current_frame()
Definition: classic_connection_base.h:125
std::optional< uint8_t > msg_type_
Definition: classic_connection_base.h:225
std::string gtid_executed_
Definition: classic_connection_base.h:246
std::optional< uint8_t > & current_msg_type()
Definition: classic_connection_base.h:126
classic_protocol::capabilities::value_type client_caps_
Definition: classic_connection_base.h:219
uint8_t seq_id_
Definition: classic_connection_base.h:227
void client_capabilities(classic_protocol::capabilities::value_type caps)
Definition: classic_connection_base.h:77
uint64_t columns_left
Definition: classic_connection_base.h:128
void schema(std::string s)
Definition: classic_connection_base.h:154
std::optional< AccessMode > access_mode_
Definition: classic_connection_base.h:252
std::optional< classic_protocol::message::server::Greeting > server_greeting_
Definition: classic_connection_base.h:222
std::string username_
Definition: classic_connection_base.h:229
void auth_method_name(std::string name)
Definition: classic_connection_base.h:135
void attributes(std::string attrs)
Definition: classic_connection_base.h:158
classic_protocol::status::value_type status_flags() const
Definition: classic_connection_base.h:173
std::optional< AccessMode > access_mode() const
Definition: classic_connection_base.h:214
std::optional< FrameInfo > current_frame_
Definition: classic_connection_base.h:224
ClassicProtocolState(classic_protocol::capabilities::value_type server_caps, classic_protocol::capabilities::value_type client_caps, std::optional< classic_protocol::message::server::Greeting > server_greeting, std::string username, std::string schema, std::string attributes)
Definition: classic_connection_base.h:58
void gtid_executed(const std::string >id_execed)
Definition: classic_connection_base.h:194
classic_protocol::capabilities::value_type client_capabilities() const
Definition: classic_connection_base.h:81
uint32_t params_left
Definition: classic_connection_base.h:129
bool trace_commands() const
trace the events of the commands.
Definition: classic_connection_base.h:190
classic_protocol::status::value_type status_flags_
Definition: classic_connection_base.h:241
void auth_method_data(std::string data)
Definition: classic_connection_base.h:143
std::optional< classic_protocol::message::client::Greeting > client_greeting() const
Definition: classic_connection_base.h:93
std::string auth_method_data_
Definition: classic_connection_base.h:236
PreparedStatements prepared_stmts_
Definition: classic_connection_base.h:238
std::optional< classic_protocol::message::client::Greeting > client_greeting_
Definition: classic_connection_base.h:221
std::string recv_attributes_
Definition: classic_connection_base.h:232
AccessMode
Definition: classic_connection_base.h:209
classic_protocol::capabilities::value_type server_capabilities() const
Definition: classic_connection_base.h:85
void username(std::string user)
Definition: classic_connection_base.h:148
void access_mode(std::optional< AccessMode > v)
Definition: classic_connection_base.h:215
std::string username()
Definition: classic_connection_base.h:147
std::optional< std::string > password_
Definition: classic_connection_base.h:230
const PreparedStatements & prepared_statements() const
Definition: classic_connection_base.h:168
void wait_for_my_writes_timeout(std::chrono::seconds timeout)
Definition: classic_connection_base.h:205
std::string attributes()
Definition: classic_connection_base.h:157
classic_protocol::capabilities::value_type shared_capabilities() const
Definition: classic_connection_base.h:89
std::string schema_
Definition: classic_connection_base.h:231
A forward iterable container of destinations.
Definition: destination.h:106
execution context for SQL.
Definition: sql_exec_context.h:42
Definition: connection.h:42
MySQLRoutingContext & context()
Definition: connection.h:51
MySQLRoutingContext holds data used by MySQLRouting (1 per plugin instances) and MySQLRoutingConnecti...
Definition: context.h:58
Definition: classic_connection_base.h:257
std::chrono::seconds wait_for_my_writes_timeout() const
Definition: classic_connection_base.h:601
std::optional< classic_protocol::session_track::TransactionCharacteristics > trx_characteristics_
Definition: classic_connection_base.h:645
bool wait_for_my_writes_
Definition: classic_connection_base.h:717
bool authenticated_
Definition: classic_connection_base.h:551
RouteDestination * destinations()
Definition: classic_connection_base.h:608
void destination_id(const std::string &id)
Definition: classic_connection_base.h:487
mysqlrouter::ServerMode expected_server_mode_
Definition: classic_connection_base.h:713
void requires_client_cert(bool v)
set if the server-connection requires a client cert
Definition: classic_connection_base.h:579
std::optional< classic_protocol::session_track::TransactionCharacteristics > trx_characteristics() const
Definition: classic_connection_base.h:620
void reset_to_initial()
reset the connection's settings to the initial-values.
Definition: classic_connection_base.cc:987
TraceSpan events_
Definition: classic_connection_base.h:706
bool connection_sharing_possible() const
check if connection sharing is possible.
Definition: classic_connection_base.cc:831
bool authenticated() const
check if the connection is authenticated.
Definition: classic_connection_base.h:516
bool collation_connection_maybe_dirty_
Definition: classic_connection_base.h:648
bool requires_client_cert_
Definition: classic_connection_base.h:652
void async_wait_client_closed()
void on_handshake_received()
Definition: classic_connection_base.cc:93
void recv_server_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:132
Destinations destinations_
Definition: classic_connection_base.h:631
std::optional< classic_protocol::session_track::TransactionState > trx_state() const
Definition: classic_connection_base.h:624
void pop_processor()
Definition: classic_connection_base.h:400
void async_recv_server(Function next)
Definition: classic_connection_base.cc:279
virtual void async_run()
Definition: classic_connection_base.h:335
ExecutionContext exec_ctx_
Definition: classic_connection_base.h:659
ClassicProtocolState * server_protocol()
Definition: classic_connection_base.h:465
void wait_for_my_writes(bool v)
Definition: classic_connection_base.h:593
net::steady_timer connect_timer_
Definition: classic_connection_base.h:697
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:55
void server_socket_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:159
void call_next_function(Function next)
Definition: classic_connection_base.h:365
void client_greeting_sent(bool sent)
Definition: classic_connection_base.h:557
bool diagnostic_area_changed_
Definition: classic_connection_base.h:701
void collation_connection_maybe_dirty(bool val)
Definition: classic_connection_base.h:611
std::unique_ptr< ProtocolSplicerBase > socket_splicer_
Definition: classic_connection_base.h:633
void authenticated(bool v)
Definition: classic_connection_base.h:517
const ProtocolSplicerBase * socket_splicer() const
Definition: classic_connection_base.h:475
const ClassicProtocolState * client_protocol() const
Definition: classic_connection_base.h:460
net::steady_timer & connect_timer()
Definition: classic_connection_base.h:671
void send_client_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:141
bool connection_sharing_allowed() const
check if connection sharing is allowed.
Definition: classic_connection_base.cc:942
bool requires_tls() const
get if the server-connection requires TLS
Definition: classic_connection_base.h:576
SslMode source_ssl_mode() const
Definition: classic_connection_base.h:313
bool client_greeting_sent() const
Definition: classic_connection_base.h:556
void async_send_server(Function next)
Definition: classic_connection_base.cc:252
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:474
void trace_and_call_function(Tracer::Event::Direction dir, std::string_view stage, Function func)
Definition: classic_connection_base.cc:781
std::string connection_sharing_blocked_by() const
Definition: classic_connection_base.cc:949
std::string read_only_destination_id() const override
Definition: classic_connection_base.h:493
std::string ro_destination_id_
Definition: classic_connection_base.h:636
virtual void client_socket_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:176
void async_send_client_and_finish()
void read_write_destination_id(const std::string &destination_id)
Definition: classic_connection_base.h:503
void connect_error_code(const std::error_code &ec)
Definition: classic_connection_base.h:673
std::optional< classic_protocol::session_track::TransactionState > trx_state_
Definition: classic_connection_base.h:643
void async_send_client(Function next)
Definition: classic_connection_base.cc:204
void on_handshake_aborted()
Definition: classic_connection_base.cc:106
std::shared_ptr< MysqlRoutingClassicConnectionBase > getptr()
Definition: classic_connection_base.h:300
void disconnect() override
Definition: classic_connection_base.cc:390
Destinations & current_destinations()
Definition: classic_connection_base.h:609
bool some_state_changed_
Definition: classic_connection_base.h:646
bool requires_tls_
Definition: classic_connection_base.h:650
int active_work_
Definition: classic_connection_base.h:549
std::string rw_destination_id_
Definition: classic_connection_base.h:635
void gtid_at_least_executed(const std::string >id)
Definition: classic_connection_base.h:596
TraceSpan & events()
Definition: classic_connection_base.h:682
static std::shared_ptr< MysqlRoutingClassicConnectionBase > create(Args &&... args)
Definition: classic_connection_base.h:289
void requires_tls(bool v)
set if the server-connection requires TLS
Definition: classic_connection_base.h:573
SslMode dest_ssl_mode() const
Definition: classic_connection_base.h:317
void async_recv_client(Function next)
Definition: classic_connection_base.cc:231
void connection_sharing_allowed_reset()
reset the connection-sharing state.
Definition: classic_connection_base.cc:981
void send_server_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:123
void some_state_changed(bool v)
Definition: classic_connection_base.h:584
bool requires_client_cert() const
get if the server-connection requires a client cert
Definition: classic_connection_base.h:582
void server_side_client_greeting()
Definition: classic_connection_base.cc:412
void async_wait_send_server(Function next)
Definition: classic_connection_base.cc:371
ProtocolSplicerBase * socket_splicer()
Definition: classic_connection_base.h:479
FromEither
Definition: classic_connection_base.h:684
void expected_server_mode(mysqlrouter::ServerMode v)
Definition: classic_connection_base.h:586
std::vector< std::unique_ptr< BasicProcessor > > processors_
Definition: classic_connection_base.h:393
RouteDestination * route_destination_
Definition: classic_connection_base.h:630
FromEither recv_from_either_
Definition: classic_connection_base.h:703
ClassicProtocolState * client_protocol()
Definition: classic_connection_base.h:455
void push_processor(std::unique_ptr< BasicProcessor > processor)
Definition: classic_connection_base.h:396
FromEither recv_from_either() const
Definition: classic_connection_base.h:693
std::string gtid_at_least_executed_
Definition: classic_connection_base.h:720
bool in_handshake_
client side handshake isn't finished yet.
Definition: classic_connection_base.h:641
std::error_code connect_ec_
Definition: classic_connection_base.h:699
ExecutionContext & execution_context()
Definition: classic_connection_base.h:655
net::impl::socket::native_handle_type get_client_fd() const override
Definition: classic_connection_base.h:321
net::steady_timer & read_timer()
Definition: classic_connection_base.h:670
void read_only_destination_id(const std::string &destination_id)
Definition: classic_connection_base.h:496
const TraceSpan & events() const
Definition: classic_connection_base.h:681
std::string get_client_address() const override
Returns address of client which connected to router.
Definition: classic_connection_base.h:325
void async_recv_both(Function next)
Definition: classic_connection_base.cc:297
void loop()
Definition: classic_connection_base.cc:791
void recv_from_either(FromEither v)
Definition: classic_connection_base.h:691
std::string get_destination_id() const override
Definition: classic_connection_base.h:481
bool wait_for_my_writes() const
Definition: classic_connection_base.h:594
std::chrono::seconds wait_for_my_writes_timeout_
Definition: classic_connection_base.h:723
bool client_greeting_sent_
Definition: classic_connection_base.h:553
virtual void done()
Definition: classic_connection_base.cc:471
void resume()
Definition: classic_connection_base.h:356
std::string get_server_address() const override
Returns address of server to which connection is established.
Definition: classic_connection_base.h:329
net::steady_timer read_timer_
Definition: classic_connection_base.h:696
Tracer tracer_
Definition: classic_connection_base.h:667
void recv_client_failed(std::error_code ec, bool call_finish=true)
Definition: classic_connection_base.cc:150
void finish()
Definition: classic_connection_base.cc:426
void diagnostic_area_changed(bool diagnostic_area_changed)
Definition: classic_connection_base.h:676
Function
Definition: classic_connection_base.h:359
const ExecutionContext & execution_context() const
Definition: classic_connection_base.h:656
std::string read_write_destination_id() const override
Definition: classic_connection_base.h:500
bool greeting_from_router() const
if the router is sending the initial server-greeting.
Definition: classic_connection_base.h:566
mysqlrouter::ServerMode expected_server_mode() const
Definition: classic_connection_base.h:589
const ClassicProtocolState * server_protocol() const
Definition: classic_connection_base.h:470
Tracer & tracer()
Definition: classic_connection_base.h:664
void trace(Tracer::Event e)
Definition: classic_connection_base.h:662
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:262
bool diagnostic_area_changed() const
Definition: classic_connection_base.h:679
void wait_for_my_writes_timeout(std::chrono::seconds timeout)
Definition: classic_connection_base.h:604
std::error_code connect_error_code() const
Definition: classic_connection_base.h:674
std::string gtid_at_least_executed() const
Definition: classic_connection_base.h:599
bool collation_connection_maybe_dirty() const
Definition: classic_connection_base.h:615
splices two connections together.
Definition: basic_protocol_splicer.h:481
TlsSwitchableConnection & client_conn()
Definition: basic_protocol_splicer.h:518
SslMode dest_ssl_mode() const
Definition: basic_protocol_splicer.h:534
SslMode source_ssl_mode() const
Definition: basic_protocol_splicer.h:530
TlsSwitchableConnection & server_conn()
Definition: basic_protocol_splicer.h:524
Definition: basic_protocol_splicer.h:290
Manage destinations for a Connection Routing.
Definition: destination.h:187
a Connection that can be switched to TLS.
Definition: basic_protocol_splicer.h:305
std::string endpoint() const
Definition: basic_protocol_splicer.h:424
net::impl::socket::native_handle_type native_handle() const
Definition: basic_protocol_splicer.h:405
ProtocolStateBase * protocol()
Definition: basic_protocol_splicer.h:446
Events of a command.
Definition: trace_span.h:76
Direction
Definition: tracer.h:72
traces the timestamps of events in a stderr log.
Definition: tracer.h:48
void trace(Event e)
Definition: tracer.h:127
char * user
Definition: mysqladmin.cc:64
std::bitset< 32 > value_type
Definition: classic_protocol_constants.h:72
std::bitset< 16 > value_type
Definition: classic_protocol_constants.h:167
std::string dir
Double write files location.
Definition: buf0dblwr.cc:76
static bool timeout(bool(*wait_condition)())
Timeout function.
Definition: log0meb.cc:497
Unique_ptr< T, std::nullptr_t > make_unique(size_t size)
In-place constructs a new unique pointer with no specific allocator and with array type T.
ServerMode
Definition: datatypes.h:54
int native_handle_type
Definition: socket_constants.h:50
constexpr const std::chrono::seconds kDefaultWaitForMyWritesTimeout
Default Wait For My Writes timeout.
Definition: routing.h:130
constexpr const bool kDefaultWaitForMyWrites
Default Wait For My Writes timeout.
Definition: routing.h:125
Definition: varlen_sort.h:174
SslMode
Definition: ssl_mode.h:28
case opt name
Definition: sslopt-case.h:32
Definition: classic_connection_base.h:118
size_t forwarded_frame_size_
size of the whole frame that's already forwarded.
Definition: classic_connection_base.h:121
size_t frame_size_
size of the whole frame.
Definition: classic_connection_base.h:120
uint8_t seq_id_
sequence id.
Definition: classic_connection_base.h:119
double seconds()
Definition: task.cc:309
unsigned long id[MAX_DEAD]
Definition: xcom_base.cc:509