Add server state helper functions

Added helper functions that check various server states. This makes the
readwritesplit code easier to read as the function names convey the
intention better than the macro invokations.
This commit is contained in:
Markus Mäkelä 2017-06-19 13:30:53 +03:00
parent 37b6cf250d
commit d7543988ee
4 changed files with 49 additions and 14 deletions

View File

@ -219,6 +219,27 @@ public:
*/
bool is_closed() const;
/**
* @brief Check if the server is a master
*
* @return True if server is a master
*/
bool is_master() const;
/**
* @brief Check if the server is a slave
*
* @return True if the server is a slave
*/
bool is_slave() const;
/**
* @brief Check if the server is a relay server
*
* @return True if the server is a relay server
*/
bool is_relay() const;
/**
* @brief Check if the backend has failed fatally
*

View File

@ -279,6 +279,21 @@ bool Backend::is_closed() const
return m_closed;
}
bool Backend::is_master() const
{
return SERVER_IS_MASTER(m_backend->server);
}
bool Backend::is_slave() const
{
return SERVER_IS_SLAVE(m_backend->server);
}
bool Backend::is_relay() const
{
return SERVER_IS_RELAY_SERVER(m_backend->server);
}
bool Backend::has_failed() const
{
return m_state & FATAL_FAILURE;

View File

@ -354,8 +354,8 @@ static bool reroute_stored_statement(ROUTER_CLIENT_SES *rses, const SRWBackend&
SRWBackend& backend = *it;
if (backend->in_use() && backend != old &&
!SERVER_IS_MASTER(backend->server()) &&
SERVER_IS_SLAVE(backend->server()))
!backend->is_master() &&
backend->is_slave())
{
/** Found a valid candidate; a non-master slave that's in use */
if (backend->write(stored))

View File

@ -269,7 +269,7 @@ bool route_session_write(ROUTER_CLIENT_SES *rses, GWBUF *querybuf, uint8_t comma
}
MXS_INFO("Route query to %s \t[%s]:%d",
SERVER_IS_MASTER(backend->server()) ? "master" : "slave",
backend->is_master() ? "master" : "slave",
backend->server()->name, backend->server()->port);
}
else
@ -355,9 +355,9 @@ SRWBackend get_target_backend(ROUTER_CLIENT_SES *rses, backend_type_t btype,
if (backend->in_use() && backend->is_active() &&
(strcasecmp(name, backend->server()->unique_name) == 0) &&
(SERVER_IS_SLAVE(backend->server()) ||
SERVER_IS_RELAY_SERVER(backend->server()) ||
SERVER_IS_MASTER(backend->server())))
(backend->is_slave() ||
backend->is_relay() ||
backend->is_master()))
{
return backend;
}
@ -381,7 +381,7 @@ SRWBackend get_target_backend(ROUTER_CLIENT_SES *rses, backend_type_t btype,
* slave can't be used
*/
if (!backend->in_use() || !backend->is_active() ||
(!SERVER_IS_MASTER(backend->server()) && !SERVER_IS_SLAVE(backend->server())))
(!backend->is_master() && !backend->is_slave()))
{
continue;
}
@ -395,7 +395,7 @@ SRWBackend get_target_backend(ROUTER_CLIENT_SES *rses, backend_type_t btype,
* Ensure that master has not changed during
* session and abort if it has.
*/
if (SERVER_IS_MASTER(backend->server()) && backend == rses->current_master)
if (backend->is_master() && backend == rses->current_master)
{
/** found master */
rval = backend;
@ -417,8 +417,7 @@ SRWBackend get_target_backend(ROUTER_CLIENT_SES *rses, backend_type_t btype,
* If candidate is master, any slave which doesn't break
* replication lag limits replaces it.
*/
else if (SERVER_IS_MASTER(rval->server()) &&
SERVER_IS_SLAVE(backend->server()) &&
else if (rval->is_master() && backend->is_slave() &&
(max_rlag == MAX_RLAG_UNDEFINED ||
(backend->server()->rlag != MAX_RLAG_NOT_AVAILABLE &&
backend->server()->rlag <= max_rlag)) &&
@ -432,9 +431,9 @@ SRWBackend get_target_backend(ROUTER_CLIENT_SES *rses, backend_type_t btype,
* backend and update assign it to new candidate if
* necessary.
*/
else if (SERVER_IS_SLAVE(backend->server()) ||
else if (backend->is_slave() ||
(rses->rses_config.master_accept_reads &&
SERVER_IS_MASTER(backend->server())))
backend->is_master()))
{
if (max_rlag == MAX_RLAG_UNDEFINED ||
(backend->server()->rlag != MAX_RLAG_NOT_AVAILABLE &&
@ -1029,7 +1028,7 @@ handle_got_target(ROUTER_INSTANCE *inst, ROUTER_CLIENT_SES *rses,
}
MXS_INFO("Route query to %s \t[%s]:%d <",
(SERVER_IS_MASTER(target->server()) ? "master" : "slave"),
(target->is_master() ? "master" : "slave"),
target->server()->name, target->server()->port);
/** The session command cursor must not be active */
@ -1131,7 +1130,7 @@ static SRWBackend get_root_master_backend(ROUTER_CLIENT_SES *rses)
master.status = backend->server()->status;
}
if (SERVER_IS_MASTER(backend->server()))
if (backend->is_master())
{
if (!candidate ||
(backend->server()->depth < candidate->server()->depth))