diff --git a/include/maxscale/server.hh b/include/maxscale/server.hh index 15216cc1c..9e9c25b46 100644 --- a/include/maxscale/server.hh +++ b/include/maxscale/server.hh @@ -282,7 +282,7 @@ public: * * @return The server rank */ - virtual int rank() const = 0; + virtual int64_t rank() const = 0; /* * Update server address. TODO: Move this to internal class once blr is gone. diff --git a/server/core/config.cc b/server/core/config.cc index 044710578..0db1cece4 100644 --- a/server/core/config.cc +++ b/server/core/config.cc @@ -425,7 +425,7 @@ const MXS_MODULE_PARAM config_server_params[] = {CN_SSL_CERT_VERIFY_DEPTH, MXS_MODULE_PARAM_COUNT, "9"}, {CN_SSL_VERIFY_PEER_CERTIFICATE, MXS_MODULE_PARAM_BOOL, "true"}, {CN_DISK_SPACE_THRESHOLD, MXS_MODULE_PARAM_STRING}, - {CN_RANK, MXS_MODULE_PARAM_INT, "-1"}, + {CN_RANK, MXS_MODULE_PARAM_COUNT, "2147483647"}, {NULL} }; diff --git a/server/core/config_runtime.cc b/server/core/config_runtime.cc index 8a0977014..369ed9a1e 100644 --- a/server/core/config_runtime.cc +++ b/server/core/config_runtime.cc @@ -621,9 +621,13 @@ bool runtime_alter_server(Server* server, const char* key, const char* value) } if (strcmp(key, CN_RANK) == 0) { - if (is_valid_integer(value)) + if (auto i = get_positive_int(value)) { - server->set_rank(atoi(value)); + server->set_rank(i); + } + else + { + config_runtime_error("Invalid value for '%s': %s", CN_RANK, value); } } else diff --git a/server/core/internal/server.hh b/server/core/internal/server.hh index 205b72c39..b3fb183cf 100644 --- a/server/core/internal/server.hh +++ b/server/core/internal/server.hh @@ -62,7 +62,7 @@ public: m_settings.persistmaxtime = persistmaxtime; } - void set_rank(int rank) + void set_rank(int64_t rank) { m_settings.rank = rank; } @@ -122,7 +122,7 @@ public: return m_settings.authenticator; } - int rank() const override + int64_t rank() const override { return m_settings.rank; } @@ -341,7 +341,7 @@ private: long persistpoolmax = 0; /**< Maximum size of persistent connections pool */ long persistmaxtime = 0; /**< Maximum number of seconds connection can live */ - int rank; /*< The ranking of this server, used to prioritize certain servers over others */ + int64_t rank; /*< The ranking of this server, used to prioritize certain servers over others */ /** Disk space thresholds. Can be queried from modules at any time so access must be protected * by mutex. */ diff --git a/server/core/server.cc b/server/core/server.cc index a2e6804e9..154037209 100644 --- a/server/core/server.cc +++ b/server/core/server.cc @@ -252,11 +252,8 @@ Server* Server::server_alloc(const char* name, MXS_CONFIG_PARAMETER* params) server->persistent = persistent; server->last_event = SERVER_UP_EVENT; server->status = SERVER_RUNNING; - - if ((server->m_settings.rank = params->get_integer(CN_RANK)) == -1) - { - server->m_settings.rank = std::numeric_limits::max(); - } + server->m_settings.rank = params->get_integer(CN_RANK); + mxb_assert(server->m_settings.rank > 0); if (!monuser.empty()) { diff --git a/server/modules/routing/readconnroute/readconnroute.cc b/server/modules/routing/readconnroute/readconnroute.cc index f08eb90ff..716727076 100644 --- a/server/modules/routing/readconnroute/readconnroute.cc +++ b/server/modules/routing/readconnroute/readconnroute.cc @@ -83,14 +83,14 @@ extern "C" MXS_MODULE* MXS_CREATE_MODULE() */ SERVER_REF* RCR::get_root_master() { - int best_rank {std::numeric_limits::max()}; + auto best_rank = std::numeric_limits::max(); SERVER_REF* master_host = nullptr; for (SERVER_REF* ref = m_pService->dbref; ref; ref = ref->next) { if (server_ref_is_active(ref) && ref->server->is_master()) { - int rank = ref->server->rank(); + auto rank = ref->server->rank(); if (!master_host) { @@ -230,7 +230,7 @@ RCRSession* RCR::newSession(MXS_SESSION* session) * connection router. */ SERVER_REF* candidate = nullptr; - int best_rank {std::numeric_limits::max()}; + auto best_rank = std::numeric_limits::max(); /* * Loop over all the servers and find any that have fewer connections diff --git a/server/modules/routing/readwritesplit/rwsplit_select_backends.cc b/server/modules/routing/readwritesplit/rwsplit_select_backends.cc index 36885be01..a5249f157 100644 --- a/server/modules/routing/readwritesplit/rwsplit_select_backends.cc +++ b/server/modules/routing/readwritesplit/rwsplit_select_backends.cc @@ -243,14 +243,14 @@ PRWBackends::iterator find_best_backend(PRWBackends& backends, { // Group backends by priority and rank (lower is better). The set of best backends will then compete. int best_priority {INT_MAX}; - int best_rank {std::numeric_limits::max()}; + auto best_rank = std::numeric_limits::max(); thread_local PRWBackends candidates; candidates.clear(); for (auto& psBackend : backends) { int priority = get_backend_priority(psBackend, masters_accepts_reads); - int rank = psBackend->server()->rank(); + auto rank = psBackend->server()->rank(); if (rank < best_rank || (rank == best_rank && priority < best_priority)) { @@ -271,9 +271,9 @@ PRWBackends::iterator find_best_backend(PRWBackends& backends, return rval; } -void add_backend_with_rank(RWBackend* backend, PRWBackends* candidates, int* best_rank) +void add_backend_with_rank(RWBackend* backend, PRWBackends* candidates, int64_t* best_rank) { - int rank = backend->server()->rank(); + auto rank = backend->server()->rank(); if (rank < *best_rank) { @@ -366,7 +366,7 @@ RWBackend* get_root_master(const PRWBackends& backends, RWBackend* current_maste thread_local PRWBackends candidates; candidates.clear(); - int best_rank {std::numeric_limits::max()}; + auto best_rank = std::numeric_limits::max(); for (const auto& backend : backends) { @@ -449,7 +449,7 @@ bool RWSplitSession::open_connections() int n_slaves = get_slave_counts(m_raw_backends, master).second; int max_nslaves = m_router->max_slave_count(); - int best_rank {std::numeric_limits::max()}; + auto best_rank = std::numeric_limits::max(); PRWBackends candidates; mxb_assert(n_slaves <= max_nslaves || max_nslaves == 0);