Changes to readwritesplit router.
This commit is contained in:
VilhoRaatikka
2014-09-15 21:03:11 +03:00
parent 213a2dba9e
commit 3dc44ff6fd

View File

@ -613,13 +613,18 @@ createInstance(SERVICE *service, char **options)
for (n = 0; router->servers[n]; n++) for (n = 0; router->servers[n]; n++)
{ {
int perc; int perc;
int wght;
backend = router->servers[n]; backend = router->servers[n];
perc = (atoi(serverGetParameter( wght = atoi(serverGetParameter(backend->backend_server,
backend->backend_server, weightby));
weightby)) * 1000) / total; perc = (wght*1000) / total;
if (perc == 0)
if (perc == 0 && wght != 0)
{
perc = 1; perc = 1;
}
backend->weight = perc; backend->weight = perc;
if (perc == 0) if (perc == 0)
{ {
LOGIF(LE, (skygw_log_write( LOGIF(LE, (skygw_log_write(
@ -628,10 +633,9 @@ createInstance(SERVICE *service, char **options)
"for weighting parameter '%s', " "for weighting parameter '%s', "
"no queries will be routed to " "no queries will be routed to "
"this server.\n", "this server.\n",
server->unique_name, router->servers[n]->backend_server->unique_name,
weightby))); weightby)));
} }
} }
} }
} }
@ -2452,7 +2456,10 @@ static bool select_connect_backend_servers(
master_found = true; master_found = true;
master_connected = true; master_connected = true;
/* assert with master_host */ /* assert with master_host */
ss_dassert(master_host && ((*p_master_ref)->bref_backend->backend_server == master_host->backend_server) && SERVER_MASTER); ss_dassert(master_host &&
((*p_master_ref)->bref_backend->backend_server ==
master_host->backend_server) &&
SERVER_MASTER);
} }
/** New session or master failure case */ /** New session or master failure case */
else else
@ -2574,11 +2581,17 @@ static bool select_connect_backend_servers(
* servers from the sorted list. First master found is selected. * servers from the sorted list. First master found is selected.
*/ */
for (i=0; for (i=0;
i<router_nservers && (slaves_connected < max_nslaves || !master_connected); i<router_nservers &&
(slaves_connected < max_nslaves || !master_connected);
i++) i++)
{ {
BACKEND* b = backend_ref[i].bref_backend; BACKEND* b = backend_ref[i].bref_backend;
if (router->servers[i]->weight == 0)
{
continue;
}
if (SERVER_IS_RUNNING(b->backend_server) && if (SERVER_IS_RUNNING(b->backend_server) &&
((b->backend_server->status & router->bitmask) == ((b->backend_server->status & router->bitmask) ==
router->bitvalue)) router->bitvalue))