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:
@ -219,6 +219,27 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool is_closed() const;
|
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
|
* @brief Check if the backend has failed fatally
|
||||||
*
|
*
|
||||||
|
@ -279,6 +279,21 @@ bool Backend::is_closed() const
|
|||||||
return m_closed;
|
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
|
bool Backend::has_failed() const
|
||||||
{
|
{
|
||||||
return m_state & FATAL_FAILURE;
|
return m_state & FATAL_FAILURE;
|
||||||
|
@ -354,8 +354,8 @@ static bool reroute_stored_statement(ROUTER_CLIENT_SES *rses, const SRWBackend&
|
|||||||
SRWBackend& backend = *it;
|
SRWBackend& backend = *it;
|
||||||
|
|
||||||
if (backend->in_use() && backend != old &&
|
if (backend->in_use() && backend != old &&
|
||||||
!SERVER_IS_MASTER(backend->server()) &&
|
!backend->is_master() &&
|
||||||
SERVER_IS_SLAVE(backend->server()))
|
backend->is_slave())
|
||||||
{
|
{
|
||||||
/** Found a valid candidate; a non-master slave that's in use */
|
/** Found a valid candidate; a non-master slave that's in use */
|
||||||
if (backend->write(stored))
|
if (backend->write(stored))
|
||||||
|
@ -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",
|
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);
|
backend->server()->name, backend->server()->port);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -355,9 +355,9 @@ SRWBackend get_target_backend(ROUTER_CLIENT_SES *rses, backend_type_t btype,
|
|||||||
|
|
||||||
if (backend->in_use() && backend->is_active() &&
|
if (backend->in_use() && backend->is_active() &&
|
||||||
(strcasecmp(name, backend->server()->unique_name) == 0) &&
|
(strcasecmp(name, backend->server()->unique_name) == 0) &&
|
||||||
(SERVER_IS_SLAVE(backend->server()) ||
|
(backend->is_slave() ||
|
||||||
SERVER_IS_RELAY_SERVER(backend->server()) ||
|
backend->is_relay() ||
|
||||||
SERVER_IS_MASTER(backend->server())))
|
backend->is_master()))
|
||||||
{
|
{
|
||||||
return backend;
|
return backend;
|
||||||
}
|
}
|
||||||
@ -381,7 +381,7 @@ SRWBackend get_target_backend(ROUTER_CLIENT_SES *rses, backend_type_t btype,
|
|||||||
* slave can't be used
|
* slave can't be used
|
||||||
*/
|
*/
|
||||||
if (!backend->in_use() || !backend->is_active() ||
|
if (!backend->in_use() || !backend->is_active() ||
|
||||||
(!SERVER_IS_MASTER(backend->server()) && !SERVER_IS_SLAVE(backend->server())))
|
(!backend->is_master() && !backend->is_slave()))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -395,7 +395,7 @@ SRWBackend get_target_backend(ROUTER_CLIENT_SES *rses, backend_type_t btype,
|
|||||||
* Ensure that master has not changed during
|
* Ensure that master has not changed during
|
||||||
* session and abort if it has.
|
* 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 */
|
/** found master */
|
||||||
rval = backend;
|
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
|
* If candidate is master, any slave which doesn't break
|
||||||
* replication lag limits replaces it.
|
* replication lag limits replaces it.
|
||||||
*/
|
*/
|
||||||
else if (SERVER_IS_MASTER(rval->server()) &&
|
else if (rval->is_master() && backend->is_slave() &&
|
||||||
SERVER_IS_SLAVE(backend->server()) &&
|
|
||||||
(max_rlag == MAX_RLAG_UNDEFINED ||
|
(max_rlag == MAX_RLAG_UNDEFINED ||
|
||||||
(backend->server()->rlag != MAX_RLAG_NOT_AVAILABLE &&
|
(backend->server()->rlag != MAX_RLAG_NOT_AVAILABLE &&
|
||||||
backend->server()->rlag <= max_rlag)) &&
|
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
|
* backend and update assign it to new candidate if
|
||||||
* necessary.
|
* necessary.
|
||||||
*/
|
*/
|
||||||
else if (SERVER_IS_SLAVE(backend->server()) ||
|
else if (backend->is_slave() ||
|
||||||
(rses->rses_config.master_accept_reads &&
|
(rses->rses_config.master_accept_reads &&
|
||||||
SERVER_IS_MASTER(backend->server())))
|
backend->is_master()))
|
||||||
{
|
{
|
||||||
if (max_rlag == MAX_RLAG_UNDEFINED ||
|
if (max_rlag == MAX_RLAG_UNDEFINED ||
|
||||||
(backend->server()->rlag != MAX_RLAG_NOT_AVAILABLE &&
|
(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 <",
|
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);
|
target->server()->name, target->server()->port);
|
||||||
|
|
||||||
/** The session command cursor must not be active */
|
/** 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;
|
master.status = backend->server()->status;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SERVER_IS_MASTER(backend->server()))
|
if (backend->is_master())
|
||||||
{
|
{
|
||||||
if (!candidate ||
|
if (!candidate ||
|
||||||
(backend->server()->depth < candidate->server()->depth))
|
(backend->server()->depth < candidate->server()->depth))
|
||||||
|
Reference in New Issue
Block a user