Fix to bug 679: http://bugs.mariadb.com/show_bug.cgi?id=679
Added server references to services instead of using a raw pointers to server instances. Changed all references to service->database to service->dbref.
This commit is contained in:
@ -144,7 +144,7 @@ static ROUTER *
|
||||
GHACreateInstance(SERVICE *service, char **options)
|
||||
{
|
||||
ROUTER_INSTANCE *inst;
|
||||
SERVER *server;
|
||||
SERVER_REF *server;
|
||||
int i, n;
|
||||
|
||||
if ((inst = calloc(1, sizeof(ROUTER_INSTANCE))) == NULL) {
|
||||
@ -159,7 +159,7 @@ int i, n;
|
||||
* that we can maintain a count of the number of connections to each
|
||||
* backend server.
|
||||
*/
|
||||
for (server = service->databases, n = 0; server; server = server->nextdb)
|
||||
for (server = service->dbref, n = 0; server; server = server->next)
|
||||
n++;
|
||||
|
||||
inst->servers = (BACKEND **)calloc(n + 1, sizeof(BACKEND *));
|
||||
@ -169,7 +169,7 @@ int i, n;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (server = service->databases, n = 0; server; server = server->nextdb)
|
||||
for (server = service->dbref, n = 0; server; server = server->next)
|
||||
{
|
||||
if ((inst->servers[n] = malloc(sizeof(BACKEND))) == NULL)
|
||||
{
|
||||
@ -179,7 +179,7 @@ int i, n;
|
||||
free(inst);
|
||||
return NULL;
|
||||
}
|
||||
inst->servers[n]->server = server;
|
||||
inst->servers[n]->server = server->server;
|
||||
inst->servers[n]->current_connection_count = 0;
|
||||
n++;
|
||||
}
|
||||
|
@ -201,7 +201,7 @@ int i;
|
||||
* which of these servers is currently the master and replicate from
|
||||
* that server.
|
||||
*/
|
||||
if (service->databases == NULL || service->databases->nextdb != NULL)
|
||||
if (service->dbref == NULL || service->dbref->next != NULL)
|
||||
{
|
||||
LOGIF(LE, (skygw_log_write(
|
||||
LOGFILE_ERROR,
|
||||
@ -543,7 +543,7 @@ ROUTER_SLAVE *slave = (ROUTER_SLAVE *)router_session;
|
||||
LOGIF(LE, (skygw_log_write_flush(
|
||||
LOGFILE_ERROR,
|
||||
"Binlog router close session with master server %s",
|
||||
router->service->databases->unique_name)));
|
||||
router->service->dbref->server->unique_name)));
|
||||
blr_master_reconnect(router);
|
||||
return;
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ GWBUF *buf;
|
||||
return;
|
||||
}
|
||||
client->session = router->session;
|
||||
if ((router->master = dcb_connect(router->service->databases, router->session, BLR_PROTOCOL)) == NULL)
|
||||
if ((router->master = dcb_connect(router->service->dbref->server, router->session, BLR_PROTOCOL)) == NULL)
|
||||
{
|
||||
char *name;
|
||||
if ((name = malloc(strlen(router->service->name)
|
||||
@ -135,10 +135,10 @@ GWBUF *buf;
|
||||
router->retry_backoff = BLR_MAX_BACKOFF;
|
||||
LOGIF(LE, (skygw_log_write_flush(LOGFILE_ERROR,
|
||||
"Binlog router: failed to connect to master server '%s'",
|
||||
router->service->databases->unique_name)));
|
||||
router->service->dbref->server->unique_name)));
|
||||
return;
|
||||
}
|
||||
router->master->remote = strdup(router->service->databases->name);
|
||||
router->master->remote = strdup(router->service->dbref->server->name);
|
||||
LOGIF(LM,(skygw_log_write(
|
||||
LOGFILE_MESSAGE,
|
||||
"%s: atempting to connect to master server %s.",
|
||||
|
@ -204,6 +204,7 @@ createInstance(SERVICE *service, char **options)
|
||||
{
|
||||
ROUTER_INSTANCE *inst;
|
||||
SERVER *server;
|
||||
SERVER_REF *sref;
|
||||
int i, n;
|
||||
BACKEND *backend;
|
||||
char *weightby;
|
||||
@ -220,7 +221,7 @@ char *weightby;
|
||||
* that we can maintain a count of the number of connections to each
|
||||
* backend server.
|
||||
*/
|
||||
for (server = service->databases, n = 0; server; server = server->nextdb)
|
||||
for (sref = service->dbref, n = 0; sref; sref = sref->next)
|
||||
n++;
|
||||
|
||||
inst->servers = (BACKEND **)calloc(n + 1, sizeof(BACKEND *));
|
||||
@ -230,7 +231,7 @@ char *weightby;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
for (server = service->databases, n = 0; server; server = server->nextdb)
|
||||
for (sref = service->dbref, n = 0; sref; sref = sref->next)
|
||||
{
|
||||
if ((inst->servers[n] = malloc(sizeof(BACKEND))) == NULL)
|
||||
{
|
||||
@ -240,7 +241,7 @@ char *weightby;
|
||||
free(inst);
|
||||
return NULL;
|
||||
}
|
||||
inst->servers[n]->server = server;
|
||||
inst->servers[n]->server = sref->server;
|
||||
inst->servers[n]->current_connection_count = 0;
|
||||
inst->servers[n]->weight = 1000;
|
||||
n++;
|
||||
|
@ -558,6 +558,7 @@ createInstance(SERVICE *service, char **options)
|
||||
{
|
||||
ROUTER_INSTANCE* router;
|
||||
SERVER* server;
|
||||
SERVER_REF* sref;
|
||||
int nservers;
|
||||
int i;
|
||||
CONFIG_PARAMETER* param;
|
||||
@ -570,13 +571,13 @@ createInstance(SERVICE *service, char **options)
|
||||
spinlock_init(&router->lock);
|
||||
|
||||
/** Calculate number of servers */
|
||||
server = service->databases;
|
||||
sref = service->dbref;
|
||||
nservers = 0;
|
||||
|
||||
while (server != NULL)
|
||||
while (sref != NULL)
|
||||
{
|
||||
nservers++;
|
||||
server=server->nextdb;
|
||||
sref=sref->next;
|
||||
}
|
||||
router->servers = (BACKEND **)calloc(nservers + 1, sizeof(BACKEND *));
|
||||
|
||||
@ -590,10 +591,11 @@ createInstance(SERVICE *service, char **options)
|
||||
* maintain a count of the number of connections to each
|
||||
* backend server.
|
||||
*/
|
||||
server = service->databases;
|
||||
|
||||
sref = service->dbref;
|
||||
nservers= 0;
|
||||
|
||||
while (server != NULL) {
|
||||
while (sref != NULL) {
|
||||
if ((router->servers[nservers] = malloc(sizeof(BACKEND))) == NULL)
|
||||
{
|
||||
/** clean up */
|
||||
@ -604,7 +606,7 @@ createInstance(SERVICE *service, char **options)
|
||||
free(router);
|
||||
return NULL;
|
||||
}
|
||||
router->servers[nservers]->backend_server = server;
|
||||
router->servers[nservers]->backend_server = sref->server;
|
||||
router->servers[nservers]->backend_conn_count = 0;
|
||||
router->servers[nservers]->be_valid = false;
|
||||
router->servers[nservers]->weight = 1000;
|
||||
@ -613,7 +615,7 @@ createInstance(SERVICE *service, char **options)
|
||||
router->servers[nservers]->be_chk_tail = CHK_NUM_BACKEND;
|
||||
#endif
|
||||
nservers += 1;
|
||||
server = server->nextdb;
|
||||
sref = sref->next;
|
||||
}
|
||||
router->servers[nservers] = NULL;
|
||||
|
||||
|
Reference in New Issue
Block a user