Fix to bug #544, http://bugs.skysql.com/show_bug.cgi?id=544
Changes to readwritesplit router.
This commit is contained in:
@ -613,25 +613,29 @@ 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(
|
||||||
LOGFILE_ERROR,
|
LOGFILE_ERROR,
|
||||||
"Server '%s' has no value "
|
"Server '%s' has no value "
|
||||||
"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))
|
||||||
|
Reference in New Issue
Block a user