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