diff --git a/include/maxscale/backend.hh b/include/maxscale/backend.hh index ec0f2c5b9..4b5273a54 100644 --- a/include/maxscale/backend.hh +++ b/include/maxscale/backend.hh @@ -148,7 +148,7 @@ public: */ inline bool can_connect() const { - return !has_failed() && server_is_usable(m_backend->server); + return !has_failed() && m_backend->server->is_usable(); } /** @@ -266,7 +266,7 @@ public: */ inline bool is_master() const { - return server_is_master(m_backend->server); + return m_backend->server->is_master(); } /** @@ -276,7 +276,7 @@ public: */ inline bool is_slave() const { - return server_is_slave(m_backend->server); + return m_backend->server->is_slave(); } /** @@ -286,7 +286,7 @@ public: */ inline bool is_relay() const { - return server_is_relay(m_backend->server); + return m_backend->server->is_relay(); } /** diff --git a/include/maxscale/server.hh b/include/maxscale/server.hh index 67f5e80d2..aa7321f09 100644 --- a/include/maxscale/server.hh +++ b/include/maxscale/server.hh @@ -294,13 +294,118 @@ public: /** * Is the server valid and active? TODO: Rename once "is_active" is moved to internal class. * - * @return True, if server has not been removed from the runtime configuration. + * @return True if server has not been removed from the runtime configuration. */ bool server_is_active() const { return is_active; } + /** + * Is the server running and not in maintenance? + * + * @return True if server can be used. + */ + bool is_usable() const + { + return status_is_usable(status); + } + + /** + * Is the server running? + * + * @return True if monitor can connect to the server. + */ + bool is_running() const + { + return status_is_running(status); + } + + /** + * Is the server down? + * + * @return True if monitor cannot connect to the server. + */ + bool is_down() const + { + return status_is_down(status); + } + + /** + * Is the server in maintenance mode? + * + * @return True if server is in maintenance. + */ + bool is_in_maint() const + { + return status_is_in_maint(status); + } + + /** + * Is the server a master? + * + * @return True if server is running and marked as master. + */ + bool is_master() const + { + return status_is_master(status); + } + + /** + * Is the server a slave. + * + * @return True if server is running and marked as slave. + */ + bool is_slave() const + { + return status_is_slave(status); + } + + /** + * Is the server a relay slave? + * + * @return True, if server is a running relay. + */ + bool is_relay() const + { + return status_is_relay(status); + } + + /** + * Is the server joined Galera node? + * + * @return True, if server is running and joined. + */ + bool is_joined() const + { + return status_is_joined(status); + } + + /** + * Is the server a SQL node in MySQL Cluster? + * + * @return True, if server is running and with NDB status. + */ + bool is_ndb() const + { + return status_is_ndb(status); + } + + bool is_in_cluster() const + { + return (status & (SERVER_MASTER | SERVER_SLAVE | SERVER_RELAY | SERVER_JOINED | SERVER_NDB)) != 0; + } + + bool is_slave_of_ext_master() const + { + return status_is_slave_of_ext_master(status); + } + + bool is_low_on_disk_space() const + { + return status_is_disk_space_exhausted(status); + } + protected: SERVER() { @@ -309,111 +414,6 @@ private: static const int DEFAULT_CHARSET = 0x08; /** The latin1 charset */ }; -/** - * 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); -} - - - -/** - * Is the server running? - * - * @param server The server - * @return True, if monitor can connect to the server. - */ -inline bool server_is_running(const SERVER* server) -{ - return status_is_running(server->status); -} - -/** - * Is the server down? - * - * @param server The server - * @return True, if monitor cannot connect to the server. - */ -inline bool server_is_down(const SERVER* server) -{ - return status_is_down(server->status); -} - -/** - * Is the server in maintenance mode? - * - * @param server The server - * @return True, if server is in maintenance. - */ -inline bool server_is_in_maint(const SERVER* server) -{ - return status_is_in_maint(server->status); -} - -/** - * Is the server a master? - * - * @param server The server - * @return True, if server is running and marked as master. - */ -inline bool server_is_master(const SERVER* server) -{ - return status_is_master(server->status); -} - -/** - * Is the server a slave. - * - * @param server The server - * @return True if server is running and marked as slave. - */ -inline bool server_is_slave(const SERVER* server) -{ - return status_is_slave(server->status); -} - -inline bool server_is_relay(const SERVER* server) -{ - return status_is_relay(server->status); -} - -/** - * Is the server joined Galera node? The server must be running and joined. - */ -inline bool server_is_joined(const SERVER* server) -{ - return status_is_joined(server->status); -} - -/** - * Is the server a SQL node in MySQL Cluster? The server must be running and with NDB status - */ -inline bool server_is_ndb(const SERVER* server) -{ - return status_is_ndb(server->status); -} - -inline bool server_is_in_cluster(const SERVER* server) -{ - return (server->status - & (SERVER_MASTER | SERVER_SLAVE | SERVER_RELAY | SERVER_JOINED | SERVER_NDB)) != 0; -} - -inline bool server_is_slave_of_ext_master(const SERVER* server) -{ - return status_is_slave_of_ext_master(server->status); -} - -inline bool server_is_disk_space_exhausted(const SERVER* server) -{ - return status_is_disk_space_exhausted(server->status); -} - /** * @brief Add a server parameter * diff --git a/server/core/monitor.cc b/server/core/monitor.cc index 1144d7618..2b8a81761 100644 --- a/server/core/monitor.cc +++ b/server/core/monitor.cc @@ -1227,7 +1227,7 @@ bool mon_status_changed(MXS_MONITORED_SERVER* mon_srv) */ bool mon_print_fail_status(MXS_MONITORED_SERVER* mon_srv) { - return server_is_down(mon_srv->server) && mon_srv->mon_err_count == 0; + return mon_srv->server->is_down() && mon_srv->mon_err_count == 0; } static MXS_MONITORED_SERVER* find_parent_node(MXS_MONITORED_SERVER* servers, @@ -1668,9 +1668,7 @@ void mon_hangup_failed_servers(MXS_MONITOR* monitor) { for (MXS_MONITORED_SERVER* ptr = monitor->monitored_servers; ptr; ptr = ptr->next) { - if (mon_status_changed(ptr) - && (!(server_is_usable(ptr->server)) - || !(server_is_in_cluster(ptr->server)))) + if (mon_status_changed(ptr) && (!(ptr->server->is_usable()) || !(ptr->server->is_in_cluster()))) { dcb_hangup_foreach(ptr->server); } @@ -2782,7 +2780,7 @@ void MonitorInstance::flush_server_status() { for (MXS_MONITORED_SERVER* pMs = m_monitor->monitored_servers; pMs; pMs = pMs->next) { - if (!server_is_in_maint(pMs->server)) + if (!pMs->server->is_in_maint()) { pMs->server->status = pMs->pending_status; } @@ -2803,7 +2801,7 @@ void MonitorInstanceSimple::tick() for (MXS_MONITORED_SERVER* pMs = m_monitor->monitored_servers; pMs; pMs = pMs->next) { - if (!server_is_in_maint(pMs->server)) + if (!pMs->server->is_in_maint()) { pMs->mon_prev_status = pMs->server->status; pMs->pending_status = pMs->server->status; @@ -2858,7 +2856,7 @@ void MonitorInstanceSimple::tick() } #endif - if (server_is_down(pMs->server)) + if (pMs->server->is_down()) { pMs->mon_err_count += 1; } diff --git a/server/core/server.cc b/server/core/server.cc index b4d3c4d33..886bff1dc 100644 --- a/server/core/server.cc +++ b/server/core/server.cc @@ -518,7 +518,7 @@ void Server::print_to_dcb(DCB* dcb) const mon_get_event_name((mxs_monitor_event_t)server->last_event)); time_t t = maxscale_started() + MXS_CLOCK_TO_SEC(server->triggered_at); dcb_printf(dcb, "\tTriggered at: %s\n", http_to_date(t).c_str()); - if (server_is_slave(server) || server_is_relay(server)) + if (server->is_slave() || server->is_relay()) { if (server->rlag >= 0) { @@ -731,7 +731,7 @@ void server_set_status_nolock(SERVER* server, uint64_t bit) server->status |= bit; /** clear error logged flag before the next failure */ - if (server_is_master(server)) + if (server->is_master()) { server->master_err_is_logged = false; } diff --git a/server/modules/authenticator/MySQLAuth/dbusers.cc b/server/modules/authenticator/MySQLAuth/dbusers.cc index a3e68f8f5..af34854c7 100644 --- a/server/modules/authenticator/MySQLAuth/dbusers.cc +++ b/server/modules/authenticator/MySQLAuth/dbusers.cc @@ -1222,7 +1222,7 @@ static int get_users(Listener* listener, bool skip_local) { if (!server_ref_is_active(server) || !server->server->server_is_active() || (skip_local && server_is_mxs_service(server->server)) - || !server_is_running(server->server)) + || !server->server->is_running()) { continue; } diff --git a/server/modules/monitor/galeramon/galeramon.cc b/server/modules/monitor/galeramon/galeramon.cc index cac9a217d..d1bc65cee 100644 --- a/server/modules/monitor/galeramon/galeramon.cc +++ b/server/modules/monitor/galeramon/galeramon.cc @@ -371,7 +371,7 @@ MXS_MONITORED_SERVER* GaleraMonitor::get_candidate_master() /* set min_id to the lowest value of moitor_servers->server->node_id */ while (moitor_servers) { - if (!server_is_in_maint(moitor_servers->server) + if (!moitor_servers->server->is_in_maint() && (moitor_servers->pending_status & SERVER_JOINED)) { if (m_use_priority) @@ -454,7 +454,7 @@ static MXS_MONITORED_SERVER* set_cluster_master(MXS_MONITORED_SERVER* current_ma * */ if ((current_master->pending_status & SERVER_JOINED) - && (!server_is_in_maint(current_master->server))) + && (!current_master->server->is_in_maint())) { return current_master; } diff --git a/server/modules/monitor/mariadbmon/cluster_manipulation.cc b/server/modules/monitor/mariadbmon/cluster_manipulation.cc index 3e3848513..b71a4a1dd 100644 --- a/server/modules/monitor/mariadbmon/cluster_manipulation.cc +++ b/server/modules/monitor/mariadbmon/cluster_manipulation.cc @@ -1276,8 +1276,8 @@ bool MariaDBMonitor::is_candidate_better(const MariaDBServer* candidate, const M // If both have log_slave_updates on ... else if (cand_updates && curr_updates) { - bool cand_disk_ok = !server_is_disk_space_exhausted(candidate->m_server_base->server); - bool curr_disk_ok = !server_is_disk_space_exhausted(current_best->m_server_base->server); + bool cand_disk_ok = !candidate->m_server_base->server->is_low_on_disk_space(); + bool curr_disk_ok = !current_best->m_server_base->server->is_low_on_disk_space(); // ... prefer a slave without disk space issues. if (cand_disk_ok && !curr_disk_ok) { diff --git a/server/modules/monitor/mmmon/mmmon.cc b/server/modules/monitor/mmmon/mmmon.cc index 2547da633..0e7e2f8f8 100644 --- a/server/modules/monitor/mmmon/mmmon.cc +++ b/server/modules/monitor/mmmon/mmmon.cc @@ -324,7 +324,7 @@ void MMMonitor::post_tick() for (MXS_MONITORED_SERVER* ptr = m_monitor->monitored_servers; ptr; ptr = ptr->next) { - if (!server_is_in_maint(ptr->server)) + if (!ptr->server->is_in_maint()) { /* If "detect_stale_master" option is On, let's use the previus master */ if (m_detectStaleMaster && root_master @@ -375,7 +375,7 @@ MXS_MONITORED_SERVER* MMMonitor::get_current_master() * that means SERVER_IS_RUNNING returns 0 * Let's check only for SERVER_IS_DOWN: server is not running */ - if (server_is_down(ptr->server)) + if (ptr->server->is_down()) { ptr = ptr->next; continue; @@ -397,7 +397,7 @@ MXS_MONITORED_SERVER* MMMonitor::get_current_master() if (m_master != NULL) { /* If the root master is in MAINT, return NULL */ - if (server_is_in_maint(m_master->server)) + if (m_master->server->is_in_maint()) { return NULL; } diff --git a/server/modules/routing/hintrouter/hintrouter.cc b/server/modules/routing/hintrouter/hintrouter.cc index 722a2c9ea..88e2efc34 100644 --- a/server/modules/routing/hintrouter/hintrouter.cc +++ b/server/modules/routing/hintrouter/hintrouter.cc @@ -87,7 +87,7 @@ HintRouterSession* HintRouter::newSession(MXS_SESSION* pSession) { if (server_ref_is_active(pSref)) { - if (server_is_master(pSref->server)) + if (pSref->server->is_master()) { if (!master_ref) { @@ -98,7 +98,7 @@ HintRouterSession* HintRouter::newSession(MXS_SESSION* pSession) MXS_WARNING("Found multiple master servers when creating session.\n"); } } - else if (server_is_slave(pSref->server)) + else if (pSref->server->is_slave()) { slave_refs.push_back(pSref); } diff --git a/server/modules/routing/hintrouter/hintroutersession.cc b/server/modules/routing/hintrouter/hintroutersession.cc index 68f1e7bff..d5fa63ac9 100644 --- a/server/modules/routing/hintrouter/hintroutersession.cc +++ b/server/modules/routing/hintrouter/hintroutersession.cc @@ -204,7 +204,7 @@ bool HintRouterSession::route_by_hint(GWBUF* pPacket, HINT* hint, bool print_err { bool master_ok = false; // The master server should be already known, but may have changed - if (m_master.get() && server_is_master(m_master.server())) + if (m_master.get() && m_master.server()->is_master()) { master_ok = true; } @@ -317,7 +317,7 @@ bool HintRouterSession::route_to_slave(GWBUF* pPacket, bool print_errors) for (size_type curr = begin; curr != limit; curr++) { Dcb& candidate = m_slaves.at(curr % size); - if (server_is_slave(candidate.server())) + if (candidate.server()->is_slave()) { HR_DEBUG("Writing packet to slave: '%s'.", candidate.server()->name()); success = candidate.write(pPacket); @@ -392,7 +392,7 @@ void HintRouterSession::update_connections() iter != m_backends.end(); iter++) { SERVER* server = iter->second.get()->server; - if (server_is_master(server)) + if (server->is_master()) { if (!m_master.get()) { @@ -403,7 +403,7 @@ void HintRouterSession::update_connections() MXS_WARNING("Found multiple master servers when updating connections."); } } - else if (server_is_slave(server)) + else if (server->is_slave()) { m_slaves.push_back(iter->second); } diff --git a/server/modules/routing/readconnroute/readconnroute.cc b/server/modules/routing/readconnroute/readconnroute.cc index 5072bed96..fd2ce0f95 100644 --- a/server/modules/routing/readconnroute/readconnroute.cc +++ b/server/modules/routing/readconnroute/readconnroute.cc @@ -315,13 +315,13 @@ static MXS_ROUTER_SESSION* newSession(MXS_ROUTER* instance, MXS_SESSION* session */ for (SERVER_REF* ref = inst->service->dbref; ref; ref = ref->next) { - if (!server_ref_is_active(ref) || server_is_in_maint(ref->server)) + if (!server_ref_is_active(ref) || ref->server->is_in_maint()) { continue; } /* Check server status bits against bitvalue from router_options */ - if (ref && server_is_usable(ref->server) + if (ref && ref->server->is_usable() && (ref->server->status & client_rses->bitmask & client_rses->bitvalue)) { if (master_host) @@ -481,11 +481,11 @@ static void log_closed_session(mxs_mysql_cmd_t mysql_command, SERVER_REF* ref) { char msg[SERVER::MAX_ADDRESS_LEN + 200] = ""; // Extra space for message - if (server_is_down(ref->server)) + if (ref->server->is_down()) { sprintf(msg, "Server '%s' is down.", ref->server->name()); } - else if (server_is_in_maint(ref->server)) + else if (ref->server->is_in_maint()) { sprintf(msg, "Server '%s' is in maintenance.", ref->server->name()); } @@ -513,7 +513,7 @@ static inline bool connection_is_valid(ROUTER_INSTANCE* inst, ROUTER_CLIENT_SES* // 'router_options=slave' in the configuration file and there was only // the sole master available at session creation time. - if (server_is_usable(router_cli_ses->backend->server) + if (router_cli_ses->backend->server->is_usable() && (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 @@ -737,7 +737,7 @@ static SERVER_REF* get_root_master(SERVER_REF* servers) SERVER_REF* master_host = NULL; for (SERVER_REF* ref = servers; ref; ref = ref->next) { - if (ref->active && server_is_master(ref->server)) + if (ref->active && ref->server->is_master()) { // No master found yet or this one has better weight. if (master_host == NULL || ref->server_weight > master_host->server_weight) diff --git a/server/modules/routing/readwritesplit/readwritesplit.hh b/server/modules/routing/readwritesplit/readwritesplit.hh index 965ffdd13..e168c331f 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.hh +++ b/server/modules/routing/readwritesplit/readwritesplit.hh @@ -118,10 +118,6 @@ static const MXS_ENUM_VALUE master_failure_mode_values[] = #define CONFIG_MAX_SLAVE_RLAG -1 /**< not used */ #define CONFIG_SQL_VARIABLES_IN TYPE_ALL -#define BACKEND_TYPE(b) \ - (server_is_master((b)->backend_server) ? BE_MASTER \ - : (server_is_slave((b)->backend_server) ? BE_SLAVE : BE_UNDEFINED)); - #define MARIADB_WAIT_GTID_FUNC "MASTER_GTID_WAIT" #define MYSQL_WAIT_GTID_FUNC "WAIT_FOR_EXECUTED_GTID_SET" static const char gtid_wait_stmt[] = diff --git a/server/modules/routing/schemarouter/schemarouterinstance.cc b/server/modules/routing/schemarouter/schemarouterinstance.cc index f93375b97..6d6ca2bd7 100644 --- a/server/modules/routing/schemarouter/schemarouterinstance.cc +++ b/server/modules/routing/schemarouter/schemarouterinstance.cc @@ -127,7 +127,7 @@ bool connect_backend_servers(SSRBackendList& backends, MXS_SESSION* session) { SERVER_REF* b = (*it)->backend(); - if (server_is_usable(b->server)) + if (b->server->is_usable()) { servers_found += 1; diff --git a/server/modules/routing/schemarouter/schemaroutersession.cc b/server/modules/routing/schemarouter/schemaroutersession.cc index 8475abf86..a0ec8ec0f 100644 --- a/server/modules/routing/schemarouter/schemaroutersession.cc +++ b/server/modules/routing/schemarouter/schemaroutersession.cc @@ -214,7 +214,7 @@ SERVER* SchemaRouterSession::resolve_query_target(GWBUF* pPacket, /** We either don't know or don't care where this query should go */ target = get_shard_target(pPacket, type); - if (target && server_is_usable(target)) + if (target && target->is_usable()) { route_target = TARGET_NAMED_SERVER; } @@ -241,7 +241,7 @@ SERVER* SchemaRouterSession::resolve_query_target(GWBUF* pPacket, for (SSRBackendList::iterator it = m_backends.begin(); it != m_backends.end(); it++) { SERVER* server = (*it)->backend()->server; - if (server_is_usable(server)) + if (server->is_usable()) { route_target = TARGET_NAMED_SERVER; target = server; @@ -762,7 +762,7 @@ bool SchemaRouterSession::route_session_write(GWBUF* querybuf, uint8_t command) if (mxs_log_is_priority_enabled(LOG_INFO)) { MXS_INFO("Route query to %s\t%s:%d", - server_is_master((*it)->backend()->server) ? "master" : "slave", + (*it)->backend()->server->is_master() ? "master" : "slave", (*it)->backend()->server->address, (*it)->backend()->server->port); } @@ -1393,7 +1393,7 @@ void SchemaRouterSession::query_databases() for (SSRBackendList::iterator it = m_backends.begin(); it != m_backends.end(); it++) { - if ((*it)->in_use() && !(*it)->is_closed() && server_is_usable((*it)->backend()->server)) + if ((*it)->in_use() && !(*it)->is_closed() && (*it)->backend()->server->is_usable()) { GWBUF* clone = gwbuf_clone(buffer); MXS_ABORT_IF_NULL(clone); @@ -1496,7 +1496,7 @@ bool SchemaRouterSession::get_shard_dcb(DCB** p_dcb, const char* name) */ if ((*it)->in_use() && (strncasecmp(name, b->server->name(), PATH_MAX) == 0) - && server_is_usable(b->server)) + && b->server->is_usable()) { *p_dcb = (*it)->dcb(); succp = true;