Merge branch 'develop' into 1.2.1-binlog_router_trx

This commit is contained in:
MassimilianoPinto
2015-08-19 10:00:59 +02:00
13 changed files with 109 additions and 38 deletions

View File

@ -106,6 +106,8 @@ int main(int argc, char* argv[])
} }
succp = skygw_logmanager_init( log_argc, log_argv); succp = skygw_logmanager_init( log_argc, log_argv);
if(!succp)
fprintf(stderr, "Log manager initialization failed.\n");
ss_dassert(succp); ss_dassert(succp);
t = time(NULL); t = time(NULL);
@ -476,16 +478,22 @@ static void* thr_run(
skygw_log_flush(LOGFILE_MESSAGE); skygw_log_flush(LOGFILE_MESSAGE);
logstr = ("Hi, how are you?"); logstr = ("Hi, how are you?");
err = skygw_log_write(LOGFILE_MESSAGE, logstr); err = skygw_log_write(LOGFILE_MESSAGE, logstr);
if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
ss_dassert(err == 0); ss_dassert(err == 0);
skygw_logmanager_done(); skygw_logmanager_done();
skygw_log_flush(LOGFILE_TRACE); skygw_log_flush(LOGFILE_TRACE);
skygw_log_flush(LOGFILE_MESSAGE); skygw_log_flush(LOGFILE_MESSAGE);
logstr = ("I was wondering, you know, it has been such a lovely weather whole morning and I thought that would you like to come to my place and have a little piece of cheese with us. Just me and my mom - and you, of course. Then, if you wish, we could listen to the radio and keep company for our little Steven, my mom's cat, you know."); logstr = ("I was wondering, you know, it has been such a lovely weather whole morning and I thought that would you like to come to my place and have a little piece of cheese with us. Just me and my mom - and you, of course. Then, if you wish, we could listen to the radio and keep company for our little Steven, my mom's cat, you know.");
ss_dassert(err == 0); if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
ss_dassert(err == 0);
err = skygw_log_write(LOGFILE_MESSAGE, logstr); err = skygw_log_write(LOGFILE_MESSAGE, logstr);
skygw_logmanager_init( 0, NULL); skygw_logmanager_init( 0, NULL);
logstr = ("Testing. One, two, three\n"); logstr = ("Testing. One, two, three\n");
err = skygw_log_write(LOGFILE_ERROR, logstr); err = skygw_log_write(LOGFILE_ERROR, logstr);
if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
ss_dassert(err == 0); ss_dassert(err == 0);
skygw_logmanager_init( 0, NULL); skygw_logmanager_init( 0, NULL);
skygw_logmanager_init( 0, NULL); skygw_logmanager_init( 0, NULL);
@ -494,11 +502,15 @@ static void* thr_run(
skygw_log_enable(LOGFILE_TRACE); skygw_log_enable(LOGFILE_TRACE);
err = skygw_log_write(LOGFILE_TRACE, logstr); err = skygw_log_write(LOGFILE_TRACE, logstr);
if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
ss_dassert(err == 0); ss_dassert(err == 0);
skygw_logmanager_done(); skygw_logmanager_done();
skygw_logmanager_init( 0, NULL); skygw_logmanager_init( 0, NULL);
logstr = ("Rather more surprising, at least at first sight, is the fact that a reference to a[i] can also be written as *(a+i). In evaluating a[i], C converts it to *(a+i) immediately; the two forms are equivalent. Applying the operatos & to both parts of this equivalence, it follows that &a[i] and a+i are also identical: a+i is the address of the i-th element beyond a."); logstr = ("Rather more surprising, at least at first sight, is the fact that a reference to a[i] can also be written as *(a+i). In evaluating a[i], C converts it to *(a+i) immediately; the two forms are equivalent. Applying the operatos & to both parts of this equivalence, it follows that &a[i] and a+i are also identical: a+i is the address of the i-th element beyond a.");
err = skygw_log_write(LOGFILE_ERROR, logstr); err = skygw_log_write(LOGFILE_ERROR, logstr);
if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
ss_dassert(err == 0); ss_dassert(err == 0);
skygw_logmanager_init( 0, NULL); skygw_logmanager_init( 0, NULL);
skygw_logmanager_done(); skygw_logmanager_done();
@ -507,6 +519,8 @@ static void* thr_run(
skygw_logmanager_done(); skygw_logmanager_done();
logstr = ("..and you?"); logstr = ("..and you?");
err = skygw_log_write(LOGFILE_MESSAGE, logstr); err = skygw_log_write(LOGFILE_MESSAGE, logstr);
if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
ss_dassert(err == 0); ss_dassert(err == 0);
skygw_logmanager_init( 0, NULL); skygw_logmanager_init( 0, NULL);
skygw_logmanager_init( 0, NULL); skygw_logmanager_init( 0, NULL);
@ -515,14 +529,20 @@ static void* thr_run(
skygw_log_enable(LOGFILE_TRACE); skygw_log_enable(LOGFILE_TRACE);
#endif #endif
err = skygw_log_write(LOGFILE_TRACE, logstr); err = skygw_log_write(LOGFILE_TRACE, logstr);
if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
ss_dassert(err == 0); ss_dassert(err == 0);
skygw_logmanager_init( 0, NULL); skygw_logmanager_init( 0, NULL);
logstr = ("Rather more surprising, at least at first sight, is the fact that a reference to a[i] can also be written as *(a+i). In evaluating a[i], C converts it to *(a+i) immediately; the two forms are equivalent. Applying the operatos & to both parts of this equivalence, it follows that &a[i] and a+i are also identical: a+i is the address of the i-th element beyond a."); logstr = ("Rather more surprising, at least at first sight, is the fact that a reference to a[i] can also be written as *(a+i). In evaluating a[i], C converts it to *(a+i) immediately; the two forms are equivalent. Applying the operatos & to both parts of this equivalence, it follows that &a[i] and a+i are also identical: a+i is the address of the i-th element beyond a.");
err = skygw_log_write(LOGFILE_ERROR, logstr); err = skygw_log_write(LOGFILE_ERROR, logstr);
if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
ss_dassert(err == 0); ss_dassert(err == 0);
skygw_logmanager_init( 0, NULL); skygw_logmanager_init( 0, NULL);
logstr = ("..... and you too?"); logstr = ("..... and you too?");
err = skygw_log_write(LOGFILE_MESSAGE, logstr); err = skygw_log_write(LOGFILE_MESSAGE, logstr);
if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
ss_dassert(err == 0); ss_dassert(err == 0);
skygw_logmanager_done(); skygw_logmanager_done();
#if !defined(SS_DEBUG) #if !defined(SS_DEBUG)
@ -534,14 +554,20 @@ static void* thr_run(
skygw_log_enable(LOGFILE_TRACE); skygw_log_enable(LOGFILE_TRACE);
#endif #endif
err = skygw_log_write(LOGFILE_TRACE, logstr); err = skygw_log_write(LOGFILE_TRACE, logstr);
if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
ss_dassert(err == 0); ss_dassert(err == 0);
skygw_logmanager_done(); skygw_logmanager_done();
logstr = ("Testing. One, two, three, four\n"); logstr = ("Testing. One, two, three, four\n");
err = skygw_log_write(LOGFILE_ERROR, logstr); err = skygw_log_write(LOGFILE_ERROR, logstr);
if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
ss_dassert(err == 0); ss_dassert(err == 0);
skygw_logmanager_init( 0, NULL); skygw_logmanager_init( 0, NULL);
logstr = ("Testing. One, two, three, .. where was I?\n"); logstr = ("Testing. One, two, three, .. where was I?\n");
err = skygw_log_write(LOGFILE_ERROR, logstr); err = skygw_log_write(LOGFILE_ERROR, logstr);
if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
ss_dassert(err == 0); ss_dassert(err == 0);
skygw_logmanager_init( 0, NULL); skygw_logmanager_init( 0, NULL);
skygw_logmanager_init( 0, NULL); skygw_logmanager_init( 0, NULL);
@ -597,6 +623,8 @@ static void* thr_run_morelog(
"%s - iteration # %d", "%s - iteration # %d",
str, str,
i); i);
if(err != 0)
fprintf(stderr,"Error, log write failed.\n");
} }
simple_mutex_lock(td->mtx, true); simple_mutex_lock(td->mtx, true);
*td->nactive -= 1; *td->nactive -= 1;

View File

@ -27,7 +27,7 @@ int main(int argc, char** argv)
{ {
int iterations = 0, i, interval = 10; int iterations = 0, i, interval = 10;
int block_size; int block_size;
int succp = 0, err = 0; int succp, err = 0;
char cwd[1024]; char cwd[1024];
char tmp[2048]; char tmp[2048];
char *message; char *message;
@ -71,6 +71,8 @@ int main(int argc, char** argv)
interval = atoi(argv[2]); interval = atoi(argv[2]);
succp = skygw_logmanager_init( 3, optstr); succp = skygw_logmanager_init( 3, optstr);
if(!succp)
fprintf(stderr,"Error, log manager initialization failed.\n");
ss_dassert(succp); ss_dassert(succp);
skygw_log_disable(LOGFILE_TRACE); skygw_log_disable(LOGFILE_TRACE);

View File

@ -122,7 +122,8 @@ char fname[1024], *home;
char uname[80], passwd[80]; char uname[80], passwd[80];
initialise(); initialise();
sprintf(fname, "%s/passwd", get_datadir()); snprintf(fname,1023, "%s/passwd", get_datadir());
fname[1023] = '\0';
if ((fp = fopen(fname, "r")) == NULL) if ((fp = fopen(fname, "r")) == NULL)
return NULL; return NULL;
if ((rval = users_alloc()) == NULL) if ((rval = users_alloc()) == NULL)
@ -153,8 +154,8 @@ FILE *fp;
char fname[1024], *home, *cpasswd; char fname[1024], *home, *cpasswd;
initialise(); initialise();
sprintf(fname, "%s/passwd", get_datadir()); snprintf(fname,1023, "%s/passwd", get_datadir());
fname[1023] = '\0';
if (users == NULL) if (users == NULL)
{ {
LOGIF(LM, LOGIF(LM,
@ -246,8 +247,10 @@ char* admin_remove_user(
/** /**
* Open passwd file and remove user from the file. * Open passwd file and remove user from the file.
*/ */
sprintf(fname, "%s/passwd", get_datadir()); snprintf(fname,1023, "%s/passwd", get_datadir());
sprintf(fname_tmp, "%s/passwd_tmp", get_datadir()); snprintf(fname_tmp,1023, "%s/passwd_tmp", get_datadir());
fname[1023] = '\0';
fname_tmp[1023] = '\0';
/** /**
* Rewrite passwd file from memory. * Rewrite passwd file from memory.
*/ */

View File

@ -719,23 +719,26 @@ static char* check_dir_access(
if(access(dirname,F_OK) != 0) if(access(dirname,F_OK) != 0)
{ {
sprintf(errbuf,"Can't access '%s'.",dirname); snprintf(errbuf,PATH_MAX*2-1,"Can't access '%s'.",dirname);
errbuf[PATH_MAX*2-1] = '\0';
errstr = strdup(errbuf); errstr = strdup(errbuf);
goto retblock; goto retblock;
} }
if (rd && !file_is_readable(dirname)) if (rd && !file_is_readable(dirname))
{ {
sprintf(errbuf,"MaxScale doesn't have read permission " snprintf(errbuf,PATH_MAX*2-1,"MaxScale doesn't have read permission "
"to '%s'.",dirname); "to '%s'.",dirname);
errbuf[PATH_MAX*2-1] = '\0';
errstr = strdup(errbuf); errstr = strdup(errbuf);
goto retblock; goto retblock;
} }
if (wr && !file_is_writable(dirname)) if (wr && !file_is_writable(dirname))
{ {
sprintf(errbuf,"MaxScale doesn't have write permission " snprintf(errbuf,PATH_MAX*2-1,"MaxScale doesn't have write permission "
"to '%s'.",dirname); "to '%s'.",dirname);
errbuf[PATH_MAX*2-1] = '\0';
errstr = strdup(errbuf); errstr = strdup(errbuf);
goto retblock; goto retblock;
} }
@ -1076,7 +1079,8 @@ int main(int argc, char **argv)
sigemptyset(&sigpipe_mask); sigemptyset(&sigpipe_mask);
sigaddset(&sigpipe_mask, SIGPIPE); sigaddset(&sigpipe_mask, SIGPIPE);
progname = *argv; progname = *argv;
sprintf(datadir, "%s", default_datadir); snprintf(datadir,PATH_MAX, "%s", default_datadir);
datadir[PATH_MAX] = '\0';
#if defined(FAKE_CODE) #if defined(FAKE_CODE)
memset(conn_open, 0, sizeof(bool)*10240); memset(conn_open, 0, sizeof(bool)*10240);
memset(dcb_fake_write_errno, 0, sizeof(unsigned char)*10240); memset(dcb_fake_write_errno, 0, sizeof(unsigned char)*10240);
@ -1191,7 +1195,8 @@ int main(int argc, char **argv)
} }
break; break;
case 'D': case 'D':
sprintf(datadir,"%s",optarg); snprintf(datadir,PATH_MAX,"%s",optarg);
datadir[PATH_MAX] = '\0';
set_datadir(strdup(optarg)); set_datadir(strdup(optarg));
datadir_defined = true; datadir_defined = true;
break; break;
@ -1566,6 +1571,7 @@ int main(int argc, char **argv)
*/ */
char pathbuf[PATH_MAX+1]; char pathbuf[PATH_MAX+1];
snprintf(pathbuf,PATH_MAX,"%s",get_configdir()); snprintf(pathbuf,PATH_MAX,"%s",get_configdir());
pathbuf[PATH_MAX] = '\0';
if(pathbuf[strlen(pathbuf)-1] != '/') if(pathbuf[strlen(pathbuf)-1] != '/')
strcat(pathbuf,"/"); strcat(pathbuf,"/");
@ -1584,7 +1590,8 @@ int main(int argc, char **argv)
/** Use the cache dir for the mysql folder of the embedded library */ /** Use the cache dir for the mysql folder of the embedded library */
sprintf(mysql_home, "%s/mysql", get_cachedir()); snprintf(mysql_home,PATH_MAX, "%s/mysql", get_cachedir());
mysql_home[PATH_MAX] = '\0';
setenv("MYSQL_HOME", mysql_home, 1); setenv("MYSQL_HOME", mysql_home, 1);
@ -1657,7 +1664,8 @@ int main(int argc, char **argv)
* machine. * machine.
*/ */
sprintf(datadir,"%s/data",get_datadir()); snprintf(datadir,PATH_MAX,"%s/data",get_datadir());
datadir[PATH_MAX] = '\0';
if(mkdir(datadir, 0777) != 0){ if(mkdir(datadir, 0777) != 0){
if(errno != EEXIST){ if(errno != EEXIST){
@ -1667,7 +1675,7 @@ int main(int argc, char **argv)
} }
} }
sprintf(datadir, "%s/data/data%d", get_datadir(), getpid()); snprintf(datadir,PATH_MAX, "%s/data/data%d", get_datadir(), getpid());
if(mkdir(datadir, 0777) != 0){ if(mkdir(datadir, 0777) != 0){
@ -2139,7 +2147,8 @@ static int cnf_preparser(void* data, const char* section, const char* name, cons
{ {
if(handle_path_arg(&tmp,(char*)value,NULL,true,false)) if(handle_path_arg(&tmp,(char*)value,NULL,true,false))
{ {
sprintf(datadir,"%s",tmp); snprintf(datadir,PATH_MAX,"%s",tmp);
datadir[PATH_MAX] = '\0';
set_datadir(tmp); set_datadir(tmp);
datadir_defined = true; datadir_defined = true;
} }

View File

@ -495,9 +495,10 @@ MODULES *ptr;
resultset_row_set(row, 0, ptr->module); resultset_row_set(row, 0, ptr->module);
resultset_row_set(row, 1, ptr->type); resultset_row_set(row, 1, ptr->type);
resultset_row_set(row, 2, ptr->version); resultset_row_set(row, 2, ptr->version);
sprintf(buf, "%d.%d.%d", ptr->info->api_version.major, snprintf(buf,19, "%d.%d.%d", ptr->info->api_version.major,
ptr->info->api_version.minor, ptr->info->api_version.minor,
ptr->info->api_version.patch); ptr->info->api_version.patch);
buf[19] = '\0';
resultset_row_set(row, 3, buf); resultset_row_set(row, 3, buf);
resultset_row_set(row, 4, ptr->info->status == MODULE_IN_DEVELOPMENT resultset_row_set(row, 4, ptr->info->status == MODULE_IN_DEVELOPMENT
? "In Development" ? "In Development"

View File

@ -1645,17 +1645,21 @@ RESULT_ROW *row;
resultset_row_set(row, 0, "< 100ms"); resultset_row_set(row, 0, "< 100ms");
else if (*rowno == N_QUEUE_TIMES - 1) else if (*rowno == N_QUEUE_TIMES - 1)
{ {
sprintf(buf, "> %2d00ms", N_QUEUE_TIMES); snprintf(buf,39, "> %2d00ms", N_QUEUE_TIMES);
buf[39] = '\0';
resultset_row_set(row, 0, buf); resultset_row_set(row, 0, buf);
} }
else else
{ {
sprintf(buf, "%2d00 - %2d00ms", *rowno, (*rowno) + 1); snprintf(buf,39, "%2d00 - %2d00ms", *rowno, (*rowno) + 1);
buf[39] = '\0';
resultset_row_set(row, 0, buf); resultset_row_set(row, 0, buf);
} }
sprintf(buf, "%d", queueStats.qtimes[*rowno]); snprintf(buf,39, "%d", queueStats.qtimes[*rowno]);
buf[39] = '\0';
resultset_row_set(row, 1, buf); resultset_row_set(row, 1, buf);
sprintf(buf, "%d", queueStats.exectimes[*rowno]); snprintf(buf,39, "%d", queueStats.exectimes[*rowno]);
buf[39] = '\0';
resultset_row_set(row, 2, buf); resultset_row_set(row, 2, buf);
(*rowno)++; (*rowno)++;
return row; return row;

View File

@ -234,7 +234,8 @@ if(strlen(path) > PATH_MAX)
return 1; return 1;
} }
sprintf(secret_file,"%s/.secrets",path); snprintf(secret_file,PATH_MAX + 9,"%s/.secrets",path);
secret_file[PATH_MAX + 9] = '\0';
/* Open for writing | Create | Truncate the file for writing */ /* Open for writing | Create | Truncate the file for writing */
if ((fd = open(secret_file, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR)) < 0) if ((fd = open(secret_file, O_CREAT | O_WRONLY | O_TRUNC, S_IRUSR)) < 0)

View File

@ -1031,7 +1031,8 @@ SESSION *ptr;
} }
cbdata->index++; cbdata->index++;
row = resultset_make_row(set); row = resultset_make_row(set);
sprintf(buf, "%p", ptr); snprintf(buf,19, "%p", ptr);
buf[19] = '\0';
resultset_row_set(row, 0, buf); resultset_row_set(row, 0, buf);
resultset_row_set(row, 1, ((ptr->client && ptr->client->remote) resultset_row_set(row, 1, ((ptr->client && ptr->client->remote)
? ptr->client->remote : "")); ? ptr->client->remote : ""));

View File

@ -37,7 +37,7 @@
* test1 Allocate table of users and mess around with it * test1 Allocate table of users and mess around with it
* *
*/ */
void skygw_log_sync_all(void);
static int static int
test1() test1()
{ {

View File

@ -1638,7 +1638,12 @@ static GWBUF* process_response_data (
* bytes in the buffer or it is NULL, we need to * bytes in the buffer or it is NULL, we need to
wait for more data from the backend server.*/ wait for more data from the backend server.*/
if(readbuf == NULL || GWBUF_LENGTH(readbuf) < 3) if(readbuf == NULL || GWBUF_LENGTH(readbuf) < 3)
{
skygw_log_write(LD," %lu [%s] Read %s packet with %d bytes. Waiting for %d packets.",
pthread_self(),__FUNCTION__,readbuf?"partial":"empty",
readbuf?GWBUF_LENGTH(readbuf):0,npackets_left);
break; break;
}
data = GWBUF_DATA(readbuf); data = GWBUF_DATA(readbuf);
nbytes_left = MYSQL_GET_PACKET_LEN(data)+MYSQL_HEADER_LEN; nbytes_left = MYSQL_GET_PACKET_LEN(data)+MYSQL_HEADER_LEN;

View File

@ -2052,7 +2052,6 @@ void init_response_status (
*/ */
ss_dassert(*nbytes_left > 0); ss_dassert(*nbytes_left > 0);
ss_dassert(*npackets > 0); ss_dassert(*npackets > 0);
ss_dassert(*npackets<128);
} }

View File

@ -1581,10 +1581,17 @@ void check_drop_tmp_table(
DCB* master_dcb = NULL; DCB* master_dcb = NULL;
rses_property_t* rses_prop_tmp; rses_property_t* rses_prop_tmp;
if(router_cli_ses == NULL || querybuf == NULL)
{
skygw_log_write(LE,"[%s] Error: NULL parameters passed: %p %p",
__FUNCTION__,router_cli_ses,querybuf);
return;
}
rses_prop_tmp = router_cli_ses->rses_properties[RSES_PROP_TYPE_TMPTABLES]; rses_prop_tmp = router_cli_ses->rses_properties[RSES_PROP_TYPE_TMPTABLES];
master_dcb = router_cli_ses->rses_master_ref->bref_dcb; master_dcb = router_cli_ses->rses_master_ref->bref_dcb;
if(master_dcb == NULL) if(master_dcb == NULL || master_dcb->session == NULL)
{ {
skygw_log_write(LE,"[%s] Error: Master server DBC is NULL. " skygw_log_write(LE,"[%s] Error: Master server DBC is NULL. "
"This means that the connection to the master server is already " "This means that the connection to the master server is already "
@ -1659,10 +1666,17 @@ static skygw_query_type_t is_read_tmp_table(
skygw_query_type_t qtype = type; skygw_query_type_t qtype = type;
rses_property_t* rses_prop_tmp; rses_property_t* rses_prop_tmp;
if(router_cli_ses == NULL || querybuf == NULL)
{
skygw_log_write(LE,"[%s] Error: NULL parameters passed: %p %p",
__FUNCTION__,router_cli_ses,querybuf);
return type;
}
rses_prop_tmp = router_cli_ses->rses_properties[RSES_PROP_TYPE_TMPTABLES]; rses_prop_tmp = router_cli_ses->rses_properties[RSES_PROP_TYPE_TMPTABLES];
master_dcb = router_cli_ses->rses_master_ref->bref_dcb; master_dcb = router_cli_ses->rses_master_ref->bref_dcb;
if(master_dcb == NULL) if(master_dcb == NULL || master_dcb->session == NULL)
{ {
skygw_log_write(LE,"[%s] Error: Master server DBC is NULL. " skygw_log_write(LE,"[%s] Error: Master server DBC is NULL. "
"This means that the connection to the master server is already " "This means that the connection to the master server is already "
@ -1740,22 +1754,26 @@ static void check_create_tmp_table(
GWBUF* querybuf, GWBUF* querybuf,
skygw_query_type_t type) skygw_query_type_t type)
{ {
int klen = 0; int klen = 0;
char *hkey,*dbname; char *hkey,*dbname;
MYSQL_session* data; MYSQL_session* data;
DCB* master_dcb = NULL;
rses_property_t* rses_prop_tmp;
HASHTABLE* h;
DCB* master_dcb = NULL; if(router_cli_ses == NULL || querybuf == NULL)
rses_property_t* rses_prop_tmp; {
HASHTABLE* h; skygw_log_write(LE,"[%s] Error: NULL parameters passed: %p %p",
__FUNCTION__,router_cli_ses,querybuf);
return;
}
rses_prop_tmp = router_cli_ses->rses_properties[RSES_PROP_TYPE_TMPTABLES]; rses_prop_tmp = router_cli_ses->rses_properties[RSES_PROP_TYPE_TMPTABLES];
master_dcb = router_cli_ses->rses_master_ref->bref_dcb; master_dcb = router_cli_ses->rses_master_ref->bref_dcb;
if(master_dcb == NULL) if(master_dcb == NULL || master_dcb->session == NULL)
{ {
skygw_log_write(LE,"[%s] Error: Master server DBC is NULL. " skygw_log_write(LE,"[%s] Error: Master server DCB is NULL. "
"This means that the connection to the master server is already " "This means that the connection to the master server is already "
"closed while a query is still being routed.",__FUNCTION__); "closed while a query is still being routed.",__FUNCTION__);
return; return;

View File

@ -33,7 +33,7 @@ static void *newSession(ROUTER *instance, SESSION *session);
static void closeSession(ROUTER *instance, void *session); static void closeSession(ROUTER *instance, void *session);
static void freeSession(ROUTER *instance, void *session); static void freeSession(ROUTER *instance, void *session);
static int routeQuery(ROUTER *instance, void *session, GWBUF *queue); static int routeQuery(ROUTER *instance, void *session, GWBUF *queue);
static void clientReply(ROUTER *instance, void *session, GWBUF *queue); static void clientReply(ROUTER *instance, void *session, GWBUF *queue,DCB*);
static void diagnostic(ROUTER *instance, DCB *dcb); static void diagnostic(ROUTER *instance, DCB *dcb);
static uint8_t getCapabilities (ROUTER* inst, void* router_session); static uint8_t getCapabilities (ROUTER* inst, void* router_session);
static void handleError( static void handleError(
@ -151,7 +151,7 @@ routeQuery(ROUTER *instance, void *session, GWBUF *queue)
return 0; return 0;
} }
void clientReply(ROUTER* instance, void* session, GWBUF* queue) void clientReply(ROUTER* instance, void* session, GWBUF* queue, DCB* dcb)
{ {
} }