Merge branch 'develop' of github.com:skysql/MaxScale into develop
This commit is contained in:
@ -914,7 +914,7 @@ static void set_slave_heartbeat(MYSQL_MONITOR *handle, MONITOR_SERVERS *database
|
|||||||
LOGIF(LD, (skygw_log_write_flush(
|
LOGIF(LD, (skygw_log_write_flush(
|
||||||
LOGFILE_DEBUG,
|
LOGFILE_DEBUG,
|
||||||
"[mysql_mon]: replication heartbeat: "
|
"[mysql_mon]: replication heartbeat: "
|
||||||
"Slave %s:%i is %i seconds lag",
|
"Slave %s:%i has %i seconds lag",
|
||||||
database->server->name,
|
database->server->name,
|
||||||
database->server->port,
|
database->server->port,
|
||||||
database->server->rlag)));
|
database->server->rlag)));
|
||||||
@ -947,7 +947,8 @@ static void set_slave_heartbeat(MYSQL_MONITOR *handle, MONITOR_SERVERS *database
|
|||||||
/*******
|
/*******
|
||||||
* This function computes the replication tree
|
* This function computes the replication tree
|
||||||
* from a set of MySQL Master/Slave monitored servers
|
* from a set of MySQL Master/Slave monitored servers
|
||||||
* and returns the root server with SERVER_MASTER bit
|
* and returns the root server with SERVER_MASTER bit.
|
||||||
|
* The tree is computed even for servers in 'maintenance' mode.
|
||||||
*
|
*
|
||||||
* @param handle The monitor handle
|
* @param handle The monitor handle
|
||||||
* @param num_servers The number of servers monitored
|
* @param num_servers The number of servers monitored
|
||||||
@ -967,9 +968,12 @@ static MONITOR_SERVERS *get_replication_tree(MYSQL_MONITOR *handle, int num_serv
|
|||||||
|
|
||||||
while (ptr)
|
while (ptr)
|
||||||
{
|
{
|
||||||
if (SERVER_IN_MAINT(ptr->server) || SERVER_IS_DOWN(ptr->server)) {
|
/* The server could be in SERVER_IN_MAINT
|
||||||
|
* that means SERVER_IS_RUNNING returns 0
|
||||||
|
* Let's check only for SERVER_IS_DOWN: server is not running
|
||||||
|
*/
|
||||||
|
if (SERVER_IS_DOWN(ptr->server)) {
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
depth = 0;
|
depth = 0;
|
||||||
@ -1032,8 +1036,13 @@ static MONITOR_SERVERS *get_replication_tree(MYSQL_MONITOR *handle, int num_serv
|
|||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If root master is in MAINT, return NULL */
|
||||||
|
if (SERVER_IN_MAINT(handle->master->server)) {
|
||||||
|
return NULL;
|
||||||
|
} else {
|
||||||
return handle->master;
|
return handle->master;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*******
|
/*******
|
||||||
* This function add a slave id into the slaves server field
|
* This function add a slave id into the slaves server field
|
||||||
|
|||||||
@ -435,6 +435,15 @@ BACKEND *master_host = NULL;
|
|||||||
candidate = master_host;
|
candidate = master_host;
|
||||||
break;
|
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
|
/* 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
|
* (1) find server(s) with lowest replication depth level
|
||||||
* (2) check for SERVER_MASTER bitvalue in those servers
|
* (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
|
* @param servers The list of servers
|
||||||
* @return The Master found
|
* @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 */
|
/* (1) find root server(s) with lowest replication depth level */
|
||||||
for (i = 0; servers[i]; i++) {
|
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) {
|
if (master_host && servers[i]->server->depth < master_host->server->depth) {
|
||||||
master_host = servers[i];
|
master_host = servers[i];
|
||||||
} else {
|
} else {
|
||||||
@ -909,7 +920,7 @@ static BACKEND *get_root_master(BACKEND **servers) {
|
|||||||
if (master_host) {
|
if (master_host) {
|
||||||
int found = 0;
|
int found = 0;
|
||||||
for (i = 0; servers[i]; i++) {
|
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) {
|
if (servers[i]->server->status & SERVER_MASTER) {
|
||||||
master_host = servers[i];
|
master_host = servers[i];
|
||||||
found = 1;
|
found = 1;
|
||||||
@ -918,6 +929,10 @@ static BACKEND *get_root_master(BACKEND **servers) {
|
|||||||
}
|
}
|
||||||
if (!found)
|
if (!found)
|
||||||
master_host = NULL;
|
master_host = NULL;
|
||||||
|
|
||||||
|
/* return NULL if the server is SERVER_IN_MAINT */
|
||||||
|
if (found && SERVER_IN_MAINT(master_host->server))
|
||||||
|
master_host = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return master_host;
|
return master_host;
|
||||||
|
|||||||
@ -870,7 +870,6 @@ static bool get_dcb(
|
|||||||
{
|
{
|
||||||
BACKEND* b = backend_ref[i].bref_backend;
|
BACKEND* b = backend_ref[i].bref_backend;
|
||||||
|
|
||||||
/* removed SERVER_IS_MASTER and use master_host */
|
|
||||||
if (BREF_IS_IN_USE((&backend_ref[i])) &&
|
if (BREF_IS_IN_USE((&backend_ref[i])) &&
|
||||||
(master_host && (b->backend_server == master_host->backend_server)))
|
(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++) {
|
for (i = 0; i< router_nservers; i++) {
|
||||||
BACKEND* b = NULL;
|
BACKEND* b = NULL;
|
||||||
b = servers[i].bref_backend;
|
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) {
|
if (master_host && b->backend_server->depth < master_host->backend_server->depth) {
|
||||||
master_host = b;
|
master_host = b;
|
||||||
} else {
|
} else {
|
||||||
@ -3291,7 +3290,7 @@ static BACKEND *get_root_master(backend_ref_t *servers, int router_nservers) {
|
|||||||
for (i = 0; i<router_nservers; i++) {
|
for (i = 0; i<router_nservers; i++) {
|
||||||
BACKEND* b = NULL;
|
BACKEND* b = NULL;
|
||||||
b = servers[i].bref_backend;
|
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) {
|
if (b->backend_server->status & SERVER_MASTER) {
|
||||||
master_host = b;
|
master_host = b;
|
||||||
found = 1;
|
found = 1;
|
||||||
@ -3300,6 +3299,9 @@ static BACKEND *get_root_master(backend_ref_t *servers, int router_nservers) {
|
|||||||
}
|
}
|
||||||
if (!found)
|
if (!found)
|
||||||
master_host = NULL;
|
master_host = NULL;
|
||||||
|
|
||||||
|
if (found && SERVER_IN_MAINT(master_host->backend_server))
|
||||||
|
master_host = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return master_host;
|
return master_host;
|
||||||
|
|||||||
Reference in New Issue
Block a user