diff --git a/include/maxscale/server.hh b/include/maxscale/server.hh index 0996b21e1..65e7b6d01 100644 --- a/include/maxscale/server.hh +++ b/include/maxscale/server.hh @@ -161,7 +161,7 @@ public: }; // Base settings - char address[MAX_ADDRESS_LEN] = {'\0'}; /**< Server hostname/IP-address */ + char address[MAX_ADDRESS_LEN + 1] = {'\0'}; /**< Server hostname/IP-address */ int port = -1; /**< Server port */ int extra_port = -1; /**< Alternative monitor port if normal port fails */ @@ -270,6 +270,13 @@ public: */ virtual std::string protocol() const = 0; + /* + * Update server address. TODO: Move this to internal class once blr is gone. + * + * @param address The new address + */ + bool server_update_address(const std::string& address); + /** * Update the server port. TODO: Move this to internal class once blr is gone. * @@ -485,8 +492,6 @@ private: */ void server_add_response_average(SERVER* server, double ave, int num_samples); -extern void server_update_address(SERVER* server, const char* address); - int server_response_time_num_samples(const SERVER* server); double server_response_time_average(const SERVER* server); diff --git a/server/core/config_runtime.cc b/server/core/config_runtime.cc index 8e18cb05a..bd9a5f5b3 100644 --- a/server/core/config_runtime.cc +++ b/server/core/config_runtime.cc @@ -480,7 +480,7 @@ bool runtime_alter_server(Server* server, const char* key, const char* value) if (strcmp(key, CN_ADDRESS) == 0) { - server_update_address(server, value); + server->server_update_address(value); } else if (strcmp(key, CN_PORT) == 0) { diff --git a/server/core/internal/server.hh b/server/core/internal/server.hh index 90e782bc4..381cfd2a4 100644 --- a/server/core/internal/server.hh +++ b/server/core/internal/server.hh @@ -312,8 +312,7 @@ public: */ void printServer(); - mutable std::mutex m_lock; - DCB** persistent = nullptr;/**< List of unused persistent connections to the server */ + DCB** persistent = nullptr;/**< List of unused persistent connections to the server */ private: struct Settings diff --git a/server/core/server.cc b/server/core/server.cc index 79da9b6a4..812a274e4 100644 --- a/server/core/server.cc +++ b/server/core/server.cc @@ -790,21 +790,19 @@ std::unique_ptr serverGetList() return set; } -/* - * Update the address value of a specific server - * - * @param server The server to update - * @param address The new address - * - */ -void server_update_address(SERVER* server, const char* address) +bool SERVER::server_update_address(const string& new_address) { - Guard guard(this_unit.all_servers_lock); - - if (server && address) + bool rval = false; + if (new_address.length() <= MAX_ADDRESS_LEN) { - strcpy(server->address, address); + careful_strcpy(address, MAX_ADDRESS_LEN, new_address); + rval = true; } + else + { + MXS_ERROR(ERR_TOO_LONG_CONFIG_VALUE, CN_ADDRESS, MAX_ADDRESS_LEN); + } + return rval; } void SERVER::update_port(int new_port) diff --git a/server/modules/routing/binlogrouter/blr_master.cc b/server/modules/routing/binlogrouter/blr_master.cc index d3646f2c7..62ac972a8 100644 --- a/server/modules/routing/binlogrouter/blr_master.cc +++ b/server/modules/routing/binlogrouter/blr_master.cc @@ -3206,7 +3206,7 @@ void blr_master_set_config(ROUTER_INSTANCE* inst, const ChangeMasterConfig& conf if (!config.host.empty()) { - server_update_address(backend_server, config.host.c_str()); + backend_server->server_update_address(config.host); } if (config.port) diff --git a/server/modules/routing/binlogrouter/blr_slave.cc b/server/modules/routing/binlogrouter/blr_slave.cc index fa1296fb4..e1a5f0ab3 100644 --- a/server/modules/routing/binlogrouter/blr_slave.cc +++ b/server/modules/routing/binlogrouter/blr_slave.cc @@ -4655,7 +4655,7 @@ static int blr_set_master_hostname(ROUTER_INSTANCE* router, const char* hostname { mxb_assert((*hostname != '\'') && (*hostname != '"')); - server_update_address(router->service->dbref->server, hostname); + router->service->dbref->server->server_update_address(hostname); MXS_INFO("%s: New MASTER_HOST is [%s]", router->service->name, @@ -4883,7 +4883,7 @@ static void blr_master_get_config(ROUTER_INSTANCE* router, MasterServerConfig* c static void blr_master_restore_config(ROUTER_INSTANCE* router, const MasterServerConfig& prev_master) { - server_update_address(router->service->dbref->server, prev_master.host.c_str()); + router->service->dbref->server->server_update_address(prev_master.host); router->service->dbref->server->update_port(prev_master.port); router->ssl_enabled = prev_master.ssl_enabled; @@ -4903,7 +4903,7 @@ static void blr_master_restore_config(ROUTER_INSTANCE* router, */ static void blr_master_set_empty_config(ROUTER_INSTANCE* router) { - server_update_address(router->service->dbref->server, "none"); + router->service->dbref->server->server_update_address("none"); router->service->dbref->server->update_port(3306); router->current_pos = 4; @@ -4925,7 +4925,7 @@ static void blr_master_set_empty_config(ROUTER_INSTANCE* router) */ static void blr_master_apply_config(ROUTER_INSTANCE* router, const MasterServerConfig& prev_master) { - server_update_address(router->service->dbref->server, prev_master.host.c_str()); + router->service->dbref->server->server_update_address(prev_master.host); router->service->dbref->server->update_port(prev_master.port); router->current_pos = prev_master.pos; router->binlog_position = prev_master.safe_pos;