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:247
 
Manage destinations for a Connection Routing.
Definition: destination.h:84
 
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:399
 
std::unique_ptr< ConnectionBase > & connection()
Definition: connection_base.h:405
 
net::impl::socket::native_handle_type native_handle() const
Definition: connection_base.h:368
 
SslMode ssl_mode() const
Definition: connection_base.h:364
 
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
 
std::chrono::seconds seconds
Definition: authorize_manager.cc:68
 
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:80
 
Information about incoming session.
Definition: routing_guidelines.h:103