MySQL 8.4.0
Source Code Documentation
ForwardingProcessor Class Reference

a processor base class with helper functions. More...

#include <forwarding_processor.h>

Inheritance diagram for ForwardingProcessor:
[legend]

Static Public Attributes

static constexpr const std::chrono::milliseconds kConnectRetryInterval
 interval between connect-retries. More...
 

Protected Member Functions

stdx::expected< Result, std::error_code > forward_server_to_client (bool noflush=false)
 forward the current packet from the server-side to the client-side. More...
 
stdx::expected< Result, std::error_code > forward_client_to_server (bool noflush=false)
 forward the current packet from the client-side to the server-side. More...
 
stdx::expected< Processor::Result, std::error_code > skip_or_inject_end_of_columns (bool no_flush=false)
 adjust the end-of-columns packet. More...
 
stdx::expected< bool, std::error_code > pool_server_connection ()
 move the server connection to the pool. More...
 
stdx::expected< Processor::Result, std::error_code > socket_reconnect_start (TraceEvent *parent_event)
 reconnect a socket. More...
 
stdx::expected< Processor::Result, std::error_code > mysql_reconnect_start (TraceEvent *parent_event)
 reconnect a mysql classic connection. More...
 
stdx::expected< Result, std::error_code > recv_server_failed_and_check_client_socket (std::error_code ec)
 handle error-code of a failed receive() from the server-socket and check the status of the client socket. More...
 
stdx::expected< Processor::Result, std::error_code > reconnect_send_error_msg (Channel &src_channel, ClassicProtocolState &src_protocol)
 send a Error msg based on the reconnect_error(). More...
 
template<class Proto >
stdx::expected< Processor::Result, std::error_code > reconnect_send_error_msg (TlsSwitchableConnection< Proto > &conn)
 
void reconnect_error (classic_protocol::message::server::Error err)
 set the reconnect error. More...
 
classic_protocol::message::server::Error reconnect_error () const
 get the reconnect error. More...
 
- Protected Member Functions inherited from Processor
stdx::expected< Result, std::error_code > send_server_failed (std::error_code ec)
 
stdx::expected< Result, std::error_code > recv_server_failed (std::error_code ec)
 
stdx::expected< Result, std::error_code > send_client_failed (std::error_code ec)
 
stdx::expected< Result, std::error_code > recv_client_failed (std::error_code ec)
 
stdx::expected< Result, std::error_code > server_socket_failed (std::error_code ec)
 
stdx::expected< Result, std::error_code > client_socket_failed (std::error_code ec)
 
stdx::expected< void, std::error_code > discard_current_msg (Channel &src_channel, ClassicProtocolState &src_protocol)
 discard to current message. More...
 
template<class Proto >
stdx::expected< void, std::error_code > discard_current_msg (TlsSwitchableConnection< Proto > &conn)
 
void trace (Tracer::Event e)
 
Tracertracer ()
 
TraceEventtrace_span (TraceEvent *parent_span, const std::string_view &prefix)
 start a span. More...
 
void trace_span_end (TraceEvent *event, TraceEvent::StatusCode status_code=TraceEvent::StatusCode::kUnset)
 end a span and set a status-code. More...
 
TraceEventtrace_command (const std::string_view &prefix)
 start a command span. More...
 
TraceEventtrace_connect_and_forward_command (TraceEvent *parent_span)
 start a connect-and-forward span. More...
 
TraceEventtrace_connect (TraceEvent *parent_span)
 start a connect span. More...
 
void trace_set_connection_attributes (TraceEvent *ev)
 start a connect span. More...
 
TraceEventtrace_forward_command (TraceEvent *parent_span)
 start a forward span. More...
 
void trace_command_end (TraceEvent *event, TraceEvent::StatusCode status_code=TraceEvent::StatusCode::kUnset)
 end a command span and set a status-code. More...
 

Static Protected Member Functions

template<class T >
static bool message_can_be_forwarded_as_is (ClassicProtocolState &src_protocol, ClassicProtocolState &dst_protocol, const T &msg)
 check of the capabilities of the source and the destination are the same for this message. More...
 
static bool connect_error_is_transient (const classic_protocol::message::server::Error &err)
 check if the error is a transient error. More...
 
- Static Protected Member Functions inherited from Processor
static void log_fatal_error_code (const char *msg, std::error_code ec)
 log a message with error-code as error. More...
 

Private Attributes

classic_protocol::message::server::Error reconnect_error_ {}
 reconnect error set by lazy_reconnect_start(). More...
 

Additional Inherited Members

- Public Types inherited from BasicProcessor
enum class  Result {
  Again , RecvFromClient , SendToClient , RecvFromServer ,
  RecvFromBoth , SendToServer , SendableToServer , Suspend ,
  Done , Void
}
 
- Public Member Functions inherited from Processor
 BasicProcessor (MysqlRoutingClassicConnectionBase *conn)
 
- Public Member Functions inherited from BasicProcessor
 BasicProcessor (MysqlRoutingClassicConnectionBase *conn)
 
virtual ~BasicProcessor ()=default
 
const MysqlRoutingClassicConnectionBaseconnection () const
 
MysqlRoutingClassicConnectionBaseconnection ()
 
virtual stdx::expected< Result, std::error_code > process ()=0
 

Detailed Description

a processor base class with helper functions.

Member Function Documentation

◆ connect_error_is_transient()

bool ForwardingProcessor::connect_error_is_transient ( const classic_protocol::message::server::Error err)
staticprotected

check if the error is a transient error.

◆ forward_client_to_server()

stdx::expected< Processor::Result, std::error_code > ForwardingProcessor::forward_client_to_server ( bool  noflush = false)
protected

forward the current packet from the client-side to the server-side.

Pushes a ClientToServerForwarder to the processor-stack.

Parameters
noflushif true, it isn't required to wait until the packet is sent to the server.

◆ forward_server_to_client()

stdx::expected< Processor::Result, std::error_code > ForwardingProcessor::forward_server_to_client ( bool  noflush = false)
protected

forward the current packet from the server-side to the client-side.

use 'noflush' if the next message is from the server side too to allow merging of multiple server-side packets into one "send-to-client".

Useful for resultsets which is split into multiple packets.

Pushes a ServerToClientForwarder to the processor-stack.

Parameters
noflushif true, it isn't required to wait until the packet is sent to the client.

◆ message_can_be_forwarded_as_is()

template<class T >
static bool ForwardingProcessor::message_can_be_forwarded_as_is ( ClassicProtocolState src_protocol,
ClassicProtocolState dst_protocol,
const T &  msg 
)
inlinestaticprotected

check of the capabilities of the source and the destination are the same for this message.

Parameters
src_protocolthe source protocol state
dst_protocolthe destination protocol state
msgthe message that shall be forwarded
Return values
trueif the msg can be forwarded as is.

◆ mysql_reconnect_start()

stdx::expected< Processor::Result, std::error_code > ForwardingProcessor::mysql_reconnect_start ( TraceEvent parent_event)
protected

reconnect a mysql classic connection.

pushes a LazyConnector on the processor stack.

when finished, a mysql connection is authenticated.

◆ pool_server_connection()

stdx::expected< bool, std::error_code > ForwardingProcessor::pool_server_connection ( )
protected

move the server connection to the pool.

◆ reconnect_error() [1/2]

classic_protocol::message::server::Error ForwardingProcessor::reconnect_error ( ) const
inlineprotected

get the reconnect error.

◆ reconnect_error() [2/2]

void ForwardingProcessor::reconnect_error ( classic_protocol::message::server::Error  err)
inlineprotected

set the reconnect error.

may be called from handlers.

◆ reconnect_send_error_msg() [1/2]

stdx::expected< Processor::Result, std::error_code > ForwardingProcessor::reconnect_send_error_msg ( Channel src_channel,
ClassicProtocolState src_protocol 
)
protected

send a Error msg based on the reconnect_error().

Return values
Result::SendToClienton success.

◆ reconnect_send_error_msg() [2/2]

template<class Proto >
stdx::expected< Processor::Result, std::error_code > ForwardingProcessor::reconnect_send_error_msg ( TlsSwitchableConnection< Proto > &  conn)
inlineprotected

◆ recv_server_failed_and_check_client_socket()

stdx::expected< Processor::Result, std::error_code > ForwardingProcessor::recv_server_failed_and_check_client_socket ( std::error_code  ec)
protected

handle error-code of a failed receive() from the server-socket and check the status of the client socket.

◆ skip_or_inject_end_of_columns()

stdx::expected< Processor::Result, std::error_code > ForwardingProcessor::skip_or_inject_end_of_columns ( bool  no_flush = false)
protected

adjust the end-of-columns packet.

if source and destination don't have the same CLIENT_DEPRECATE_EOF, the Eof packet has to be add/removed between columns and rows.

Parameters
no_flushif the packet is forwarded, don't force a send as there is more data coming.

◆ socket_reconnect_start()

stdx::expected< Processor::Result, std::error_code > ForwardingProcessor::socket_reconnect_start ( TraceEvent parent_event)
protected

reconnect a socket.

pushes a ConnectProcessor on the processor stack.

when finished, a socket is established.

Return values
Result::Againon success.

Member Data Documentation

◆ kConnectRetryInterval

constexpr const std::chrono::milliseconds ForwardingProcessor::kConnectRetryInterval
staticconstexpr
Initial value:
{
std::chrono::milliseconds(100)}

interval between connect-retries.

◆ reconnect_error_

classic_protocol::message::server::Error ForwardingProcessor::reconnect_error_ {}
private

reconnect error set by lazy_reconnect_start().


The documentation for this class was generated from the following files: