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;
|
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
|
* Add a user name and password to use for monitoring the
|
||||||
* state of the server.
|
* state of the server.
|
||||||
|
@ -202,6 +202,7 @@ extern void dListServers(DCB *);
|
|||||||
extern char *server_status(SERVER *);
|
extern char *server_status(SERVER *);
|
||||||
extern void server_set_status(SERVER *, int);
|
extern void server_set_status(SERVER *, int);
|
||||||
extern void server_clear_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 serverAddMonUser(SERVER *, char *, char *);
|
||||||
extern void serverAddParameter(SERVER *, char *, char *);
|
extern void serverAddParameter(SERVER *, char *, char *);
|
||||||
extern char *serverGetParameter(SERVER *, char *);
|
extern char *serverGetParameter(SERVER *, char *);
|
||||||
|
@ -281,6 +281,7 @@ monitorDatabase(MONITOR *mon, MONITOR_SERVERS *database)
|
|||||||
int isjoined = 0;
|
int isjoined = 0;
|
||||||
unsigned long int server_version = 0;
|
unsigned long int server_version = 0;
|
||||||
char *server_string;
|
char *server_string;
|
||||||
|
SERVER temp_server;
|
||||||
|
|
||||||
/* 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(database->server))
|
||||||
@ -289,24 +290,25 @@ monitorDatabase(MONITOR *mon, MONITOR_SERVERS *database)
|
|||||||
/** Store previous status */
|
/** Store previous status */
|
||||||
database->mon_prev_status = database->server->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 */
|
/* Also clear Joined, M/S and Stickiness bits */
|
||||||
server_clear_status(database->server, SERVER_JOINED);
|
server_clear_status(&temp_server, SERVER_JOINED);
|
||||||
server_clear_status(database->server, SERVER_SLAVE);
|
server_clear_status(&temp_server, SERVER_SLAVE);
|
||||||
server_clear_status(database->server, SERVER_MASTER);
|
server_clear_status(&temp_server, SERVER_MASTER);
|
||||||
server_clear_status(database->server, SERVER_MASTER_STICKINESS);
|
server_clear_status(&temp_server, SERVER_MASTER_STICKINESS);
|
||||||
|
|
||||||
connect_result_t rval = mon_connect_to_db(mon, database);
|
connect_result_t rval = mon_connect_to_db(mon, database);
|
||||||
if (rval != MONITOR_CONN_OK)
|
if (rval != MONITOR_CONN_OK)
|
||||||
{
|
{
|
||||||
if (mysql_errno(database->con) == ER_ACCESS_DENIED_ERROR)
|
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
|
else
|
||||||
{
|
{
|
||||||
server_clear_status(database->server, SERVER_AUTH_ERROR);
|
server_clear_status(&temp_server, SERVER_AUTH_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
database->server->node_id = -1;
|
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 */
|
/* 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 */
|
/* get server version string */
|
||||||
server_string = (char *) mysql_get_server_info(database->con);
|
server_string = (char *) mysql_get_server_info(database->con);
|
||||||
@ -404,12 +406,14 @@ monitorDatabase(MONITOR *mon, MONITOR_SERVERS *database)
|
|||||||
|
|
||||||
if (isjoined)
|
if (isjoined)
|
||||||
{
|
{
|
||||||
server_set_status(database->server, SERVER_JOINED);
|
server_set_status(&temp_server, SERVER_JOINED);
|
||||||
}
|
}
|
||||||
else
|
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 */
|
/* log it once */
|
||||||
if (mon_status_changed(ptr))
|
if (mon_status_changed(ptr))
|
||||||
{
|
{
|
||||||
MXS_NOTICE("[mysql_mon]: root server "
|
MXS_WARNING("[mysql_mon]: root server "
|
||||||
"[%s:%i] is no longer Master,"
|
"[%s:%i] is no longer Master,"
|
||||||
" let's use it again even "
|
" let's use it again even "
|
||||||
" if it could be a stale master,"
|
" if it could be a stale master,"
|
||||||
|
Reference in New Issue
Block a user