root server IN_MAINT returns NULL to caller
the replication tree returns NULL if the root server is maintenance mode
This commit is contained in:
@ -435,6 +435,15 @@ BACKEND *master_host = NULL;
|
||||
candidate = master_host;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
/* master_host is NULL, no master server.
|
||||
* If requested router_option is 'master'
|
||||
* candidate wll be NULL.
|
||||
*/
|
||||
if (inst->bitvalue & SERVER_MASTER) {
|
||||
candidate = NULL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* If no candidate set, set first running server as
|
||||
@ -882,6 +891,8 @@ static uint8_t getCapabilities(
|
||||
*
|
||||
* (1) find server(s) with lowest replication depth level
|
||||
* (2) check for SERVER_MASTER bitvalue in those servers
|
||||
* Servers are checked even if they are in 'maintenance'
|
||||
* SERVER_IS_DOWN is the only status to skip.
|
||||
*
|
||||
* @param servers The list of servers
|
||||
* @return The Master found
|
||||
@ -894,7 +905,7 @@ static BACKEND *get_root_master(BACKEND **servers) {
|
||||
|
||||
/* (1) find root server(s) with lowest replication depth level */
|
||||
for (i = 0; servers[i]; i++) {
|
||||
if (servers[i] && SERVER_IS_RUNNING(servers[i]->server)) {
|
||||
if (servers[i] && (! SERVER_IS_DOWN(servers[i]->server))) {
|
||||
if (master_host && servers[i]->server->depth < master_host->server->depth) {
|
||||
master_host = servers[i];
|
||||
} else {
|
||||
@ -909,7 +920,7 @@ static BACKEND *get_root_master(BACKEND **servers) {
|
||||
if (master_host) {
|
||||
int found = 0;
|
||||
for (i = 0; servers[i]; i++) {
|
||||
if (servers[i] && SERVER_IS_RUNNING(servers[i]->server) && (servers[i]->server->depth == master_host->server->depth)) {
|
||||
if (servers[i] && ( !SERVER_IS_DOWN(servers[i]->server)) && (servers[i]->server->depth == master_host->server->depth)) {
|
||||
if (servers[i]->server->status & SERVER_MASTER) {
|
||||
master_host = servers[i];
|
||||
found = 1;
|
||||
@ -918,6 +929,10 @@ static BACKEND *get_root_master(BACKEND **servers) {
|
||||
}
|
||||
if (!found)
|
||||
master_host = NULL;
|
||||
|
||||
/* return NULL is the server is SERVER_IN_MAINT */
|
||||
if (found && SERVER_IN_MAINT(master_host->server))
|
||||
master_host = NULL;
|
||||
}
|
||||
|
||||
return master_host;
|
||||
|
@ -869,8 +869,7 @@ static bool get_dcb(
|
||||
for (i=0; i<rses->rses_nbackends; i++)
|
||||
{
|
||||
BACKEND* b = backend_ref[i].bref_backend;
|
||||
|
||||
/* removed SERVER_IS_MASTER and use master_host */
|
||||
|
||||
if (BREF_IS_IN_USE((&backend_ref[i])) &&
|
||||
(master_host && (b->backend_server == master_host->backend_server)))
|
||||
{
|
||||
@ -3274,7 +3273,7 @@ static BACKEND *get_root_master(backend_ref_t *servers, int router_nservers) {
|
||||
for (i = 0; i< router_nservers; i++) {
|
||||
BACKEND* b = NULL;
|
||||
b = servers[i].bref_backend;
|
||||
if (b && SERVER_IS_RUNNING(b->backend_server)) {
|
||||
if (b && (! SERVER_IS_DOWN(b->backend_server))) {
|
||||
if (master_host && b->backend_server->depth < master_host->backend_server->depth) {
|
||||
master_host = b;
|
||||
} else {
|
||||
@ -3291,7 +3290,7 @@ static BACKEND *get_root_master(backend_ref_t *servers, int router_nservers) {
|
||||
for (i = 0; i<router_nservers; i++) {
|
||||
BACKEND* b = NULL;
|
||||
b = servers[i].bref_backend;
|
||||
if (b && SERVER_IS_RUNNING(b->backend_server) && (b->backend_server->depth == master_host->backend_server->depth)) {
|
||||
if (b && (! SERVER_IS_DOWN(b->backend_server)) && (b->backend_server->depth == master_host->backend_server->depth)) {
|
||||
if (b->backend_server->status & SERVER_MASTER) {
|
||||
master_host = b;
|
||||
found = 1;
|
||||
@ -3300,6 +3299,9 @@ static BACKEND *get_root_master(backend_ref_t *servers, int router_nservers) {
|
||||
}
|
||||
if (!found)
|
||||
master_host = NULL;
|
||||
|
||||
if (found && SERVER_IN_MAINT(master_host->backend_server))
|
||||
master_host = NULL;
|
||||
}
|
||||
|
||||
return master_host;
|
||||
|
Reference in New Issue
Block a user