Clean up functions that use SRWBackend

Return values instead of objects. This removes the need to handle cases
where a reference to a "debug value" is returned.

Return SRWBackend values instead of passing output references. This
doubles as a false boolan return value when an empty reference is
returned.
This commit is contained in:
Markus Mäkelä
2017-06-19 11:36:14 +03:00
parent e5f6d00fda
commit ae1cdea802
4 changed files with 71 additions and 82 deletions

View File

@ -146,14 +146,6 @@ int rses_get_max_replication_lag(ROUTER_CLIENT_SES *rses)
return conf_max_rlag;
}
namespace
{
/** This will never get used but it should catch faults in the code */
static SRWBackend no_backend;
}
/**
* @brief Find a back end reference that matches the given DCB
*
@ -165,7 +157,7 @@ static SRWBackend no_backend;
*
* @return backend reference pointer if succeed or NULL
*/
SRWBackend& get_bref_from_dcb(ROUTER_CLIENT_SES *rses, DCB *dcb)
SRWBackend get_bref_from_dcb(ROUTER_CLIENT_SES *rses, DCB *dcb)
{
ss_dassert(dcb->dcb_role == DCB_ROLE_BACKEND_HANDLER);
CHK_DCB(dcb);
@ -184,7 +176,7 @@ SRWBackend& get_bref_from_dcb(ROUTER_CLIENT_SES *rses, DCB *dcb)
/** We should always have a valid backend reference */
ss_dassert(false);
return no_backend;
return SRWBackend();
}
/**
@ -335,7 +327,7 @@ static void handle_error_reply_client(MXS_SESSION *ses, ROUTER_CLIENT_SES *rses,
mxs_session_state_t sesstate = ses->state;
DCB *client_dcb = ses->client_dcb;
SRWBackend& bref = get_bref_from_dcb(rses, backend_dcb);
SRWBackend bref = get_bref_from_dcb(rses, backend_dcb);
bref->close();
@ -346,7 +338,7 @@ static void handle_error_reply_client(MXS_SESSION *ses, ROUTER_CLIENT_SES *rses,
}
}
static bool reroute_stored_statement(ROUTER_CLIENT_SES *rses, SRWBackend& old, GWBUF *stored)
static bool reroute_stored_statement(ROUTER_CLIENT_SES *rses, const SRWBackend& old, GWBUF *stored)
{
bool success = false;
@ -420,7 +412,7 @@ static bool handle_error_new_connection(ROUTER_INSTANCE *inst,
DCB *backend_dcb, GWBUF *errmsg)
{
ROUTER_CLIENT_SES *myrses = *rses;
SRWBackend& bref = get_bref_from_dcb(myrses, backend_dcb);
SRWBackend bref = get_bref_from_dcb(myrses, backend_dcb);
MXS_SESSION* ses = backend_dcb->session;
CHK_SESSION(ses);
@ -486,7 +478,8 @@ static bool handle_error_new_connection(ROUTER_INSTANCE *inst,
{
succp = select_connect_backend_servers(myrses->rses_nbackends, max_nslaves,
myrses->rses_config.slave_selection_criteria,
ses, inst, myrses, true);
ses, inst, myrses,
connection_type::SLAVE);
}
return succp;
@ -596,7 +589,7 @@ bool route_stored_query(ROUTER_CLIENT_SES *rses)
*
* @return True if the complete response has been received
*/
bool reply_is_complete(SRWBackend& bref, GWBUF *buffer)
bool reply_is_complete(SRWBackend bref, GWBUF *buffer)
{
mysql_server_cmd_t cmd = mxs_mysql_current_command(bref->dcb()->session);
@ -802,7 +795,8 @@ static MXS_ROUTER_SESSION *newSession(MXS_ROUTER *router_inst, MXS_SESSION *sess
if (!select_connect_backend_servers(router_nservers, max_nslaves,
client_rses->rses_config.slave_selection_criteria,
session, router, client_rses, false))
session, router, client_rses,
connection_type::ALL))
{
/**
* Master and at least <min_nslaves> slaves must be found if the router is
@ -1114,7 +1108,7 @@ static void clientReply(MXS_ROUTER *instance,
* and
*/
SRWBackend& bref = get_bref_from_dcb(router_cli_ses, backend_dcb);
SRWBackend bref = get_bref_from_dcb(router_cli_ses, backend_dcb);
/** Statement was successfully executed, free the stored statement */
session_clear_stmt(backend_dcb->session);
@ -1154,7 +1148,7 @@ static void clientReply(MXS_ROUTER *instance,
router_cli_ses->client_dcb->session,
router_cli_ses->router,
router_cli_ses,
true);
connection_type::SLAVE);
}
}
@ -1256,7 +1250,7 @@ static void handleError(MXS_ROUTER *instance,
MXS_SESSION *session = problem_dcb->session;
ss_dassert(session);
SRWBackend& bref = get_bref_from_dcb(rses, problem_dcb);
SRWBackend bref = get_bref_from_dcb(rses, problem_dcb);
switch (action)
{