MXS-1775 Consistently name the argument to update_server_status()
This commit is contained in:
@ -52,20 +52,20 @@ void AuroraMonitor::destroy()
|
|||||||
* status of the server is adjusted accordingly based on the results of the
|
* status of the server is adjusted accordingly based on the results of the
|
||||||
* query.
|
* query.
|
||||||
*
|
*
|
||||||
* @param monitor Monitor object
|
* @param monitored_server Server whose status should be updated
|
||||||
* @param database Server whose status should be updated
|
|
||||||
*/
|
*/
|
||||||
void AuroraMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
void AuroraMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||||
{
|
{
|
||||||
if (!SERVER_IN_MAINT(database->server))
|
if (!SERVER_IN_MAINT(monitored_server->server))
|
||||||
{
|
{
|
||||||
SERVER temp_server = {};
|
SERVER temp_server = {};
|
||||||
temp_server.status = database->server->status;
|
temp_server.status = monitored_server->server->status;
|
||||||
server_clear_status_nolock(&temp_server, SERVER_RUNNING | SERVER_MASTER | SERVER_SLAVE | SERVER_AUTH_ERROR);
|
server_clear_status_nolock(&temp_server,
|
||||||
database->mon_prev_status = database->server->status;
|
SERVER_RUNNING | SERVER_MASTER | SERVER_SLAVE | SERVER_AUTH_ERROR);
|
||||||
|
monitored_server->mon_prev_status = monitored_server->server->status;
|
||||||
|
|
||||||
/** Try to connect to or ping the database */
|
/** Try to connect to or ping the database */
|
||||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, database);
|
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server);
|
||||||
|
|
||||||
if (mon_connection_is_ok(rval))
|
if (mon_connection_is_ok(rval))
|
||||||
{
|
{
|
||||||
@ -73,12 +73,12 @@ void AuroraMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
|
|
||||||
/** Connection is OK, query for replica status */
|
/** Connection is OK, query for replica status */
|
||||||
if (mxs_mysql_query(database->con, "SELECT @@aurora_server_id, server_id FROM "
|
if (mxs_mysql_query(monitored_server->con, "SELECT @@aurora_server_id, server_id FROM "
|
||||||
"information_schema.replica_host_status "
|
"information_schema.replica_host_status "
|
||||||
"WHERE session_id = 'MASTER_SESSION_ID'") == 0 &&
|
"WHERE session_id = 'MASTER_SESSION_ID'") == 0 &&
|
||||||
(result = mysql_store_result(database->con)))
|
(result = mysql_store_result(monitored_server->con)))
|
||||||
{
|
{
|
||||||
ss_dassert(mysql_field_count(database->con) == 2);
|
ss_dassert(mysql_field_count(monitored_server->con) == 2);
|
||||||
MYSQL_ROW row = mysql_fetch_row(result);
|
MYSQL_ROW row = mysql_fetch_row(result);
|
||||||
int status = SERVER_SLAVE;
|
int status = SERVER_SLAVE;
|
||||||
|
|
||||||
@ -93,24 +93,24 @@ void AuroraMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mon_report_query_error(database);
|
mon_report_query_error(monitored_server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/** Failed to connect to the database */
|
/** Failed to connect to the database */
|
||||||
if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR)
|
if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR)
|
||||||
{
|
{
|
||||||
server_set_status_nolock(&temp_server, SERVER_AUTH_ERROR);
|
server_set_status_nolock(&temp_server, SERVER_AUTH_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mon_status_changed(database) && mon_print_fail_status(database))
|
if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server))
|
||||||
{
|
{
|
||||||
mon_log_connect_error(database, rval);
|
mon_log_connect_error(monitored_server, rval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
server_transfer_status(database->server, &temp_server);
|
server_transfer_status(monitored_server->server, &temp_server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,8 +35,7 @@ private:
|
|||||||
AuroraMonitor(MXS_MONITOR* monitor);
|
AuroraMonitor(MXS_MONITOR* monitor);
|
||||||
~AuroraMonitor();
|
~AuroraMonitor();
|
||||||
|
|
||||||
void update_server_status(MXS_MONITORED_SERVER *database);
|
void update_server_status(MXS_MONITORED_SERVER* monitored_server);
|
||||||
|
|
||||||
|
|
||||||
bool has_sufficient_permissions() const;
|
bool has_sufficient_permissions() const;
|
||||||
void configure(const MXS_CONFIG_PARAMETER* params);
|
void configure(const MXS_CONFIG_PARAMETER* params);
|
||||||
|
@ -258,54 +258,53 @@ static bool using_xtrabackup(MXS_MONITORED_SERVER *database, const char* server_
|
|||||||
* slave bits, except for clearing them when a server is not joined to the
|
* slave bits, except for clearing them when a server is not joined to the
|
||||||
* cluster.
|
* cluster.
|
||||||
*
|
*
|
||||||
* @param handle The MySQL Monitor object
|
* @param monitored_server The server to probe.
|
||||||
* @param database The database to probe
|
|
||||||
*/
|
*/
|
||||||
void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||||
{
|
{
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
char *server_string;
|
char *server_string;
|
||||||
|
|
||||||
/* Don't even probe server flagged as in maintenance */
|
/* Don't even probe server flagged as in maintenance */
|
||||||
if (SERVER_IN_MAINT(database->server))
|
if (SERVER_IN_MAINT(monitored_server->server))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Store previous status */
|
/** Store previous status */
|
||||||
database->mon_prev_status = database->server->status;
|
monitored_server->mon_prev_status = monitored_server->server->status;
|
||||||
|
|
||||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, database);
|
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server);
|
||||||
if (!mon_connection_is_ok(rval))
|
if (!mon_connection_is_ok(rval))
|
||||||
{
|
{
|
||||||
if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR)
|
if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR)
|
||||||
{
|
{
|
||||||
server_set_status_nolock(database->server, SERVER_AUTH_ERROR);
|
server_set_status_nolock(monitored_server->server, SERVER_AUTH_ERROR);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
server_clear_status_nolock(database->server, SERVER_AUTH_ERROR);
|
server_clear_status_nolock(monitored_server->server, SERVER_AUTH_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
database->server->node_id = -1;
|
monitored_server->server->node_id = -1;
|
||||||
|
|
||||||
server_clear_status_nolock(database->server, SERVER_RUNNING);
|
server_clear_status_nolock(monitored_server->server, SERVER_RUNNING);
|
||||||
|
|
||||||
if (mon_status_changed(database) && mon_print_fail_status(database))
|
if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server))
|
||||||
{
|
{
|
||||||
mon_log_connect_error(database, rval);
|
mon_log_connect_error(monitored_server, rval);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we get this far then we have a working connection */
|
/* If we get this far then we have a working connection */
|
||||||
server_set_status_nolock(database->server, SERVER_RUNNING);
|
server_set_status_nolock(monitored_server->server, SERVER_RUNNING);
|
||||||
|
|
||||||
/* get server version string */
|
/* get server version string */
|
||||||
mxs_mysql_set_server_version(database->con, database->server);
|
mxs_mysql_set_server_version(monitored_server->con, monitored_server->server);
|
||||||
server_string = database->server->version_string;
|
server_string = monitored_server->server->version_string;
|
||||||
|
|
||||||
/* Check if the the Galera FSM shows this node is joined to the cluster */
|
/* Check if the the Galera FSM shows this node is joined to the cluster */
|
||||||
const char *cluster_member =
|
const char *cluster_member =
|
||||||
@ -315,10 +314,10 @@ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
" 'wsrep_local_index',"
|
" 'wsrep_local_index',"
|
||||||
" 'wsrep_local_state')";
|
" 'wsrep_local_state')";
|
||||||
|
|
||||||
if (mxs_mysql_query(database->con, cluster_member) == 0
|
if (mxs_mysql_query(monitored_server->con, cluster_member) == 0
|
||||||
&& (result = mysql_store_result(database->con)) != NULL)
|
&& (result = mysql_store_result(monitored_server->con)) != NULL)
|
||||||
{
|
{
|
||||||
if (mysql_field_count(database->con) < 2)
|
if (mysql_field_count(monitored_server->con) < 2)
|
||||||
{
|
{
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
MXS_ERROR("Unexpected result for \"%s\". "
|
MXS_ERROR("Unexpected result for \"%s\". "
|
||||||
@ -344,7 +343,7 @@ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
if (warn_erange_on_local_index)
|
if (warn_erange_on_local_index)
|
||||||
{
|
{
|
||||||
MXS_WARNING("Invalid 'wsrep_local_index' on server '%s': %s",
|
MXS_WARNING("Invalid 'wsrep_local_index' on server '%s': %s",
|
||||||
database->server->name, row[1]);
|
monitored_server->server->name, row[1]);
|
||||||
warn_erange_on_local_index = false;
|
warn_erange_on_local_index = false;
|
||||||
}
|
}
|
||||||
local_index = -1;
|
local_index = -1;
|
||||||
@ -365,7 +364,7 @@ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
}
|
}
|
||||||
/* Check if the node is a donor and is using xtrabackup, in this case it can stay alive */
|
/* Check if the node is a donor and is using xtrabackup, in this case it can stay alive */
|
||||||
else if (strcmp(row[1], "2") == 0 && m_availableWhenDonor == 1 &&
|
else if (strcmp(row[1], "2") == 0 && m_availableWhenDonor == 1 &&
|
||||||
using_xtrabackup(database, server_string))
|
using_xtrabackup(monitored_server, server_string))
|
||||||
{
|
{
|
||||||
info.joined = 1;
|
info.joined = 1;
|
||||||
}
|
}
|
||||||
@ -388,7 +387,7 @@ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
if (row[1] == NULL || !strlen(row[1]))
|
if (row[1] == NULL || !strlen(row[1]))
|
||||||
{
|
{
|
||||||
MXS_DEBUG("Node %s is not running Galera Cluster",
|
MXS_DEBUG("Node %s is not running Galera Cluster",
|
||||||
database->server->name);
|
monitored_server->server->name);
|
||||||
info.cluster_uuid = NULL;
|
info.cluster_uuid = NULL;
|
||||||
info.joined = 0;
|
info.joined = 0;
|
||||||
}
|
}
|
||||||
@ -399,19 +398,19 @@ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
database->server->node_id = info.joined ? info.local_index : -1;
|
monitored_server->server->node_id = info.joined ? info.local_index : -1;
|
||||||
|
|
||||||
/* Add server pointer */
|
/* Add server pointer */
|
||||||
info.node = database->server;
|
info.node = monitored_server->server;
|
||||||
|
|
||||||
/* Galera Cluster vars fetch */
|
/* Galera Cluster vars fetch */
|
||||||
HASHTABLE *table = m_galera_nodes_info;
|
HASHTABLE *table = m_galera_nodes_info;
|
||||||
GALERA_NODE_INFO *node =
|
GALERA_NODE_INFO *node =
|
||||||
static_cast<GALERA_NODE_INFO*>(hashtable_fetch(table, database->server->name));
|
static_cast<GALERA_NODE_INFO*>(hashtable_fetch(table, monitored_server->server->name));
|
||||||
if (node)
|
if (node)
|
||||||
{
|
{
|
||||||
MXS_DEBUG("Node %s is present in galera_nodes_info, updtating info",
|
MXS_DEBUG("Node %s is present in galera_nodes_info, updtating info",
|
||||||
database->server->name);
|
monitored_server->server->name);
|
||||||
|
|
||||||
MXS_FREE(node->cluster_uuid);
|
MXS_FREE(node->cluster_uuid);
|
||||||
/* Update node data */
|
/* Update node data */
|
||||||
@ -419,17 +418,17 @@ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (hashtable_add(table, database->server->name, &info))
|
if (hashtable_add(table, monitored_server->server->name, &info))
|
||||||
{
|
{
|
||||||
MXS_DEBUG("Added %s to galera_nodes_info",
|
MXS_DEBUG("Added %s to galera_nodes_info",
|
||||||
database->server->name);
|
monitored_server->server->name);
|
||||||
}
|
}
|
||||||
/* Free the info.cluster_uuid as it's been added to the table */
|
/* Free the info.cluster_uuid as it's been added to the table */
|
||||||
MXS_FREE(info.cluster_uuid);
|
MXS_FREE(info.cluster_uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
MXS_DEBUG("Server %s: local_state %d, local_index %d, UUID %s, size %d, possible member %d",
|
MXS_DEBUG("Server %s: local_state %d, local_index %d, UUID %s, size %d, possible member %d",
|
||||||
database->server->name,
|
monitored_server->server->name,
|
||||||
info.local_state,
|
info.local_state,
|
||||||
info.local_index,
|
info.local_index,
|
||||||
info.cluster_uuid ? info.cluster_uuid : "_none_",
|
info.cluster_uuid ? info.cluster_uuid : "_none_",
|
||||||
@ -440,7 +439,7 @@ void GaleraMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mon_report_query_error(database);
|
mon_report_query_error(monitored_server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ private:
|
|||||||
const char *candidate_uuid,
|
const char *candidate_uuid,
|
||||||
const int candidate_size);
|
const int candidate_size);
|
||||||
MXS_MONITORED_SERVER *get_candidate_master();
|
MXS_MONITORED_SERVER *get_candidate_master();
|
||||||
void update_server_status(MXS_MONITORED_SERVER *database);
|
void update_server_status(MXS_MONITORED_SERVER* monitored_server);
|
||||||
void reset_cluster_info();
|
void reset_cluster_info();
|
||||||
void set_cluster_members();
|
void set_cluster_members();
|
||||||
void set_galera_cluster();
|
void set_galera_cluster();
|
||||||
|
@ -125,59 +125,59 @@ static bool is_slave(MXS_MONITORED_SERVER* server)
|
|||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GRMon::update_server_status(MXS_MONITORED_SERVER* server)
|
void GRMon::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||||
{
|
{
|
||||||
/* Don't even probe server flagged as in maintenance */
|
/* Don't even probe server flagged as in maintenance */
|
||||||
if (SERVER_IN_MAINT(server->server))
|
if (SERVER_IN_MAINT(monitored_server->server))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Store previous status */
|
/** Store previous status */
|
||||||
server->mon_prev_status = server->server->status;
|
monitored_server->mon_prev_status = monitored_server->server->status;
|
||||||
|
|
||||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, server);
|
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server);
|
||||||
|
|
||||||
if (!mon_connection_is_ok(rval))
|
if (!mon_connection_is_ok(rval))
|
||||||
{
|
{
|
||||||
if (mysql_errno(server->con) == ER_ACCESS_DENIED_ERROR)
|
if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR)
|
||||||
{
|
{
|
||||||
server_set_status_nolock(server->server, SERVER_AUTH_ERROR);
|
server_set_status_nolock(monitored_server->server, SERVER_AUTH_ERROR);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
server_clear_status_nolock(server->server, SERVER_AUTH_ERROR);
|
server_clear_status_nolock(monitored_server->server, SERVER_AUTH_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
server->server->node_id = -1;
|
monitored_server->server->node_id = -1;
|
||||||
|
|
||||||
server_clear_status_nolock(server->server, SERVER_RUNNING);
|
server_clear_status_nolock(monitored_server->server, SERVER_RUNNING);
|
||||||
|
|
||||||
if (mon_status_changed(server) && mon_print_fail_status(server))
|
if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server))
|
||||||
{
|
{
|
||||||
mon_log_connect_error(server, rval);
|
mon_log_connect_error(monitored_server, rval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* If we get this far then we have a working connection */
|
/* If we get this far then we have a working connection */
|
||||||
server_set_status_nolock(server->server, SERVER_RUNNING);
|
server_set_status_nolock(monitored_server->server, SERVER_RUNNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_master(server))
|
if (is_master(monitored_server))
|
||||||
{
|
{
|
||||||
server_set_status_nolock(server->server, SERVER_MASTER);
|
server_set_status_nolock(monitored_server->server, SERVER_MASTER);
|
||||||
server_clear_status_nolock(server->server, SERVER_SLAVE);
|
server_clear_status_nolock(monitored_server->server, SERVER_SLAVE);
|
||||||
}
|
}
|
||||||
else if (is_slave(server))
|
else if (is_slave(monitored_server))
|
||||||
{
|
{
|
||||||
server_set_status_nolock(server->server, SERVER_SLAVE);
|
server_set_status_nolock(monitored_server->server, SERVER_SLAVE);
|
||||||
server_clear_status_nolock(server->server, SERVER_MASTER);
|
server_clear_status_nolock(monitored_server->server, SERVER_MASTER);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
server_clear_status_nolock(server->server, SERVER_SLAVE);
|
server_clear_status_nolock(monitored_server->server, SERVER_SLAVE);
|
||||||
server_clear_status_nolock(server->server, SERVER_MASTER);
|
server_clear_status_nolock(monitored_server->server, SERVER_MASTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ private:
|
|||||||
GRMon(MXS_MONITOR* monitor);
|
GRMon(MXS_MONITOR* monitor);
|
||||||
~GRMon();
|
~GRMon();
|
||||||
|
|
||||||
void update_server_status(MXS_MONITORED_SERVER* server);
|
void update_server_status(MXS_MONITORED_SERVER* monitored_server);
|
||||||
|
|
||||||
bool has_sufficient_permissions() const;
|
bool has_sufficient_permissions() const;
|
||||||
void configure(const MXS_CONFIG_PARAMETER* params);
|
void configure(const MXS_CONFIG_PARAMETER* params);
|
||||||
|
@ -142,10 +142,9 @@ json_t* MMMonitor::diagnostics_json() const
|
|||||||
/**
|
/**
|
||||||
* Monitor an individual server
|
* Monitor an individual server
|
||||||
*
|
*
|
||||||
* @param handle The MySQL Monitor object
|
* @param monitored_server The server to probe
|
||||||
* @param database The database to probe
|
|
||||||
*/
|
*/
|
||||||
void MMMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
void MMMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||||
{
|
{
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
@ -155,65 +154,65 @@ void MMMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
char *server_string;
|
char *server_string;
|
||||||
|
|
||||||
/* Don't probe servers in maintenance mode */
|
/* Don't probe servers in maintenance mode */
|
||||||
if (SERVER_IN_MAINT(database->server))
|
if (SERVER_IN_MAINT(monitored_server->server))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Store previous status */
|
/** Store previous status */
|
||||||
database->mon_prev_status = database->server->status;
|
monitored_server->mon_prev_status = monitored_server->server->status;
|
||||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, database);
|
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server);
|
||||||
|
|
||||||
if (!mon_connection_is_ok(rval))
|
if (!mon_connection_is_ok(rval))
|
||||||
{
|
{
|
||||||
if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR)
|
if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR)
|
||||||
{
|
{
|
||||||
server_set_status_nolock(database->server, SERVER_AUTH_ERROR);
|
server_set_status_nolock(monitored_server->server, SERVER_AUTH_ERROR);
|
||||||
monitor_set_pending_status(database, SERVER_AUTH_ERROR);
|
monitor_set_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||||
}
|
}
|
||||||
server_clear_status_nolock(database->server, SERVER_RUNNING);
|
server_clear_status_nolock(monitored_server->server, SERVER_RUNNING);
|
||||||
monitor_clear_pending_status(database, SERVER_RUNNING);
|
monitor_clear_pending_status(monitored_server, SERVER_RUNNING);
|
||||||
|
|
||||||
/* Also clear M/S state in both server and monitor server pending struct */
|
/* Also clear M/S state in both server and monitor server pending struct */
|
||||||
server_clear_status_nolock(database->server, SERVER_SLAVE);
|
server_clear_status_nolock(monitored_server->server, SERVER_SLAVE);
|
||||||
server_clear_status_nolock(database->server, SERVER_MASTER);
|
server_clear_status_nolock(monitored_server->server, SERVER_MASTER);
|
||||||
monitor_clear_pending_status(database, SERVER_SLAVE);
|
monitor_clear_pending_status(monitored_server, SERVER_SLAVE);
|
||||||
monitor_clear_pending_status(database, SERVER_MASTER);
|
monitor_clear_pending_status(monitored_server, SERVER_MASTER);
|
||||||
|
|
||||||
/* Clean addition status too */
|
/* Clean addition status too */
|
||||||
server_clear_status_nolock(database->server, SERVER_STALE_STATUS);
|
server_clear_status_nolock(monitored_server->server, SERVER_STALE_STATUS);
|
||||||
monitor_clear_pending_status(database, SERVER_STALE_STATUS);
|
monitor_clear_pending_status(monitored_server, SERVER_STALE_STATUS);
|
||||||
|
|
||||||
if (mon_status_changed(database) && mon_print_fail_status(database))
|
if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server))
|
||||||
{
|
{
|
||||||
mon_log_connect_error(database, rval);
|
mon_log_connect_error(monitored_server, rval);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
server_clear_status_nolock(database->server, SERVER_AUTH_ERROR);
|
server_clear_status_nolock(monitored_server->server, SERVER_AUTH_ERROR);
|
||||||
monitor_clear_pending_status(database, SERVER_AUTH_ERROR);
|
monitor_clear_pending_status(monitored_server, SERVER_AUTH_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Store current status in both server and monitor server pending struct */
|
/* Store current status in both server and monitor server pending struct */
|
||||||
server_set_status_nolock(database->server, SERVER_RUNNING);
|
server_set_status_nolock(monitored_server->server, SERVER_RUNNING);
|
||||||
monitor_set_pending_status(database, SERVER_RUNNING);
|
monitor_set_pending_status(monitored_server, SERVER_RUNNING);
|
||||||
|
|
||||||
/* get server version from current server */
|
/* get server version from current server */
|
||||||
server_version = mysql_get_server_version(database->con);
|
server_version = mysql_get_server_version(monitored_server->con);
|
||||||
|
|
||||||
/* get server version string */
|
/* get server version string */
|
||||||
mxs_mysql_set_server_version(database->con, database->server);
|
mxs_mysql_set_server_version(monitored_server->con, monitored_server->server);
|
||||||
server_string = database->server->version_string;
|
server_string = monitored_server->server->version_string;
|
||||||
|
|
||||||
/* get server_id form current node */
|
/* get server_id form current node */
|
||||||
if (mxs_mysql_query(database->con, "SELECT @@server_id") == 0
|
if (mxs_mysql_query(monitored_server->con, "SELECT @@server_id") == 0
|
||||||
&& (result = mysql_store_result(database->con)) != NULL)
|
&& (result = mysql_store_result(monitored_server->con)) != NULL)
|
||||||
{
|
{
|
||||||
long server_id = -1;
|
long server_id = -1;
|
||||||
|
|
||||||
if (mysql_field_count(database->con) != 1)
|
if (mysql_field_count(monitored_server->con) != 1)
|
||||||
{
|
{
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
MXS_ERROR("Unexpected result for 'SELECT @@server_id'. Expected 1 column."
|
MXS_ERROR("Unexpected result for 'SELECT @@server_id'. Expected 1 column."
|
||||||
@ -229,13 +228,13 @@ void MMMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
{
|
{
|
||||||
server_id = -1;
|
server_id = -1;
|
||||||
}
|
}
|
||||||
database->server->node_id = server_id;
|
monitored_server->server->node_id = server_id;
|
||||||
}
|
}
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mon_report_query_error(database);
|
mon_report_query_error(monitored_server);
|
||||||
}
|
}
|
||||||
/* Check if the Slave_SQL_Running and Slave_IO_Running status is
|
/* Check if the Slave_SQL_Running and Slave_IO_Running status is
|
||||||
* set to Yes
|
* set to Yes
|
||||||
@ -245,13 +244,13 @@ void MMMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
if (server_version >= 100000)
|
if (server_version >= 100000)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (mxs_mysql_query(database->con, "SHOW ALL SLAVES STATUS") == 0
|
if (mxs_mysql_query(monitored_server->con, "SHOW ALL SLAVES STATUS") == 0
|
||||||
&& (result = mysql_store_result(database->con)) != NULL)
|
&& (result = mysql_store_result(monitored_server->con)) != NULL)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
long master_id = -1;
|
long master_id = -1;
|
||||||
|
|
||||||
if (mysql_field_count(database->con) < 42)
|
if (mysql_field_count(monitored_server->con) < 42)
|
||||||
{
|
{
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
MXS_ERROR("\"SHOW ALL SLAVES STATUS\" returned less than the expected"
|
MXS_ERROR("\"SHOW ALL SLAVES STATUS\" returned less than the expected"
|
||||||
@ -287,7 +286,7 @@ void MMMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
/* store master_id of current node */
|
/* store master_id of current node */
|
||||||
memcpy(&database->server->master_id, &master_id, sizeof(long));
|
memcpy(&monitored_server->server->master_id, &master_id, sizeof(long));
|
||||||
|
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
|
|
||||||
@ -303,29 +302,29 @@ void MMMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mon_report_query_error(database);
|
mon_report_query_error(monitored_server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (mxs_mysql_query(database->con, "SHOW SLAVE STATUS") == 0
|
if (mxs_mysql_query(monitored_server->con, "SHOW SLAVE STATUS") == 0
|
||||||
&& (result = mysql_store_result(database->con)) != NULL)
|
&& (result = mysql_store_result(monitored_server->con)) != NULL)
|
||||||
{
|
{
|
||||||
long master_id = -1;
|
long master_id = -1;
|
||||||
|
|
||||||
if (mysql_field_count(database->con) < 40)
|
if (mysql_field_count(monitored_server->con) < 40)
|
||||||
{
|
{
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
|
|
||||||
if (server_version < 5 * 10000 + 5 * 100)
|
if (server_version < 5 * 10000 + 5 * 100)
|
||||||
{
|
{
|
||||||
if (database->log_version_err)
|
if (monitored_server->log_version_err)
|
||||||
{
|
{
|
||||||
MXS_ERROR("\"SHOW SLAVE STATUS\" "
|
MXS_ERROR("\"SHOW SLAVE STATUS\" "
|
||||||
" for versions less than 5.5 does not have master_server_id, "
|
" for versions less than 5.5 does not have master_server_id, "
|
||||||
"replication tree cannot be resolved for server %s."
|
"replication tree cannot be resolved for server %s."
|
||||||
" MySQL Version: %s", database->server->name, server_string);
|
" MySQL Version: %s", monitored_server->server->name, server_string);
|
||||||
database->log_version_err = false;
|
monitored_server->log_version_err = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -362,21 +361,21 @@ void MMMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* store master_id of current node */
|
/* store master_id of current node */
|
||||||
memcpy(&database->server->master_id, &master_id, sizeof(long));
|
memcpy(&monitored_server->server->master_id, &master_id, sizeof(long));
|
||||||
|
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mon_report_query_error(database);
|
mon_report_query_error(monitored_server);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get variable 'read_only' set by an external component */
|
/* get variable 'read_only' set by an external component */
|
||||||
if (mxs_mysql_query(database->con, "SHOW GLOBAL VARIABLES LIKE 'read_only'") == 0
|
if (mxs_mysql_query(monitored_server->con, "SHOW GLOBAL VARIABLES LIKE 'read_only'") == 0
|
||||||
&& (result = mysql_store_result(database->con)) != NULL)
|
&& (result = mysql_store_result(monitored_server->con)) != NULL)
|
||||||
{
|
{
|
||||||
if (mysql_field_count(database->con) < 2)
|
if (mysql_field_count(monitored_server->con) < 2)
|
||||||
{
|
{
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
MXS_ERROR("Unexpected result for \"SHOW GLOBAL VARIABLES LIKE 'read_only'\". "
|
MXS_ERROR("Unexpected result for \"SHOW GLOBAL VARIABLES LIKE 'read_only'\". "
|
||||||
@ -399,36 +398,36 @@ void MMMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mon_report_query_error(database);
|
mon_report_query_error(monitored_server);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove addition info */
|
/* Remove addition info */
|
||||||
monitor_clear_pending_status(database, SERVER_STALE_STATUS);
|
monitor_clear_pending_status(monitored_server, SERVER_STALE_STATUS);
|
||||||
|
|
||||||
/* Set the Slave Role */
|
/* Set the Slave Role */
|
||||||
/* Set the Master role */
|
/* Set the Master role */
|
||||||
if (ismaster)
|
if (ismaster)
|
||||||
{
|
{
|
||||||
monitor_clear_pending_status(database, SERVER_SLAVE);
|
monitor_clear_pending_status(monitored_server, SERVER_SLAVE);
|
||||||
monitor_set_pending_status(database, SERVER_MASTER);
|
monitor_set_pending_status(monitored_server, SERVER_MASTER);
|
||||||
|
|
||||||
/* Set replication depth to 0 */
|
/* Set replication depth to 0 */
|
||||||
database->server->depth = 0;
|
monitored_server->server->depth = 0;
|
||||||
}
|
}
|
||||||
else if (isslave)
|
else if (isslave)
|
||||||
{
|
{
|
||||||
monitor_set_pending_status(database, SERVER_SLAVE);
|
monitor_set_pending_status(monitored_server, SERVER_SLAVE);
|
||||||
/* Avoid any possible stale Master state */
|
/* Avoid any possible stale Master state */
|
||||||
monitor_clear_pending_status(database, SERVER_MASTER);
|
monitor_clear_pending_status(monitored_server, SERVER_MASTER);
|
||||||
|
|
||||||
/* Set replication depth to 1 */
|
/* Set replication depth to 1 */
|
||||||
database->server->depth = 1;
|
monitored_server->server->depth = 1;
|
||||||
}
|
}
|
||||||
/* Avoid any possible Master/Slave stale state */
|
/* Avoid any possible Master/Slave stale state */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
monitor_clear_pending_status(database, SERVER_SLAVE);
|
monitor_clear_pending_status(monitored_server, SERVER_SLAVE);
|
||||||
monitor_clear_pending_status(database, SERVER_MASTER);
|
monitor_clear_pending_status(monitored_server, SERVER_MASTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ private:
|
|||||||
|
|
||||||
MXS_MONITORED_SERVER *get_current_master();
|
MXS_MONITORED_SERVER *get_current_master();
|
||||||
|
|
||||||
void update_server_status(MXS_MONITORED_SERVER *database);
|
void update_server_status(MXS_MONITORED_SERVER* monitored_server);
|
||||||
|
|
||||||
bool has_sufficient_permissions() const;
|
bool has_sufficient_permissions() const;
|
||||||
void configure(const MXS_CONFIG_PARAMETER* params);
|
void configure(const MXS_CONFIG_PARAMETER* params);
|
||||||
|
@ -127,7 +127,7 @@ static json_t* diagnostics_json(const MXS_MONITOR_INSTANCE *mon)
|
|||||||
*
|
*
|
||||||
* @param database The database to probe
|
* @param database The database to probe
|
||||||
*/
|
*/
|
||||||
void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
||||||
{
|
{
|
||||||
MYSQL_ROW row;
|
MYSQL_ROW row;
|
||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
@ -135,43 +135,43 @@ void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
char *server_string;
|
char *server_string;
|
||||||
|
|
||||||
/* Don't even probe server flagged as in maintenance */
|
/* Don't even probe server flagged as in maintenance */
|
||||||
if (SERVER_IN_MAINT(database->server))
|
if (SERVER_IN_MAINT(monitored_server->server))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, database);
|
mxs_connect_result_t rval = mon_ping_or_connect_to_db(m_monitor, monitored_server);
|
||||||
if (!mon_connection_is_ok(rval))
|
if (!mon_connection_is_ok(rval))
|
||||||
{
|
{
|
||||||
server_clear_status_nolock(database->server, SERVER_RUNNING);
|
server_clear_status_nolock(monitored_server->server, SERVER_RUNNING);
|
||||||
|
|
||||||
if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR)
|
if (mysql_errno(monitored_server->con) == ER_ACCESS_DENIED_ERROR)
|
||||||
{
|
{
|
||||||
server_set_status_nolock(database->server, SERVER_AUTH_ERROR);
|
server_set_status_nolock(monitored_server->server, SERVER_AUTH_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
database->server->node_id = -1;
|
monitored_server->server->node_id = -1;
|
||||||
|
|
||||||
if (mon_status_changed(database) && mon_print_fail_status(database))
|
if (mon_status_changed(monitored_server) && mon_print_fail_status(monitored_server))
|
||||||
{
|
{
|
||||||
mon_log_connect_error(database, rval);
|
mon_log_connect_error(monitored_server, rval);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
server_clear_status_nolock(database->server, SERVER_AUTH_ERROR);
|
server_clear_status_nolock(monitored_server->server, SERVER_AUTH_ERROR);
|
||||||
/* If we get this far then we have a working connection */
|
/* If we get this far then we have a working connection */
|
||||||
server_set_status_nolock(database->server, SERVER_RUNNING);
|
server_set_status_nolock(monitored_server->server, SERVER_RUNNING);
|
||||||
|
|
||||||
/* get server version string */
|
/* get server version string */
|
||||||
mxs_mysql_set_server_version(database->con, database->server);
|
mxs_mysql_set_server_version(monitored_server->con, monitored_server->server);
|
||||||
server_string = database->server->version_string;
|
server_string = monitored_server->server->version_string;
|
||||||
|
|
||||||
/* Check if the the SQL node is able to contact one or more data nodes */
|
/* Check if the the SQL node is able to contact one or more data nodes */
|
||||||
if (mxs_mysql_query(database->con, "SHOW STATUS LIKE 'Ndb_number_of_ready_data_nodes'") == 0
|
if (mxs_mysql_query(monitored_server->con, "SHOW STATUS LIKE 'Ndb_number_of_ready_data_nodes'") == 0
|
||||||
&& (result = mysql_store_result(database->con)) != NULL)
|
&& (result = mysql_store_result(monitored_server->con)) != NULL)
|
||||||
{
|
{
|
||||||
if (mysql_field_count(database->con) < 2)
|
if (mysql_field_count(monitored_server->con) < 2)
|
||||||
{
|
{
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
MXS_ERROR("Unexpected result for \"SHOW STATUS LIKE "
|
MXS_ERROR("Unexpected result for \"SHOW STATUS LIKE "
|
||||||
@ -191,14 +191,14 @@ void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mon_report_query_error(database);
|
mon_report_query_error(monitored_server);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check the the SQL node id in the MySQL cluster */
|
/* Check the the SQL node id in the MySQL cluster */
|
||||||
if (mxs_mysql_query(database->con, "SHOW STATUS LIKE 'Ndb_cluster_node_id'") == 0
|
if (mxs_mysql_query(monitored_server->con, "SHOW STATUS LIKE 'Ndb_cluster_node_id'") == 0
|
||||||
&& (result = mysql_store_result(database->con)) != NULL)
|
&& (result = mysql_store_result(monitored_server->con)) != NULL)
|
||||||
{
|
{
|
||||||
if (mysql_field_count(database->con) < 2)
|
if (mysql_field_count(monitored_server->con) < 2)
|
||||||
{
|
{
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
MXS_ERROR("Unexpected result for \"SHOW STATUS LIKE 'Ndb_cluster_node_id'\". "
|
MXS_ERROR("Unexpected result for \"SHOW STATUS LIKE 'Ndb_cluster_node_id'\". "
|
||||||
@ -216,24 +216,24 @@ void NDBCMonitor::update_server_status(MXS_MONITORED_SERVER *database)
|
|||||||
{
|
{
|
||||||
cluster_node_id = -1;
|
cluster_node_id = -1;
|
||||||
}
|
}
|
||||||
database->server->node_id = cluster_node_id;
|
monitored_server->server->node_id = cluster_node_id;
|
||||||
}
|
}
|
||||||
mysql_free_result(result);
|
mysql_free_result(result);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mon_report_query_error(database);
|
mon_report_query_error(monitored_server);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isjoined)
|
if (isjoined)
|
||||||
{
|
{
|
||||||
server_set_status_nolock(database->server, SERVER_NDB);
|
server_set_status_nolock(monitored_server->server, SERVER_NDB);
|
||||||
database->server->depth = 0;
|
monitored_server->server->depth = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
server_clear_status_nolock(database->server, SERVER_NDB);
|
server_clear_status_nolock(monitored_server->server, SERVER_NDB);
|
||||||
database->server->depth = -1;
|
monitored_server->server->depth = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ private:
|
|||||||
NDBCMonitor(MXS_MONITOR* monitor);
|
NDBCMonitor(MXS_MONITOR* monitor);
|
||||||
~NDBCMonitor();
|
~NDBCMonitor();
|
||||||
|
|
||||||
void update_server_status(MXS_MONITORED_SERVER *database);
|
void update_server_status(MXS_MONITORED_SERVER* monitored_server);
|
||||||
|
|
||||||
bool has_sufficient_permissions() const;
|
bool has_sufficient_permissions() const;
|
||||||
void configure(const MXS_CONFIG_PARAMETER* params);
|
void configure(const MXS_CONFIG_PARAMETER* params);
|
||||||
|
Reference in New Issue
Block a user