From 1755706ada87ca7cb44cda97816c3d846a31983f Mon Sep 17 00:00:00 2001 From: MassimilianoPinto Date: Wed, 29 Apr 2015 10:50:21 +0200 Subject: [PATCH] Master/Slave detection based on variable only Master/Slave role setting is now based on variable value only. Replication is checked and, if working, master_id, slave_id are saved into server struct --- server/modules/monitor/mm_mon.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/server/modules/monitor/mm_mon.c b/server/modules/monitor/mm_mon.c index a71d2cc7d..60acea825 100644 --- a/server/modules/monitor/mm_mon.c +++ b/server/modules/monitor/mm_mon.c @@ -531,18 +531,20 @@ char *server_string; } /* get variable 'read_only' set by an external component */ - if (mysql_query(database->con, "SHOW GLOBAL VARIABLES LIKE 'read_only'") == 0 - && (result = mysql_store_result(database->con)) != NULL) - { - num_fields = mysql_num_fields(result); - while ((row = mysql_fetch_row(result))) - { - if (strncasecmp(row[1], "OFF", 3) == 0) { - ismaster = 1; - } - } - mysql_free_result(result); - } + if (mysql_query(database->con, "SHOW GLOBAL VARIABLES LIKE 'read_only'") == 0 + && (result = mysql_store_result(database->con)) != NULL) + { + num_fields = mysql_num_fields(result); + while ((row = mysql_fetch_row(result))) + { + if (strncasecmp(row[1], "OFF", 3) == 0) { + ismaster = 1; + } else { + isslave = 1; + } + } + mysql_free_result(result); + } /* Remove addition info */ monitor_clear_pending_status(database, SERVER_STALE_STATUS); @@ -563,7 +565,7 @@ char *server_string; } /* Set the Master role */ - if (isslave && ismaster) + if (ismaster) { monitor_clear_pending_status(database, SERVER_SLAVE); monitor_set_pending_status(database, SERVER_MASTER);