Rename server_is_running() to server_is_usable()

The previous name was misleading. The new server_is_running() only
checks for the running bit so that a server is always either running
or down.
This commit is contained in:
Esa Korhonen
2018-07-27 13:20:47 +03:00
parent 89dfc80f86
commit 1e33ab69f2
11 changed files with 51 additions and 23 deletions

View File

@ -147,7 +147,7 @@ public:
*/ */
inline bool can_connect() const inline bool can_connect() const
{ {
return !has_failed() && server_is_running(m_backend->server); return !has_failed() && server_is_usable(m_backend->server);
} }
/** /**

View File

@ -202,9 +202,9 @@ typedef enum skygw_chk_t
(server_is_slave(s) ? "RUNNING SLAVE" : \ (server_is_slave(s) ? "RUNNING SLAVE" : \
(server_is_joined(s) ? "RUNNING JOINED" : \ (server_is_joined(s) ? "RUNNING JOINED" : \
(server_is_ndb(s) ? "RUNNING NDB" : \ (server_is_ndb(s) ? "RUNNING NDB" : \
((!server_is_down(s) && server_is_in_maint(s)) ? "RUNNING MAINTENANCE" : \ ((server_is_running(s) && server_is_in_maint(s)) ? "RUNNING MAINTENANCE" : \
(server_is_relay(s) ? "RUNNING RELAY" : \ (server_is_relay(s) ? "RUNNING RELAY" : \
(server_is_running(s) ? "RUNNING (only)" : \ (server_is_usable(s) ? "RUNNING (only)" : \
(server_is_down(s) ? "DOWN" : "UNKNOWN STATUS")))))))) (server_is_down(s) ? "DOWN" : "UNKNOWN STATUS"))))))))
#define STRTARGET(t) (t == TARGET_ALL ? "TARGET_ALL" : \ #define STRTARGET(t) (t == TARGET_ALL ? "TARGET_ALL" : \

View File

@ -205,16 +205,32 @@ inline bool server_is_active(const SERVER* server)
return server->is_active; return server->is_active;
} }
inline bool status_is_running(uint64_t status) inline bool status_is_usable(uint64_t status)
{ {
return (status & (SERVER_RUNNING | SERVER_MAINT)) == SERVER_RUNNING; return (status & (SERVER_RUNNING | SERVER_MAINT)) == SERVER_RUNNING;
} }
/**
* Is the server running and not in maintenance?
*
* @param server The server
* @return True, if server can be used.
*/
inline bool server_is_usable(const SERVER* server)
{
return status_is_usable(server->status);
}
inline bool status_is_running(uint64_t status)
{
return (status & SERVER_RUNNING);
}
/** /**
* Is the server running? * Is the server running?
* *
* @param server The server * @param server The server
* @return True, if monitor can connect to server. * @return True, if monitor can connect to the server.
*/ */
inline bool server_is_running(const SERVER* server) inline bool server_is_running(const SERVER* server)
{ {

View File

@ -1715,7 +1715,7 @@ void mon_hangup_failed_servers(MXS_MONITOR *monitor)
for (MXS_MONITORED_SERVER *ptr = monitor->monitored_servers; ptr; ptr = ptr->next) for (MXS_MONITORED_SERVER *ptr = monitor->monitored_servers; ptr; ptr = ptr->next)
{ {
if (mon_status_changed(ptr) && if (mon_status_changed(ptr) &&
(!(server_is_running(ptr->server)) || (!(server_is_usable(ptr->server)) ||
!(server_is_in_cluster(ptr->server)))) !(server_is_in_cluster(ptr->server))))
{ {
dcb_hangup_foreach(ptr->server); dcb_hangup_foreach(ptr->server);

View File

@ -539,7 +539,7 @@ MariaDBServer* MariaDBMonitor::find_topology_master_server(string* msg_out)
MariaDBServer* server = *iter; MariaDBServer* server = *iter;
if (server->m_node.parents.empty()) if (server->m_node.parents.empty())
{ {
if (server->is_running() && !server->is_read_only()) if (server->is_usable() && !server->is_read_only())
{ {
master_candidates.push_back(server); master_candidates.push_back(server);
} }
@ -624,7 +624,7 @@ MariaDBServer* MariaDBMonitor::find_master_inside_cycle(ServerArray& cycle_membe
{ {
MariaDBServer* server = *iter; MariaDBServer* server = *iter;
ss_dassert(server->m_node.cycle != NodeData::CYCLE_NONE); ss_dassert(server->m_node.cycle != NodeData::CYCLE_NONE);
if (server->is_running() && !server->is_read_only()) if (server->is_usable() && !server->is_read_only())
{ {
return server; return server;
} }
@ -798,7 +798,7 @@ void MariaDBMonitor::assign_slave_and_relay_master(MariaDBServer* start_node)
// The slave only gets the slave flags if it's running. // The slave only gets the slave flags if it's running.
// TODO: If slaves with broken links should be given different flags, add that here. // TODO: If slaves with broken links should be given different flags, add that here.
slave->clear_status(MASTER_BITS); slave->clear_status(MASTER_BITS);
if (slave->has_status(SERVER_RUNNING)) if (slave->is_running())
{ {
slave->set_status(SLAVE_BITS); slave->set_status(SLAVE_BITS);
} }

View File

@ -392,7 +392,7 @@ bool MariaDBMonitor::get_joinable_servers(ServerArray* output)
bool MariaDBMonitor::server_is_rejoin_suspect(MariaDBServer* rejoin_cand, json_t** output) bool MariaDBMonitor::server_is_rejoin_suspect(MariaDBServer* rejoin_cand, json_t** output)
{ {
bool is_suspect = false; bool is_suspect = false;
if (rejoin_cand->is_running() && !rejoin_cand->is_master()) if (rejoin_cand->is_usable() && !rejoin_cand->is_master())
{ {
// Has no slave connection, yet is not a master. // Has no slave connection, yet is not a master.
if (rejoin_cand->m_slave_status.empty()) if (rejoin_cand->m_slave_status.empty())
@ -1673,7 +1673,7 @@ void MariaDBMonitor::set_low_disk_slaves_maintenance()
// Only set pure slave and standalone servers to maintenance. // Only set pure slave and standalone servers to maintenance.
for (MariaDBServer* server : m_servers) for (MariaDBServer* server : m_servers)
{ {
if (server->has_status(SERVER_DISK_SPACE_EXHAUSTED) && server->is_running() && if (server->has_status(SERVER_DISK_SPACE_EXHAUSTED) && server->is_usable() &&
!server->is_master() && !server->is_relay_master()) !server->is_master() && !server->is_relay_master())
{ {
server->set_status(SERVER_MAINT); server->set_status(SERVER_MAINT);

View File

@ -443,6 +443,11 @@ bool MariaDBServer::is_slave() const
return status_is_slave(m_server_base->pending_status); return status_is_slave(m_server_base->pending_status);
} }
bool MariaDBServer::is_usable() const
{
return status_is_usable(m_server_base->pending_status);
}
bool MariaDBServer::is_running() const bool MariaDBServer::is_running() const
{ {
return status_is_running(m_server_base->pending_status); return status_is_running(m_server_base->pending_status);

View File

@ -229,35 +229,42 @@ public:
bool wait_until_gtid(const GtidList& target, int timeout, json_t** err_out); bool wait_until_gtid(const GtidList& target, int timeout, json_t** err_out);
/** /**
* Convenience method for SERVER_IS_MASTER * Check if server is a running master.
* *
* @return True if server is a master * @return True if server is a master
*/ */
bool is_master() const; bool is_master() const;
/** /**
* Convenience method for SERVER_IS_SLAVE * Check if server is a running slave.
* *
* @return True if server is a slave * @return True if server is a slave
*/ */
bool is_slave() const; bool is_slave() const;
/** /**
* Convenience method for SERVER_IS_RUNNING * Check if server is running and not in maintenance.
*
* @return True if server is usable
*/
bool is_usable() const;
/**
* Check if server is running.
* *
* @return True if server is running * @return True if server is running
*/ */
bool is_running() const; bool is_running() const;
/** /**
* Convenience method for SERVER_IS_DOWN * Check if server is down.
* *
* @return True if server is down * @return True if server is down
*/ */
bool is_down() const; bool is_down() const;
/** /**
* Convenience method for SERVER_IN_MAINT * Check if server is in maintenance.
*/ */
bool is_in_maintenance() const; bool is_in_maintenance() const;

View File

@ -320,7 +320,7 @@ newSession(MXS_ROUTER *instance, MXS_SESSION *session)
} }
/* Check server status bits against bitvalue from router_options */ /* Check server status bits against bitvalue from router_options */
if (ref && server_is_running(ref->server) && if (ref && server_is_usable(ref->server) &&
(ref->server->status & client_rses->bitmask & client_rses->bitvalue)) (ref->server->status & client_rses->bitmask & client_rses->bitvalue))
{ {
if (master_host) if (master_host)
@ -545,7 +545,7 @@ static inline bool connection_is_valid(ROUTER_INSTANCE* inst, ROUTER_CLIENT_SES*
// 'router_options=slave' in the configuration file and there was only // 'router_options=slave' in the configuration file and there was only
// the sole master available at session creation time. // the sole master available at session creation time.
if (server_is_running(router_cli_ses->backend->server) && if (server_is_usable(router_cli_ses->backend->server) &&
(router_cli_ses->backend->server->status & router_cli_ses->bitmask & router_cli_ses->bitvalue)) (router_cli_ses->backend->server->status & router_cli_ses->bitmask & router_cli_ses->bitvalue))
{ {
// Note the use of '==' and not '|'. We must use the former to exclude a // Note the use of '==' and not '|'. We must use the former to exclude a

View File

@ -130,7 +130,7 @@ bool connect_backend_servers(SSRBackendList& backends, MXS_SESSION* session)
{ {
SERVER_REF* b = (*it)->backend(); SERVER_REF* b = (*it)->backend();
if (server_is_running(b->server)) if (server_is_usable(b->server))
{ {
servers_found += 1; servers_found += 1;

View File

@ -209,7 +209,7 @@ SERVER* SchemaRouterSession::resolve_query_target(GWBUF* pPacket,
/** We either don't know or don't care where this query should go */ /** We either don't know or don't care where this query should go */
target = get_shard_target(pPacket, type); target = get_shard_target(pPacket, type);
if (target && server_is_running(target)) if (target && server_is_usable(target))
{ {
route_target = TARGET_NAMED_SERVER; route_target = TARGET_NAMED_SERVER;
} }
@ -236,7 +236,7 @@ SERVER* SchemaRouterSession::resolve_query_target(GWBUF* pPacket,
for (SSRBackendList::iterator it = m_backends.begin(); it != m_backends.end(); it++) for (SSRBackendList::iterator it = m_backends.begin(); it != m_backends.end(); it++)
{ {
SERVER *server = (*it)->backend()->server; SERVER *server = (*it)->backend()->server;
if (server_is_running(server)) if (server_is_usable(server))
{ {
route_target = TARGET_NAMED_SERVER; route_target = TARGET_NAMED_SERVER;
target = server; target = server;
@ -1405,7 +1405,7 @@ void SchemaRouterSession::query_databases()
for (SSRBackendList::iterator it = m_backends.begin(); it != m_backends.end(); it++) for (SSRBackendList::iterator it = m_backends.begin(); it != m_backends.end(); it++)
{ {
if ((*it)->in_use() && !(*it)->is_closed() & if ((*it)->in_use() && !(*it)->is_closed() &
server_is_running((*it)->backend()->server)) server_is_usable((*it)->backend()->server))
{ {
GWBUF* clone = gwbuf_clone(buffer); GWBUF* clone = gwbuf_clone(buffer);
MXS_ABORT_IF_NULL(clone); MXS_ABORT_IF_NULL(clone);
@ -1629,7 +1629,7 @@ bool SchemaRouterSession::get_shard_dcb(DCB** p_dcb, char* name)
*/ */
if ((*it)->in_use() && if ((*it)->in_use() &&
(strncasecmp(name, b->server->name, PATH_MAX) == 0) && (strncasecmp(name, b->server->name, PATH_MAX) == 0) &&
server_is_running(b->server)) server_is_usable(b->server))
{ {
*p_dcb = (*it)->dcb(); *p_dcb = (*it)->dcb();
succp = true; succp = true;