MXS-511: Made log messages about master status coherent
The checking of the master status and the possible error logging were done in two different steps. This led to confusing error messages when the state of the server changed between the check and the logging of the error message.
This commit is contained in:
@ -1162,6 +1162,8 @@ static bool get_dcb(
|
||||
for (i=0; i<rses->rses_nbackends; i++)
|
||||
{
|
||||
BACKEND* b = backend_ref[i].bref_backend;
|
||||
SERVER server;
|
||||
server.status = backend_ref[i].bref_backend->backend_server->status;
|
||||
/**
|
||||
* To become chosen:
|
||||
* backend must be in use, name must match,
|
||||
@ -1175,9 +1177,9 @@ static bool get_dcb(
|
||||
b->backend_server->unique_name,
|
||||
PATH_MAX) == 0) &&
|
||||
master_bref->bref_backend != NULL &&
|
||||
(SERVER_IS_SLAVE(b->backend_server) ||
|
||||
SERVER_IS_RELAY_SERVER(b->backend_server) ||
|
||||
SERVER_IS_MASTER(b->backend_server)))
|
||||
(SERVER_IS_SLAVE(&server) ||
|
||||
SERVER_IS_RELAY_SERVER(&server) ||
|
||||
SERVER_IS_MASTER(&server)))
|
||||
{
|
||||
*p_dcb = backend_ref[i].bref_dcb;
|
||||
succp = true;
|
||||
@ -1202,13 +1204,16 @@ static bool get_dcb(
|
||||
for (i=0; i<rses->rses_nbackends; i++)
|
||||
{
|
||||
BACKEND* b = (&backend_ref[i])->bref_backend;
|
||||
SERVER server;
|
||||
SERVER candidate;
|
||||
server.status = backend_ref[i].bref_backend->backend_server->status;
|
||||
/**
|
||||
* Unused backend or backend which is not master nor
|
||||
* slave can't be used
|
||||
*/
|
||||
if (!BREF_IS_IN_USE(&backend_ref[i]) ||
|
||||
(!SERVER_IS_MASTER(b->backend_server) &&
|
||||
!SERVER_IS_SLAVE(b->backend_server)))
|
||||
(!SERVER_IS_MASTER(&server) &&
|
||||
!SERVER_IS_SLAVE(&server)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@ -1222,11 +1227,12 @@ static bool get_dcb(
|
||||
* Ensure that master has not changed dunring
|
||||
* session and abort if it has.
|
||||
*/
|
||||
if (SERVER_IS_MASTER(b->backend_server) &&
|
||||
if (SERVER_IS_MASTER(&server) &&
|
||||
&backend_ref[i] == master_bref)
|
||||
{
|
||||
/** found master */
|
||||
candidate_bref = &backend_ref[i];
|
||||
candidate.status = candidate_bref->bref_backend->backend_server->status;
|
||||
succp = true;
|
||||
}
|
||||
/**
|
||||
@ -1240,6 +1246,7 @@ static bool get_dcb(
|
||||
{
|
||||
/** found slave */
|
||||
candidate_bref = &backend_ref[i];
|
||||
candidate.status = candidate_bref->bref_backend->backend_server->status;
|
||||
succp = true;
|
||||
}
|
||||
}
|
||||
@ -1247,8 +1254,8 @@ static bool get_dcb(
|
||||
* If candidate is master, any slave which doesn't break
|
||||
* replication lag limits replaces it.
|
||||
*/
|
||||
else if (SERVER_IS_MASTER(candidate_bref->bref_backend->backend_server) &&
|
||||
SERVER_IS_SLAVE(b->backend_server) &&
|
||||
else if (SERVER_IS_MASTER(&candidate) &&
|
||||
SERVER_IS_SLAVE(&server) &&
|
||||
(max_rlag == MAX_RLAG_UNDEFINED ||
|
||||
(b->backend_server->rlag != MAX_RLAG_NOT_AVAILABLE &&
|
||||
b->backend_server->rlag <= max_rlag)) &&
|
||||
@ -1256,6 +1263,7 @@ static bool get_dcb(
|
||||
{
|
||||
/** found slave */
|
||||
candidate_bref = &backend_ref[i];
|
||||
candidate.status = candidate_bref->bref_backend->backend_server->status;
|
||||
succp = true;
|
||||
}
|
||||
/**
|
||||
@ -1263,7 +1271,7 @@ static bool get_dcb(
|
||||
* backend and update assign it to new candidate if
|
||||
* necessary.
|
||||
*/
|
||||
else if (SERVER_IS_SLAVE(b->backend_server))
|
||||
else if (SERVER_IS_SLAVE(&server))
|
||||
{
|
||||
if (max_rlag == MAX_RLAG_UNDEFINED ||
|
||||
(b->backend_server->rlag != MAX_RLAG_NOT_AVAILABLE &&
|
||||
@ -1273,6 +1281,7 @@ static bool get_dcb(
|
||||
candidate_bref,
|
||||
&backend_ref[i],
|
||||
rses->rses_config.rw_slave_select_criteria);
|
||||
candidate.status = candidate_bref->bref_backend->backend_server->status;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1298,8 +1307,12 @@ static bool get_dcb(
|
||||
*/
|
||||
if (btype == BE_MASTER)
|
||||
{
|
||||
if (BREF_IS_IN_USE(master_bref) &&
|
||||
SERVER_IS_MASTER(master_bref->bref_backend->backend_server))
|
||||
/** It is possible for the server status to change at any point in time
|
||||
* so copying it locally will make possible error messages
|
||||
* easier to understand */
|
||||
SERVER server;
|
||||
server.status = master_bref->bref_backend->backend_server->status;
|
||||
if (BREF_IS_IN_USE(master_bref) && SERVER_IS_MASTER(&server))
|
||||
{
|
||||
*p_dcb = master_bref->bref_dcb;
|
||||
succp = true;
|
||||
@ -1312,7 +1325,7 @@ static bool get_dcb(
|
||||
"is %s instead and can't be chosen to master.",
|
||||
master_bref->bref_backend->backend_server->name,
|
||||
master_bref->bref_backend->backend_server->port,
|
||||
STRSRVSTATUS(master_bref->bref_backend->backend_server));
|
||||
STRSRVSTATUS(&server));
|
||||
succp = false;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user