Fix galera master selection

The master selection still used the current status instead of the pending
status. This caused the master selection to lag behind by one monitor
loop.
This commit is contained in:
Markus Mäkelä
2018-06-08 15:51:20 +03:00
parent dd49d4faea
commit 9263a06b15

View File

@ -432,7 +432,8 @@ MXS_MONITORED_SERVER *GaleraMonitor::get_candidate_master()
/* set min_id to the lowest value of moitor_servers->server->node_id */ /* set min_id to the lowest value of moitor_servers->server->node_id */
while (moitor_servers) while (moitor_servers)
{ {
if (!SERVER_IN_MAINT(moitor_servers->server) && SERVER_IS_JOINED(moitor_servers->server)) if (!SERVER_IN_MAINT(moitor_servers->server) &&
(moitor_servers->pending_status & SERVER_JOINED))
{ {
moitor_servers->server->depth = 0; moitor_servers->server->depth = 0;
@ -512,7 +513,8 @@ static MXS_MONITORED_SERVER *set_cluster_master(MXS_MONITORED_SERVER *current_ma
* if current_master is still a cluster member use it * if current_master is still a cluster member use it
* *
*/ */
if (SERVER_IS_JOINED(current_master->server) && (!SERVER_IN_MAINT(current_master->server))) if ((current_master->pending_status & SERVER_JOINED) &&
(!SERVER_IN_MAINT(current_master->server)))
{ {
return current_master; return current_master;
} }
@ -576,7 +578,7 @@ void GaleraMonitor::update_sst_donor_nodes(int is_cluster)
/* Create an array of slave nodes */ /* Create an array of slave nodes */
while (ptr) while (ptr)
{ {
if (SERVER_IS_JOINED(ptr->server) && SERVER_IS_SLAVE(ptr->server)) if ((ptr->pending_status & SERVER_JOINED) && (ptr->pending_status & SERVER_SLAVE))
{ {
node_list[found_slaves] = (MXS_MONITORED_SERVER *)ptr; node_list[found_slaves] = (MXS_MONITORED_SERVER *)ptr;
found_slaves++; found_slaves++;
@ -981,7 +983,7 @@ void GaleraMonitor::set_cluster_members()
} }
/* Clear bits for non member nodes */ /* Clear bits for non member nodes */
if (!SERVER_IN_MAINT(ptr->server) && (!SERVER_IS_JOINED(ptr->server))) if (!SERVER_IN_MAINT(ptr->server) && !(ptr->pending_status & SERVER_JOINED))
{ {
ptr->server->depth = -1; ptr->server->depth = -1;
ptr->server->node_id = -1; ptr->server->node_id = -1;