From e6b34ea85cb1bae47f51ac2c79129ea9b1910d13 Mon Sep 17 00:00:00 2001 From: MassimilianoPinto Date: Fri, 21 Apr 2017 17:09:28 +0200 Subject: [PATCH] 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 --- server/modules/monitor/mysql_mon.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/server/modules/monitor/mysql_mon.c b/server/modules/monitor/mysql_mon.c index 031778982..40333eb0d 100644 --- a/server/modules/monitor/mysql_mon.c +++ b/server/modules/monitor/mysql_mon.c @@ -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;