Added depth and SERVER_SLAVE_OF_EXTERNAL_MASTER for build_mysql51_replication_tree

Now build_mysql51_replication_tree assigns depth and handles
SERVER_SLAVE_OF_EXTERNAL_MASTER status
This commit is contained in:
MassimilianoPinto 2017-04-21 17:09:28 +02:00
parent 6b9a2cd0b5
commit e6b34ea85c

View File

@ -536,6 +536,8 @@ static MONITOR_SERVERS *build_mysql51_replication_tree(MONITOR *mon)
MONITOR_SERVERS* database = mon->databases;
MONITOR_SERVERS *ptr, *rval = NULL;
int i;
MYSQL_MONITOR *handle = mon->handle;
while (database)
{
bool ismaster = false;
@ -576,14 +578,16 @@ static MONITOR_SERVERS *build_mysql51_replication_tree(MONITOR *mon)
/* Set the Slave Role */
if (ismaster)
{
MYSQL_MONITOR *handle = mon->handle;
handle->master = database;
MXS_DEBUG("Master server found at %s:%d with %d slaves",
database->server->name,
database->server->port,
nslaves);
monitor_set_pending_status(database, SERVER_MASTER);
database->server->depth = 0; // Add Depth 0 for Master
if (rval == NULL || rval->server->node_id > database->server->node_id)
{
rval = database;
@ -607,13 +611,17 @@ static MONITOR_SERVERS *build_mysql51_replication_tree(MONITOR *mon)
if (ptr->server->slaves[i] == database->server->node_id)
{
database->server->master_id = ptr->server->node_id;
database->server->depth = 1; // Add Depth 1 for Slave
break;
}
}
ptr = ptr->next;
}
if (database->server->master_id <= 0 && SERVER_IS_SLAVE(database->server))
if (SERVER_IS_SLAVE(database->server) &&
(database->server->master_id <= 0 ||
database->server->master_id != handle->master->server->node_id))
{
monitor_clear_pending_status(database, SERVER_SLAVE);
monitor_set_pending_status(database, SERVER_SLAVE_OF_EXTERNAL_MASTER);
}
database = database->next;