Added verbose client errors to schemarouter.
This commit is contained in:
@ -244,6 +244,7 @@ typedef struct schemarouter_config_st {
|
|||||||
time_t last_refresh; /*< Last time the database list was refreshed */
|
time_t last_refresh; /*< Last time the database list was refreshed */
|
||||||
double refresh_min_interval; /*< Minimum required interval between refreshes of databases */
|
double refresh_min_interval; /*< Minimum required interval between refreshes of databases */
|
||||||
bool refresh_databases; /*< Are databases refreshed when they are not found in the hashtable */
|
bool refresh_databases; /*< Are databases refreshed when they are not found in the hashtable */
|
||||||
|
bool debug; /*< Enable verbose debug messages to clients */
|
||||||
} schemarouter_config_t;
|
} schemarouter_config_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -772,6 +772,10 @@ createInstance(SERVICE *service, char **options)
|
|||||||
{
|
{
|
||||||
router->schemarouter_config.refresh_min_interval = atof(value);
|
router->schemarouter_config.refresh_min_interval = atof(value);
|
||||||
}
|
}
|
||||||
|
else if(strcmp(options[i],"debug") == 0)
|
||||||
|
{
|
||||||
|
router->schemarouter_config.debug = config_truth_value(value);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
skygw_log_write(LOGFILE_ERROR,"Error: Unknown router options for Schemarouter: %s",options[i]);
|
skygw_log_write(LOGFILE_ERROR,"Error: Unknown router options for Schemarouter: %s",options[i]);
|
||||||
@ -2060,6 +2064,10 @@ static int routeQuery(
|
|||||||
}
|
}
|
||||||
extract_database(querybuf,db);
|
extract_database(querybuf,db);
|
||||||
snprintf(errbuf,25+MYSQL_DATABASE_MAXLEN,"Unknown database: %s",db);
|
snprintf(errbuf,25+MYSQL_DATABASE_MAXLEN,"Unknown database: %s",db);
|
||||||
|
if(router_cli_ses->rses_config.debug)
|
||||||
|
{
|
||||||
|
sprintf(errbuf + strlen(errbuf)," ([%lu]: DB change failed)",router_cli_ses->rses_client_dcb->session->ses_id);
|
||||||
|
}
|
||||||
GWBUF* error = modutil_create_mysql_err_msg(1, 0, 1049, "42000", errbuf);
|
GWBUF* error = modutil_create_mysql_err_msg(1, 0, 1049, "42000", errbuf);
|
||||||
|
|
||||||
if (error == NULL)
|
if (error == NULL)
|
||||||
@ -2610,7 +2618,12 @@ static void clientReply (
|
|||||||
router_cli_ses->connect_db);
|
router_cli_ses->connect_db);
|
||||||
char errmsg[128 + MYSQL_DATABASE_MAXLEN+1];
|
char errmsg[128 + MYSQL_DATABASE_MAXLEN+1];
|
||||||
sprintf(errmsg,"Unknown database '%s'",router_cli_ses->connect_db);
|
sprintf(errmsg,"Unknown database '%s'",router_cli_ses->connect_db);
|
||||||
|
if(router_cli_ses->rses_config.debug)
|
||||||
|
{
|
||||||
|
sprintf(errmsg + strlen(errmsg)," ([%lu]: DB not found on connect)",router_cli_ses->rses_client_dcb->session->ses_id);
|
||||||
|
}
|
||||||
GWBUF* errbuff = modutil_create_mysql_err_msg(1,0,1049,"42000",errmsg);
|
GWBUF* errbuff = modutil_create_mysql_err_msg(1,0,1049,"42000",errmsg);
|
||||||
|
|
||||||
router_cli_ses->rses_client_dcb->func.write(router_cli_ses->rses_client_dcb,errbuff);
|
router_cli_ses->rses_client_dcb->func.write(router_cli_ses->rses_client_dcb,errbuff);
|
||||||
if(router_cli_ses->queue)
|
if(router_cli_ses->queue)
|
||||||
{
|
{
|
||||||
@ -4274,30 +4287,7 @@ static bool handle_error_new_connection(
|
|||||||
succp = false;
|
succp = false;
|
||||||
goto return_succp;
|
goto return_succp;
|
||||||
}
|
}
|
||||||
|
|
||||||
rses->init |= INIT_MAPPING;
|
|
||||||
|
|
||||||
for(i = 0;i<rses->rses_nbackends;i++)
|
|
||||||
{
|
|
||||||
bref_clear_state(&rses->rses_backend_ref[i],BREF_DB_MAPPED);
|
|
||||||
rses->rses_backend_ref[i].n_mapping_eof = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
HASHITERATOR* iter = hashtable_iterator(rses->dbhash);
|
|
||||||
char* srvnm = bref->bref_backend->backend_server->unique_name;
|
|
||||||
char *key, *value;
|
|
||||||
while((key = (char*)hashtable_next(iter)))
|
|
||||||
{
|
|
||||||
value = hashtable_fetch(rses->dbhash,key);
|
|
||||||
if(strcmp(value,srvnm) == 0)
|
|
||||||
{
|
|
||||||
hashtable_delete(rses->dbhash,key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
skygw_log_write(LOGFILE_TRACE,"schemarouter: Re-mapping databases");
|
|
||||||
gen_databaselist(rses->router,rses);
|
|
||||||
hashtable_iterator_free(iter);
|
|
||||||
return_succp:
|
return_succp:
|
||||||
return succp;
|
return succp;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user