Fix server usage bugs in monitors and servers
The MySQL Monitor did not reset the pointer to the root master reference which would lead to a crash if the master was removed. When service details were shown, it listed all servers that existed. Only servers that haven't been removed or destroyed should be shown.
This commit is contained in:
@ -330,7 +330,6 @@ void monitorRemoveServer(MONITOR *mon, SERVER *server)
|
|||||||
|
|
||||||
spinlock_acquire(&mon->lock);
|
spinlock_acquire(&mon->lock);
|
||||||
|
|
||||||
ss_dassert(mon->databases);
|
|
||||||
MONITOR_SERVERS *ptr = mon->databases;
|
MONITOR_SERVERS *ptr = mon->databases;
|
||||||
|
|
||||||
if (ptr->server == server)
|
if (ptr->server == server)
|
||||||
@ -1109,12 +1108,9 @@ void
|
|||||||
mon_log_connect_error(MONITOR_SERVERS* database, connect_result_t rval)
|
mon_log_connect_error(MONITOR_SERVERS* database, connect_result_t rval)
|
||||||
{
|
{
|
||||||
MXS_ERROR(rval == MONITOR_CONN_TIMEOUT ?
|
MXS_ERROR(rval == MONITOR_CONN_TIMEOUT ?
|
||||||
"Monitor timed out when connecting to "
|
"Monitor timed out when connecting to server %s:%d : \"%s\"" :
|
||||||
"server %s:%d : \"%s\"" :
|
"Monitor was unable to connect to server %s:%d : \"%s\"",
|
||||||
"Monitor was unable to connect to "
|
database->server->name, database->server->port,
|
||||||
"server %s:%d : \"%s\"",
|
|
||||||
database->server->name,
|
|
||||||
database->server->port,
|
|
||||||
mysql_error(database->con));
|
mysql_error(database->con));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1365,8 +1365,11 @@ void dprintService(DCB *dcb, SERVICE *service)
|
|||||||
dcb_printf(dcb, "\tBackend databases:\n");
|
dcb_printf(dcb, "\tBackend databases:\n");
|
||||||
while (server)
|
while (server)
|
||||||
{
|
{
|
||||||
dcb_printf(dcb, "\t\t%s:%d Protocol: %s\n", server->server->name, server->server->port,
|
if (server->active && server->server->is_active)
|
||||||
server->server->protocol);
|
{
|
||||||
|
dcb_printf(dcb, "\t\t%s:%d Protocol: %s\n", server->server->name,
|
||||||
|
server->server->port, server->server->protocol);
|
||||||
|
}
|
||||||
server = server->next;
|
server = server->next;
|
||||||
}
|
}
|
||||||
if (service->weightby)
|
if (service->weightby)
|
||||||
@ -2201,7 +2204,7 @@ bool service_server_in_use(const SERVER *server)
|
|||||||
|
|
||||||
for (SERVER_REF *ref = service->dbref; ref && !rval; ref = ref->next)
|
for (SERVER_REF *ref = service->dbref; ref && !rval; ref = ref->next)
|
||||||
{
|
{
|
||||||
if (ref->server == server)
|
if (ref->active && ref->server == server)
|
||||||
{
|
{
|
||||||
rval = true;
|
rval = true;
|
||||||
}
|
}
|
||||||
|
@ -270,7 +270,6 @@ startMonitor(MONITOR *monitor, const CONFIG_PARAMETER* params)
|
|||||||
handle->replicationHeartbeat = 0;
|
handle->replicationHeartbeat = 0;
|
||||||
handle->detectStaleMaster = true;
|
handle->detectStaleMaster = true;
|
||||||
handle->detectStaleSlave = true;
|
handle->detectStaleSlave = true;
|
||||||
handle->master = NULL;
|
|
||||||
handle->script = NULL;
|
handle->script = NULL;
|
||||||
handle->multimaster = false;
|
handle->multimaster = false;
|
||||||
handle->mysql51_replication = false;
|
handle->mysql51_replication = false;
|
||||||
@ -281,6 +280,9 @@ startMonitor(MONITOR *monitor, const CONFIG_PARAMETER* params)
|
|||||||
spinlock_init(&handle->lock);
|
spinlock_init(&handle->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** This should always be reset to NULL */
|
||||||
|
handle->master = NULL;
|
||||||
|
|
||||||
while (params)
|
while (params)
|
||||||
{
|
{
|
||||||
if (!strcmp(params->name, "detect_stale_master"))
|
if (!strcmp(params->name, "detect_stale_master"))
|
||||||
|
Reference in New Issue
Block a user