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
committed by Johan Wikman
parent 57700215ac
commit 656cb3c517

View File

@ -507,6 +507,8 @@ static MXS_MONITOR_SERVERS *build_mysql51_replication_tree(MXS_MONITOR *mon)
MXS_MONITOR_SERVERS* database = mon->databases; MXS_MONITOR_SERVERS* database = mon->databases;
MXS_MONITOR_SERVERS *ptr, *rval = NULL; MXS_MONITOR_SERVERS *ptr, *rval = NULL;
int i; int i;
MYSQL_MONITOR *handle = mon->handle;
while (database) while (database)
{ {
bool ismaster = false; bool ismaster = false;
@ -547,14 +549,16 @@ static MXS_MONITOR_SERVERS *build_mysql51_replication_tree(MXS_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;
@ -578,13 +582,17 @@ static MXS_MONITOR_SERVERS *build_mysql51_replication_tree(MXS_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;