Mysqlmon formatting changes
Fixed indentation, bracket alignment and other minor things.
This commit is contained in:
@ -106,8 +106,7 @@ version()
|
||||
void
|
||||
ModuleInit()
|
||||
{
|
||||
LOGIF(LM, (skygw_log_write(
|
||||
LOGFILE_MESSAGE,
|
||||
LOGIF(LM, (skygw_log_write(LOGFILE_MESSAGE,
|
||||
"Initialise the MySQL Monitor module %s.",
|
||||
version_str)));
|
||||
}
|
||||
@ -300,7 +299,8 @@ static inline void monitor_mysql100_db(MONITOR_SERVERS* database)
|
||||
{
|
||||
/* get Slave_IO_Running and Slave_SQL_Running values*/
|
||||
if (strncmp(row[12], "Yes", 3) == 0
|
||||
&& strncmp(row[13], "Yes", 3) == 0) {
|
||||
&& strncmp(row[13], "Yes", 3) == 0)
|
||||
{
|
||||
isslave += 1;
|
||||
}
|
||||
|
||||
@ -309,7 +309,8 @@ static inline void monitor_mysql100_db(MONITOR_SERVERS* database)
|
||||
* root master server.
|
||||
* Please note, there could be no slaves at all if Slave_SQL_Running == 'No'
|
||||
*/
|
||||
if (strncmp(row[12], "Yes", 3) == 0) {
|
||||
if (strncmp(row[12], "Yes", 3) == 0)
|
||||
{
|
||||
/* get Master_Server_Id values */
|
||||
master_id = atol(row[41]);
|
||||
if (master_id == 0)
|
||||
@ -325,10 +326,14 @@ static inline void monitor_mysql100_db(MONITOR_SERVERS* database)
|
||||
|
||||
/* If all configured slaves are running set this node as slave */
|
||||
if (isslave > 0 && isslave == i)
|
||||
{
|
||||
isslave = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
isslave = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Remove addition info */
|
||||
monitor_clear_pending_status(database, SERVER_SLAVE_OF_EXTERNAL_MASTER);
|
||||
@ -344,7 +349,9 @@ static inline void monitor_mysql100_db(MONITOR_SERVERS* database)
|
||||
monitor_set_pending_status(database, SERVER_SLAVE);
|
||||
/* Avoid any possible stale Master state */
|
||||
monitor_clear_pending_status(database, SERVER_MASTER);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Avoid any possible Master/Slave stale state */
|
||||
monitor_clear_pending_status(database, SERVER_SLAVE);
|
||||
monitor_clear_pending_status(database, SERVER_MASTER);
|
||||
@ -374,7 +381,8 @@ static inline void monitor_mysql55_db(MONITOR_SERVERS* database)
|
||||
{
|
||||
/* get Slave_IO_Running and Slave_SQL_Running values*/
|
||||
if (strncmp(row[10], "Yes", 3) == 0
|
||||
&& strncmp(row[11], "Yes", 3) == 0) {
|
||||
&& strncmp(row[11], "Yes", 3) == 0)
|
||||
{
|
||||
isslave = 1;
|
||||
}
|
||||
|
||||
@ -383,7 +391,8 @@ static inline void monitor_mysql55_db(MONITOR_SERVERS* database)
|
||||
* root master server.
|
||||
* Please note, there could be no slaves at all if Slave_SQL_Running == 'No'
|
||||
*/
|
||||
if (strncmp(row[10], "Yes", 3) == 0) {
|
||||
if (strncmp(row[10], "Yes", 3) == 0)
|
||||
{
|
||||
/* get Master_Server_Id values */
|
||||
master_id = atol(row[39]);
|
||||
if (master_id == 0)
|
||||
@ -410,7 +419,9 @@ static inline void monitor_mysql55_db(MONITOR_SERVERS* database)
|
||||
monitor_set_pending_status(database, SERVER_SLAVE);
|
||||
/* Avoid any possible stale Master state */
|
||||
monitor_clear_pending_status(database, SERVER_MASTER);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Avoid any possible Master/Slave stale state */
|
||||
monitor_clear_pending_status(database, SERVER_SLAVE);
|
||||
monitor_clear_pending_status(database, SERVER_MASTER);
|
||||
@ -440,7 +451,8 @@ static inline void monitor_mysql51_db(MONITOR_SERVERS* database)
|
||||
{
|
||||
/* get Slave_IO_Running and Slave_SQL_Running values*/
|
||||
if (strncmp(row[10], "Yes", 3) == 0
|
||||
&& strncmp(row[11], "Yes", 3) == 0) {
|
||||
&& strncmp(row[11], "Yes", 3) == 0)
|
||||
{
|
||||
isslave = 1;
|
||||
}
|
||||
}
|
||||
@ -461,7 +473,9 @@ static inline void monitor_mysql51_db(MONITOR_SERVERS* database)
|
||||
monitor_set_pending_status(database, SERVER_SLAVE);
|
||||
/* Avoid any possible stale Master state */
|
||||
monitor_clear_pending_status(database, SERVER_MASTER);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Avoid any possible Master/Slave stale state */
|
||||
monitor_clear_pending_status(database, SERVER_SLAVE);
|
||||
monitor_clear_pending_status(database, SERVER_MASTER);
|
||||
@ -560,6 +574,7 @@ static MONITOR_SERVERS *build_mysql51_replication_tree(MONITOR *mon)
|
||||
}
|
||||
return rval;
|
||||
}
|
||||
|
||||
/**
|
||||
* Monitor an individual server
|
||||
*
|
||||
@ -730,8 +745,7 @@ detect_stale_master = handle->detectStaleMaster;
|
||||
|
||||
if (mysql_thread_init())
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"Fatal : mysql_thread_init failed in monitor "
|
||||
"module. Exiting.\n")));
|
||||
return;
|
||||
@ -787,7 +801,8 @@ detect_stale_master = handle->detectStaleMaster;
|
||||
monitorDatabase(mon, ptr);
|
||||
|
||||
/* reset the slave list of current node */
|
||||
if (ptr->server->slaves) {
|
||||
if (ptr->server->slaves)
|
||||
{
|
||||
free(ptr->server->slaves);
|
||||
}
|
||||
/* create a new slave list */
|
||||
@ -800,8 +815,7 @@ detect_stale_master = handle->detectStaleMaster;
|
||||
if (SRV_MASTER_STATUS(ptr->mon_prev_status))
|
||||
{
|
||||
/** Master failed, can't recover */
|
||||
LOGIF(LM, (skygw_log_write(
|
||||
LOGFILE_MESSAGE,
|
||||
LOGIF(LM, (skygw_log_write(LOGFILE_MESSAGE,
|
||||
"Server %s:%d lost the master status.",
|
||||
ptr->server->name,
|
||||
ptr->server->port)));
|
||||
@ -827,15 +841,13 @@ detect_stale_master = handle->detectStaleMaster;
|
||||
if (mon_status_changed(ptr))
|
||||
{
|
||||
#if defined(SS_DEBUG)
|
||||
LOGIF(LT, (skygw_log_write_flush(
|
||||
LOGFILE_TRACE,
|
||||
LOGIF(LT, (skygw_log_write_flush(LOGFILE_TRACE,
|
||||
"Backend server %s:%d state : %s",
|
||||
ptr->server->name,
|
||||
ptr->server->port,
|
||||
STRSRVSTATUS(ptr->server))));
|
||||
#else
|
||||
LOGIF(LD, (skygw_log_write_flush(
|
||||
LOGFILE_DEBUG,
|
||||
LOGIF(LD, (skygw_log_write_flush(LOGFILE_DEBUG,
|
||||
"Backend server %s:%d state : %s",
|
||||
ptr->server->name,
|
||||
ptr->server->port,
|
||||
@ -859,8 +871,10 @@ detect_stale_master = handle->detectStaleMaster;
|
||||
|
||||
ptr = mon->databases;
|
||||
/* if only one server is configured, that's is Master */
|
||||
if (num_servers == 1) {
|
||||
if (SERVER_IS_RUNNING(ptr->server)) {
|
||||
if (num_servers == 1)
|
||||
{
|
||||
if (SERVER_IS_RUNNING(ptr->server))
|
||||
{
|
||||
ptr->server->depth = 0;
|
||||
/* status cleanup */
|
||||
monitor_clear_pending_status(ptr, SERVER_SLAVE);
|
||||
@ -872,7 +886,9 @@ detect_stale_master = handle->detectStaleMaster;
|
||||
handle->master = ptr;
|
||||
root_master = ptr;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Compute the replication tree */
|
||||
if (handle->mysql51_replication)
|
||||
root_master = build_mysql51_replication_tree(mon);
|
||||
@ -886,7 +902,8 @@ detect_stale_master = handle->detectStaleMaster;
|
||||
ptr = mon->databases;
|
||||
while (ptr)
|
||||
{
|
||||
if (! SERVER_IN_MAINT(ptr->server)) {
|
||||
if (!SERVER_IN_MAINT(ptr->server))
|
||||
{
|
||||
/* If "detect_stale_master" option is On, let's use the previus master */
|
||||
if (detect_stale_master &&
|
||||
root_master &&
|
||||
@ -902,9 +919,9 @@ detect_stale_master = handle->detectStaleMaster;
|
||||
server_set_status(ptr->server, SERVER_STALE_STATUS);
|
||||
|
||||
/* log it once */
|
||||
if (mon_status_changed(ptr)) {
|
||||
LOGIF(LM, (skygw_log_write_flush(
|
||||
LOGFILE_MESSAGE,
|
||||
if (mon_status_changed(ptr))
|
||||
{
|
||||
LOGIF(LM, (skygw_log_write_flush(LOGFILE_MESSAGE,
|
||||
"[mysql_mon]: root server "
|
||||
"[%s:%i] is no longer Master,"
|
||||
" let's use it again even "
|
||||
@ -913,7 +930,9 @@ detect_stale_master = handle->detectStaleMaster;
|
||||
ptr->server->name,
|
||||
ptr->server->port)));
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr->server->status = ptr->pending_status;
|
||||
}
|
||||
}
|
||||
@ -948,29 +967,31 @@ detect_stale_master = handle->detectStaleMaster;
|
||||
mon_status_changed(root_master) &&
|
||||
!(root_master->server->status & SERVER_STALE_STATUS))
|
||||
{
|
||||
if (root_master->pending_status & (SERVER_MASTER) && SERVER_IS_RUNNING(root_master->server)) {
|
||||
if (root_master->pending_status & (SERVER_MASTER) && SERVER_IS_RUNNING(root_master->server))
|
||||
{
|
||||
if (!(root_master->mon_prev_status & SERVER_STALE_STATUS) &&
|
||||
!(root_master->server->status & SERVER_MAINT))
|
||||
{
|
||||
LOGIF(LM, (skygw_log_write(
|
||||
LOGFILE_MESSAGE,
|
||||
LOGIF(LM, (skygw_log_write(LOGFILE_MESSAGE,
|
||||
"Info : A Master Server is now available: %s:%i",
|
||||
root_master->server->name,
|
||||
root_master->server->port)));
|
||||
}
|
||||
} else {
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"Error : No Master can be determined. Last known was %s:%i",
|
||||
root_master->server->name,
|
||||
root_master->server->port)));
|
||||
}
|
||||
log_no_master = 1;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!root_master && log_no_master)
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"Error : No Master can be determined")));
|
||||
log_no_master = 0;
|
||||
}
|
||||
@ -985,7 +1006,8 @@ detect_stale_master = handle->detectStaleMaster;
|
||||
set_master_heartbeat(handle, root_master);
|
||||
ptr = mon->databases;
|
||||
|
||||
while (ptr) {
|
||||
while (ptr)
|
||||
{
|
||||
if ((!SERVER_IN_MAINT(ptr->server)) && SERVER_IS_RUNNING(ptr->server))
|
||||
{
|
||||
if (ptr->server->node_id != root_master->server->node_id &&
|
||||
@ -1050,12 +1072,14 @@ MYSQL_MONITOR *handle = (MYSQL_MONITOR *)arg;
|
||||
* @return The server with the required server_id
|
||||
*/
|
||||
static MONITOR_SERVERS *
|
||||
getServerByNodeId(MONITOR_SERVERS *ptr, long node_id) {
|
||||
getServerByNodeId(MONITOR_SERVERS *ptr, long node_id)
|
||||
{
|
||||
SERVER *current;
|
||||
while (ptr)
|
||||
{
|
||||
current = ptr->server;
|
||||
if (current->node_id == node_id) {
|
||||
if (current->node_id == node_id)
|
||||
{
|
||||
return ptr;
|
||||
}
|
||||
ptr = ptr->next;
|
||||
@ -1071,12 +1095,14 @@ getServerByNodeId(MONITOR_SERVERS *ptr, long node_id) {
|
||||
* @return The slave server of this node_id
|
||||
*/
|
||||
static MONITOR_SERVERS *
|
||||
getSlaveOfNodeId(MONITOR_SERVERS *ptr, long node_id) {
|
||||
getSlaveOfNodeId(MONITOR_SERVERS *ptr, long node_id)
|
||||
{
|
||||
SERVER *current;
|
||||
while (ptr)
|
||||
{
|
||||
current = ptr->server;
|
||||
if (current->master_id == node_id) {
|
||||
if (current->master_id == node_id)
|
||||
{
|
||||
return ptr;
|
||||
}
|
||||
ptr = ptr->next;
|
||||
@ -1092,24 +1118,25 @@ getSlaveOfNodeId(MONITOR_SERVERS *ptr, long node_id) {
|
||||
* @param handle The monitor handle
|
||||
* @param database The number database server
|
||||
*/
|
||||
static void set_master_heartbeat(MYSQL_MONITOR *handle, MONITOR_SERVERS *database) {
|
||||
static void set_master_heartbeat(MYSQL_MONITOR *handle, MONITOR_SERVERS *database)
|
||||
{
|
||||
unsigned long id = handle->id;
|
||||
time_t heartbeat;
|
||||
time_t purge_time;
|
||||
char heartbeat_insert_query[512] = "";
|
||||
char heartbeat_purge_query[512] = "";
|
||||
|
||||
if (handle->master == NULL) {
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
if (handle->master == NULL)
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"[mysql_mon]: set_master_heartbeat called without an available Master server")));
|
||||
return;
|
||||
}
|
||||
|
||||
/* create the maxscale_schema database */
|
||||
if (mysql_query(database->con, "CREATE DATABASE IF NOT EXISTS maxscale_schema")) {
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
if (mysql_query(database->con, "CREATE DATABASE IF NOT EXISTS maxscale_schema"))
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"[mysql_mon]: Error creating maxscale_schema database in Master server"
|
||||
": %s", mysql_error(database->con))));
|
||||
|
||||
@ -1123,9 +1150,9 @@ static void set_master_heartbeat(MYSQL_MONITOR *handle, MONITOR_SERVERS *databas
|
||||
"master_server_id INT NOT NULL, "
|
||||
"master_timestamp INT UNSIGNED NOT NULL, "
|
||||
"PRIMARY KEY ( master_server_id, maxscale_id ) ) "
|
||||
"ENGINE=MYISAM DEFAULT CHARSET=latin1")) {
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
"ENGINE=MYISAM DEFAULT CHARSET=latin1"))
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"[mysql_mon]: Error creating maxscale_schema.replication_heartbeat table in Master server"
|
||||
": %s", mysql_error(database->con))));
|
||||
|
||||
@ -1137,9 +1164,9 @@ static void set_master_heartbeat(MYSQL_MONITOR *handle, MONITOR_SERVERS *databas
|
||||
|
||||
sprintf(heartbeat_purge_query, "DELETE FROM maxscale_schema.replication_heartbeat WHERE master_timestamp < %lu", purge_time);
|
||||
|
||||
if (mysql_query(database->con, heartbeat_purge_query)) {
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
if (mysql_query(database->con, heartbeat_purge_query))
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"[mysql_mon]: Error deleting from maxscale_schema.replication_heartbeat table: [%s], %s",
|
||||
heartbeat_purge_query,
|
||||
mysql_error(database->con))));
|
||||
@ -1153,43 +1180,48 @@ static void set_master_heartbeat(MYSQL_MONITOR *handle, MONITOR_SERVERS *databas
|
||||
sprintf(heartbeat_insert_query, "UPDATE maxscale_schema.replication_heartbeat SET master_timestamp = %lu WHERE master_server_id = %li AND maxscale_id = %lu", heartbeat, handle->master->server->node_id, id);
|
||||
|
||||
/* Try to insert MaxScale timestamp into master */
|
||||
if (mysql_query(database->con, heartbeat_insert_query)) {
|
||||
if (mysql_query(database->con, heartbeat_insert_query))
|
||||
{
|
||||
|
||||
database->server->rlag = -1;
|
||||
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"[mysql_mon]: Error updating maxscale_schema.replication_heartbeat table: [%s], %s",
|
||||
heartbeat_insert_query,
|
||||
mysql_error(database->con))));
|
||||
} else {
|
||||
if (mysql_affected_rows(database->con) == 0) {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mysql_affected_rows(database->con) == 0)
|
||||
{
|
||||
heartbeat = time(0);
|
||||
sprintf(heartbeat_insert_query, "REPLACE INTO maxscale_schema.replication_heartbeat (master_server_id, maxscale_id, master_timestamp ) VALUES ( %li, %lu, %lu)", handle->master->server->node_id, id, heartbeat);
|
||||
|
||||
if (mysql_query(database->con, heartbeat_insert_query)) {
|
||||
if (mysql_query(database->con, heartbeat_insert_query))
|
||||
{
|
||||
|
||||
database->server->rlag = -1;
|
||||
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"[mysql_mon]: Error inserting into maxscale_schema.replication_heartbeat table: [%s], %s",
|
||||
heartbeat_insert_query,
|
||||
mysql_error(database->con))));
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Set replication lag to 0 for the master */
|
||||
database->server->rlag = 0;
|
||||
|
||||
LOGIF(LD, (skygw_log_write_flush(
|
||||
LOGFILE_DEBUG,
|
||||
LOGIF(LD, (skygw_log_write_flush(LOGFILE_DEBUG,
|
||||
"[mysql_mon]: heartbeat table inserted data for %s:%i", database->server->name, database->server->port)));
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Set replication lag as 0 for the master */
|
||||
database->server->rlag = 0;
|
||||
|
||||
LOGIF(LD, (skygw_log_write_flush(
|
||||
LOGFILE_DEBUG,
|
||||
LOGIF(LD, (skygw_log_write_flush(LOGFILE_DEBUG,
|
||||
"[mysql_mon]: heartbeat table updated for Master %s:%i", database->server->name, database->server->port)));
|
||||
}
|
||||
}
|
||||
@ -1203,7 +1235,8 @@ static void set_master_heartbeat(MYSQL_MONITOR *handle, MONITOR_SERVERS *databas
|
||||
* @param handle The monitor handle
|
||||
* @param database The number database server
|
||||
*/
|
||||
static void set_slave_heartbeat(MONITOR* mon, MONITOR_SERVERS *database) {
|
||||
static void set_slave_heartbeat(MONITOR* mon, MONITOR_SERVERS *database)
|
||||
{
|
||||
MYSQL_MONITOR *handle = (MYSQL_MONITOR*) mon->handle;
|
||||
unsigned long id = handle->id;
|
||||
time_t heartbeat;
|
||||
@ -1211,9 +1244,9 @@ static void set_slave_heartbeat(MONITOR* mon, MONITOR_SERVERS *database) {
|
||||
MYSQL_ROW row;
|
||||
MYSQL_RES *result;
|
||||
|
||||
if (handle->master == NULL) {
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
if (handle->master == NULL)
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"[mysql_mon]: set_slave_heartbeat called without an available Master server")));
|
||||
return;
|
||||
}
|
||||
@ -1227,10 +1260,12 @@ static void set_slave_heartbeat(MONITOR* mon, MONITOR_SERVERS *database) {
|
||||
|
||||
/* if there is a master then send the query to the slave with master_id */
|
||||
if (handle->master != NULL && (mysql_query(database->con, select_heartbeat_query) == 0
|
||||
&& (result = mysql_store_result(database->con)) != NULL)) {
|
||||
&& (result = mysql_store_result(database->con)) != NULL))
|
||||
{
|
||||
int rows_found = 0;
|
||||
|
||||
while ((row = mysql_fetch_row(result))) {
|
||||
while ((row = mysql_fetch_row(result)))
|
||||
{
|
||||
int rlag = -1;
|
||||
time_t slave_read;
|
||||
|
||||
@ -1239,11 +1274,13 @@ static void set_slave_heartbeat(MONITOR* mon, MONITOR_SERVERS *database) {
|
||||
heartbeat = time(0);
|
||||
slave_read = strtoul(row[0], NULL, 10);
|
||||
|
||||
if ((errno == ERANGE && (slave_read == LONG_MAX || slave_read == LONG_MIN)) || (errno != 0 && slave_read == 0)) {
|
||||
if ((errno == ERANGE && (slave_read == LONG_MAX || slave_read == LONG_MIN)) || (errno != 0 && slave_read == 0))
|
||||
{
|
||||
slave_read = 0;
|
||||
}
|
||||
|
||||
if (slave_read) {
|
||||
if (slave_read)
|
||||
{
|
||||
/* set the replication lag */
|
||||
rlag = heartbeat - slave_read;
|
||||
}
|
||||
@ -1251,41 +1288,47 @@ static void set_slave_heartbeat(MONITOR* mon, MONITOR_SERVERS *database) {
|
||||
/* set this node_ts as master_timestamp read from replication_heartbeat table */
|
||||
database->server->node_ts = slave_read;
|
||||
|
||||
if (rlag >= 0) {
|
||||
if (rlag >= 0)
|
||||
{
|
||||
/* store rlag only if greater than monitor sampling interval */
|
||||
database->server->rlag = (rlag > (mon->interval / 1000)) ? rlag : 0;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
database->server->rlag = -1;
|
||||
}
|
||||
|
||||
LOGIF(LD, (skygw_log_write_flush(
|
||||
LOGFILE_DEBUG,
|
||||
LOGIF(LD, (skygw_log_write_flush(LOGFILE_DEBUG,
|
||||
"[mysql_mon]: replication heartbeat: "
|
||||
"Slave %s:%i has %i seconds lag",
|
||||
database->server->name,
|
||||
database->server->port,
|
||||
database->server->rlag)));
|
||||
}
|
||||
if (!rows_found) {
|
||||
if (!rows_found)
|
||||
{
|
||||
database->server->rlag = -1;
|
||||
database->server->node_ts = 0;
|
||||
}
|
||||
|
||||
mysql_free_result(result);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
database->server->rlag = -1;
|
||||
database->server->node_ts = 0;
|
||||
|
||||
if (handle->master->server->node_id < 0) {
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
if (handle->master->server->node_id < 0)
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"[mysql_mon]: error: replication heartbeat: "
|
||||
"master_server_id NOT available for %s:%i",
|
||||
database->server->name,
|
||||
database->server->port)));
|
||||
} else {
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
}
|
||||
else
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"[mysql_mon]: error: replication heartbeat: "
|
||||
"failed selecting from hearthbeat table of %s:%i : [%s], %s",
|
||||
database->server->name,
|
||||
@ -1307,7 +1350,8 @@ static void set_slave_heartbeat(MONITOR* mon, MONITOR_SERVERS *database) {
|
||||
* @return The server at root level with SERVER_MASTER bit
|
||||
*/
|
||||
|
||||
static MONITOR_SERVERS *get_replication_tree(MONITOR *mon, int num_servers) {
|
||||
static MONITOR_SERVERS *get_replication_tree(MONITOR *mon, int num_servers)
|
||||
{
|
||||
MYSQL_MONITOR* handle = (MYSQL_MONITOR*) mon->handle;
|
||||
MONITOR_SERVERS *ptr;
|
||||
MONITOR_SERVERS *backend;
|
||||
@ -1325,7 +1369,8 @@ static MONITOR_SERVERS *get_replication_tree(MONITOR *mon, int num_servers) {
|
||||
* that means SERVER_IS_RUNNING returns 0
|
||||
* Let's check only for SERVER_IS_DOWN: server is not running
|
||||
*/
|
||||
if (SERVER_IS_DOWN(ptr->server)) {
|
||||
if (SERVER_IS_DOWN(ptr->server))
|
||||
{
|
||||
ptr = ptr->next;
|
||||
continue;
|
||||
}
|
||||
@ -1333,52 +1378,70 @@ static MONITOR_SERVERS *get_replication_tree(MONITOR *mon, int num_servers) {
|
||||
current = ptr->server;
|
||||
|
||||
node_id = current->master_id;
|
||||
if (node_id < 1) {
|
||||
if (node_id < 1)
|
||||
{
|
||||
MONITOR_SERVERS *find_slave;
|
||||
find_slave = getSlaveOfNodeId(mon->databases, current->node_id);
|
||||
|
||||
if (find_slave == NULL) {
|
||||
if (find_slave == NULL)
|
||||
{
|
||||
current->depth = -1;
|
||||
ptr = ptr->next;
|
||||
|
||||
continue;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
current->depth = 0;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
depth++;
|
||||
}
|
||||
|
||||
while(depth <= num_servers) {
|
||||
while (depth <= num_servers)
|
||||
{
|
||||
/* set the root master at lowest depth level */
|
||||
if (current->depth > -1 && current->depth < root_level) {
|
||||
if (current->depth > -1 && current->depth < root_level)
|
||||
{
|
||||
root_level = current->depth;
|
||||
handle->master = ptr;
|
||||
}
|
||||
backend = getServerByNodeId(mon->databases, node_id);
|
||||
|
||||
if (backend) {
|
||||
if (backend)
|
||||
{
|
||||
node_id = backend->server->master_id;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
node_id = -1;
|
||||
}
|
||||
|
||||
if (node_id > 0) {
|
||||
if (node_id > 0)
|
||||
{
|
||||
current->depth = depth + 1;
|
||||
depth++;
|
||||
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
MONITOR_SERVERS *master;
|
||||
current->depth = depth;
|
||||
|
||||
master = getServerByNodeId(mon->databases, current->master_id);
|
||||
if (master && master->server && master->server->node_id > 0) {
|
||||
if (master && master->server && master->server->node_id > 0)
|
||||
{
|
||||
add_slave_to_master(master->server->slaves, MONITOR_MAX_NUM_SLAVES, current->node_id);
|
||||
master->server->depth = current->depth - 1;
|
||||
monitor_set_pending_status(master, SERVER_MASTER);
|
||||
handle->master = master;
|
||||
} else {
|
||||
if (current->master_id > 0) {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (current->master_id > 0)
|
||||
{
|
||||
/* this server is slave of another server not in MaxScale configuration
|
||||
* we cannot use it as a real slave.
|
||||
*/
|
||||
@ -1398,14 +1461,20 @@ static MONITOR_SERVERS *get_replication_tree(MONITOR *mon, int num_servers) {
|
||||
* Return the root master
|
||||
*/
|
||||
|
||||
if (handle->master != NULL) {
|
||||
if (handle->master != NULL)
|
||||
{
|
||||
/* If the root master is in MAINT, return NULL */
|
||||
if (SERVER_IN_MAINT(handle->master->server)) {
|
||||
if (SERVER_IN_MAINT(handle->master->server))
|
||||
{
|
||||
return NULL;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return handle->master;
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@ -1419,10 +1488,12 @@ static MONITOR_SERVERS *get_replication_tree(MONITOR *mon, int num_servers) {
|
||||
* @param node_id The node_id of the slave to be inserted
|
||||
* @return 1 for inserted value and 0 otherwise
|
||||
*/
|
||||
static int add_slave_to_master(long *slaves_list, int list_size, long node_id) {
|
||||
int i;
|
||||
for (i = 0; i< list_size; i++) {
|
||||
if (slaves_list[i] == 0) {
|
||||
static int add_slave_to_master(long *slaves_list, int list_size, long node_id)
|
||||
{
|
||||
for (int i = 0; i < list_size; i++)
|
||||
{
|
||||
if (slaves_list[i] == 0)
|
||||
{
|
||||
memcpy(&slaves_list[i], &node_id, sizeof(long));
|
||||
return 1;
|
||||
}
|
||||
@ -1443,6 +1514,7 @@ static monitor_event_t mysql_events[] = {
|
||||
NEW_SLAVE_EVENT,
|
||||
MAX_MONITOR_EVENT
|
||||
};
|
||||
|
||||
/**
|
||||
* Check if the MySQL monitor is monitoring this event type.
|
||||
* @param event Event to check
|
||||
@ -1593,7 +1665,6 @@ bool check_replicate_wild_do_table(MONITOR_SERVERS* database)
|
||||
return rval;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Check if replicate_wild_ignore_table is defined and if it matches
|
||||
* maxscale_schema.replication_heartbeat.
|
||||
|
Reference in New Issue
Block a user