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
No known key found for this signature in database
GPG Key ID: 72D48FCE664F7B19

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 */
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;
@ -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 (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;
}
@ -576,7 +578,7 @@ void GaleraMonitor::update_sst_donor_nodes(int is_cluster)
/* Create an array of slave nodes */
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;
found_slaves++;
@ -981,7 +983,7 @@ void GaleraMonitor::set_cluster_members()
}
/* 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->node_id = -1;