Fix Galera monitor problem with leaving wrong status for significant periods; change warning message from logging as warning instead of notice.
This commit is contained in:
@ -686,6 +686,18 @@ server_clear_status(SERVER *server, int bit)
|
||||
server->status &= ~bit;
|
||||
}
|
||||
|
||||
/**
|
||||
* Transfer status bitstring from one server to another
|
||||
*
|
||||
* @param dest_server The server to be updated
|
||||
* @param source_server The server to provide the new bit string
|
||||
*/
|
||||
void
|
||||
server_transfer_status(SERVER *dest_server, SERVER *source_server)
|
||||
{
|
||||
dest_server->status = source_server->status;
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a user name and password to use for monitoring the
|
||||
* state of the server.
|
||||
|
@ -202,6 +202,7 @@ extern void dListServers(DCB *);
|
||||
extern char *server_status(SERVER *);
|
||||
extern void server_set_status(SERVER *, int);
|
||||
extern void server_clear_status(SERVER *, int);
|
||||
extern void server_transfer_status(SERVER *dest_server, SERVER *source_server);
|
||||
extern void serverAddMonUser(SERVER *, char *, char *);
|
||||
extern void serverAddParameter(SERVER *, char *, char *);
|
||||
extern char *serverGetParameter(SERVER *, char *);
|
||||
|
@ -281,6 +281,7 @@ monitorDatabase(MONITOR *mon, MONITOR_SERVERS *database)
|
||||
int isjoined = 0;
|
||||
unsigned long int server_version = 0;
|
||||
char *server_string;
|
||||
SERVER temp_server;
|
||||
|
||||
/* Don't even probe server flagged as in maintenance */
|
||||
if (SERVER_IN_MAINT(database->server))
|
||||
@ -289,24 +290,25 @@ monitorDatabase(MONITOR *mon, MONITOR_SERVERS *database)
|
||||
/** Store previous status */
|
||||
database->mon_prev_status = database->server->status;
|
||||
|
||||
server_clear_status(database->server, SERVER_RUNNING);
|
||||
server_transfer_status(&temp_server, database->server);
|
||||
server_clear_status(&temp_server, SERVER_RUNNING);
|
||||
|
||||
/* Also clear Joined, M/S and Stickiness bits */
|
||||
server_clear_status(database->server, SERVER_JOINED);
|
||||
server_clear_status(database->server, SERVER_SLAVE);
|
||||
server_clear_status(database->server, SERVER_MASTER);
|
||||
server_clear_status(database->server, SERVER_MASTER_STICKINESS);
|
||||
server_clear_status(&temp_server, SERVER_JOINED);
|
||||
server_clear_status(&temp_server, SERVER_SLAVE);
|
||||
server_clear_status(&temp_server, SERVER_MASTER);
|
||||
server_clear_status(&temp_server, SERVER_MASTER_STICKINESS);
|
||||
|
||||
connect_result_t rval = mon_connect_to_db(mon, database);
|
||||
if (rval != MONITOR_CONN_OK)
|
||||
{
|
||||
if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR)
|
||||
{
|
||||
server_set_status(database->server, SERVER_AUTH_ERROR);
|
||||
server_set_status(&temp_server, SERVER_AUTH_ERROR);
|
||||
}
|
||||
else
|
||||
{
|
||||
server_clear_status(database->server, SERVER_AUTH_ERROR);
|
||||
server_clear_status(&temp_server, SERVER_AUTH_ERROR);
|
||||
}
|
||||
|
||||
database->server->node_id = -1;
|
||||
@ -320,7 +322,7 @@ monitorDatabase(MONITOR *mon, MONITOR_SERVERS *database)
|
||||
}
|
||||
|
||||
/* If we get this far then we have a working connection */
|
||||
server_set_status(database->server, SERVER_RUNNING);
|
||||
server_set_status(&temp_server, SERVER_RUNNING);
|
||||
|
||||
/* get server version string */
|
||||
server_string = (char *) mysql_get_server_info(database->con);
|
||||
@ -404,12 +406,14 @@ monitorDatabase(MONITOR *mon, MONITOR_SERVERS *database)
|
||||
|
||||
if (isjoined)
|
||||
{
|
||||
server_set_status(database->server, SERVER_JOINED);
|
||||
server_set_status(&temp_server, SERVER_JOINED);
|
||||
}
|
||||
else
|
||||
{
|
||||
server_clear_status(database->server, SERVER_JOINED);
|
||||
server_clear_status(&temp_server, SERVER_JOINED);
|
||||
}
|
||||
|
||||
server_transfer_status(database->server, &temp_server);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -919,7 +919,7 @@ monitorMain(void *arg)
|
||||
/* log it once */
|
||||
if (mon_status_changed(ptr))
|
||||
{
|
||||
MXS_NOTICE("[mysql_mon]: root server "
|
||||
MXS_WARNING("[mysql_mon]: root server "
|
||||
"[%s:%i] is no longer Master,"
|
||||
" let's use it again even "
|
||||
" if it could be a stale master,"
|
||||
|
Reference in New Issue
Block a user