Added more debug logging and fixed the service resources being overwritted even though they were already allocated.
This commit is contained in:
@ -146,6 +146,7 @@ HASHTABLE *oldresources;
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
oldresources = service->resources;
|
oldresources = service->resources;
|
||||||
|
service->resources = NULL;
|
||||||
|
|
||||||
i = getUsers(service, newusers);
|
i = getUsers(service, newusers);
|
||||||
|
|
||||||
@ -183,6 +184,7 @@ HASHTABLE *oldresources;
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
oldresources = service->resources;
|
oldresources = service->resources;
|
||||||
|
service->resources = NULL;
|
||||||
|
|
||||||
/* load db users ad db grants */
|
/* load db users ad db grants */
|
||||||
i = getUsers(service, newusers);
|
i = getUsers(service, newusers);
|
||||||
@ -420,7 +422,8 @@ getDatabases(SERVICE *service, MYSQL *con)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Now populate service->resources hashatable with db names */
|
/* Now populate service->resources hashatable with db names */
|
||||||
service->resources = resource_alloc();
|
if(service->resources == NULL)
|
||||||
|
service->resources = resource_alloc();
|
||||||
|
|
||||||
/* insert key and value "" */
|
/* insert key and value "" */
|
||||||
while ((row = mysql_fetch_row(result))) {
|
while ((row = mysql_fetch_row(result))) {
|
||||||
|
@ -319,6 +319,10 @@ int gen_databaselist(ROUTER_INSTANCE* inst, ROUTER_CLIENT_SES* session)
|
|||||||
clone = gwbuf_clone(buffer);
|
clone = gwbuf_clone(buffer);
|
||||||
dcb = session->rses_backend_ref[i].bref_dcb;
|
dcb = session->rses_backend_ref[i].bref_dcb;
|
||||||
rval = dcb->func.write(dcb,clone);
|
rval = dcb->func.write(dcb,clone);
|
||||||
|
skygw_log_write(LOGFILE_DEBUG,"dbshard: Wrote SHOW DATABASES to %s for session %p: returned %d",
|
||||||
|
session->rses_backend_ref[i].bref_backend->backend_server->unique_name,
|
||||||
|
session->rses_client_dcb->session,
|
||||||
|
rval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1644,17 +1648,27 @@ static int routeQuery(
|
|||||||
|
|
||||||
if(!rses_is_closed && router_cli_ses->init != INIT_READY)
|
if(!rses_is_closed && router_cli_ses->init != INIT_READY)
|
||||||
{
|
{
|
||||||
gwbuf_make_contiguous(querybuf);
|
char* querystr = modutil_get_SQL(querybuf);
|
||||||
|
skygw_log_write(LOGFILE_DEBUG,"dbshard: Storing query for session %p: %s",
|
||||||
|
router_cli_ses->rses_client_dcb->session,
|
||||||
|
querystr);
|
||||||
|
free(querystr);
|
||||||
|
gwbuf_make_contiguous(querybuf);
|
||||||
GWBUF* ptr = router_cli_ses->queue;
|
GWBUF* ptr = router_cli_ses->queue;
|
||||||
|
|
||||||
while(ptr && ptr->next)
|
while(ptr && ptr->next)
|
||||||
|
{
|
||||||
ptr = ptr->next;
|
ptr = ptr->next;
|
||||||
|
}
|
||||||
|
|
||||||
if(ptr == NULL)
|
if(ptr == NULL)
|
||||||
|
{
|
||||||
router_cli_ses->queue = querybuf;
|
router_cli_ses->queue = querybuf;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
ptr->next = querybuf;
|
ptr->next = querybuf;
|
||||||
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
packet = GWBUF_DATA(querybuf);
|
packet = GWBUF_DATA(querybuf);
|
||||||
@ -2209,7 +2223,9 @@ static void clientReply (
|
|||||||
goto lock_failed;
|
goto lock_failed;
|
||||||
}
|
}
|
||||||
bref = get_bref_from_dcb(router_cli_ses, backend_dcb);
|
bref = get_bref_from_dcb(router_cli_ses, backend_dcb);
|
||||||
|
skygw_log_write(LOGFILE_DEBUG,"dbshard: Received reply from %s for session %p",
|
||||||
|
bref->bref_backend->backend_server->unique_name,
|
||||||
|
router_cli_ses->rses_client_dcb->session);
|
||||||
#if !defined(FOR_BUG548_FIX_ONLY)
|
#if !defined(FOR_BUG548_FIX_ONLY)
|
||||||
/** This makes the issue becoming visible in poll.c */
|
/** This makes the issue becoming visible in poll.c */
|
||||||
if (bref == NULL)
|
if (bref == NULL)
|
||||||
@ -2222,7 +2238,7 @@ static void clientReply (
|
|||||||
|
|
||||||
if(router_cli_ses->init & INIT_MAPPING)
|
if(router_cli_ses->init & INIT_MAPPING)
|
||||||
{
|
{
|
||||||
bool mapped = true;
|
bool mapped = true, logged = false;
|
||||||
int i;
|
int i;
|
||||||
backend_ref_t* bkrf = router_cli_ses->rses_backend_ref;
|
backend_ref_t* bkrf = router_cli_ses->rses_backend_ref;
|
||||||
|
|
||||||
@ -2235,15 +2251,22 @@ static void clientReply (
|
|||||||
parse_showdb_response(router_cli_ses,
|
parse_showdb_response(router_cli_ses,
|
||||||
router_cli_ses->rses_backend_ref[i].bref_backend->backend_server->unique_name,
|
router_cli_ses->rses_backend_ref[i].bref_backend->backend_server->unique_name,
|
||||||
writebuf);
|
writebuf);
|
||||||
skygw_log_write_flush(LOGFILE_DEBUG,"session [%p] server '%s' databases mapped.",
|
skygw_log_write(LOGFILE_DEBUG,"dbshard: Received SHOW DATABASES reply from %s for session %p",
|
||||||
router_cli_ses,
|
router_cli_ses->rses_backend_ref[i].bref_backend->backend_server->unique_name,
|
||||||
bref->bref_backend->backend_server->unique_name);
|
router_cli_ses->rses_client_dcb->session);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(BREF_IS_IN_USE(&bkrf[i]) &&
|
if(BREF_IS_IN_USE(&bkrf[i]) &&
|
||||||
!BREF_IS_MAPPED(&bkrf[i]))
|
!BREF_IS_MAPPED(&bkrf[i]))
|
||||||
{
|
{
|
||||||
mapped = false;
|
mapped = false;
|
||||||
|
if(!logged)
|
||||||
|
{
|
||||||
|
skygw_log_write(LOGFILE_DEBUG,"dbshard: Still waiting for reply to SHOW DATABASES from %s for session %p",
|
||||||
|
bkrf[i].bref_backend->backend_server->unique_name,
|
||||||
|
router_cli_ses->rses_client_dcb->session);
|
||||||
|
logged = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2254,9 +2277,9 @@ static void clientReply (
|
|||||||
/*
|
/*
|
||||||
* Check if the session is reconnecting with a database name
|
* Check if the session is reconnecting with a database name
|
||||||
* that is not in the hashtable. If the database is not found
|
* that is not in the hashtable. If the database is not found
|
||||||
* then close the session.
|
* then close the session.
|
||||||
|
*/
|
||||||
|
|
||||||
* */
|
|
||||||
router_cli_ses->init &= ~INIT_MAPPING;
|
router_cli_ses->init &= ~INIT_MAPPING;
|
||||||
|
|
||||||
if(router_cli_ses->init & INIT_USE_DB)
|
if(router_cli_ses->init & INIT_USE_DB)
|
||||||
@ -2272,6 +2295,7 @@ static void clientReply (
|
|||||||
if(router_cli_ses->queue)
|
if(router_cli_ses->queue)
|
||||||
gwbuf_free(router_cli_ses->queue);
|
gwbuf_free(router_cli_ses->queue);
|
||||||
rses_end_locked_router_action(router_cli_ses);
|
rses_end_locked_router_action(router_cli_ses);
|
||||||
|
print_error_packet(router_cli_ses, writebuf, backend_dcb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2290,6 +2314,7 @@ static void clientReply (
|
|||||||
if(router_cli_ses->queue)
|
if(router_cli_ses->queue)
|
||||||
gwbuf_free(router_cli_ses->queue);
|
gwbuf_free(router_cli_ses->queue);
|
||||||
rses_end_locked_router_action(router_cli_ses);
|
rses_end_locked_router_action(router_cli_ses);
|
||||||
|
print_error_packet(router_cli_ses, writebuf, backend_dcb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2302,7 +2327,9 @@ static void clientReply (
|
|||||||
|
|
||||||
if(get_shard_dcb(&dcb,router_cli_ses,target))
|
if(get_shard_dcb(&dcb,router_cli_ses,target))
|
||||||
{
|
{
|
||||||
dcb->func.write(dcb,buffer);
|
dcb->func.write(dcb,buffer);
|
||||||
|
skygw_log_write(LOGFILE_DEBUG,"dbshard: USE <db> sent to %s for session %p",
|
||||||
|
target,router_cli_ses->rses_client_dcb->session);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2320,8 +2347,14 @@ static void clientReply (
|
|||||||
{
|
{
|
||||||
GWBUF* tmp = router_cli_ses->queue;
|
GWBUF* tmp = router_cli_ses->queue;
|
||||||
router_cli_ses->queue = router_cli_ses->queue->next;
|
router_cli_ses->queue = router_cli_ses->queue->next;
|
||||||
tmp->next = NULL;
|
tmp->next = NULL;
|
||||||
|
char* querystr = modutil_get_SQL(tmp);
|
||||||
|
skygw_log_write(LOGFILE_DEBUG,"dbshard: Sending queued buffer for session %p: %s",
|
||||||
|
router_cli_ses->rses_client_dcb->session,
|
||||||
|
querystr);
|
||||||
poll_add_epollin_event_to_dcb(router_cli_ses->dcb_route,tmp);
|
poll_add_epollin_event_to_dcb(router_cli_ses->dcb_route,tmp);
|
||||||
|
free(querystr);
|
||||||
|
|
||||||
}
|
}
|
||||||
skygw_log_write_flush(LOGFILE_DEBUG,"session [%p] database map finished.",
|
skygw_log_write_flush(LOGFILE_DEBUG,"session [%p] database map finished.",
|
||||||
router_cli_ses);
|
router_cli_ses);
|
||||||
@ -2337,13 +2370,21 @@ static void clientReply (
|
|||||||
GWBUF* tmp = router_cli_ses->queue;
|
GWBUF* tmp = router_cli_ses->queue;
|
||||||
router_cli_ses->queue = router_cli_ses->queue->next;
|
router_cli_ses->queue = router_cli_ses->queue->next;
|
||||||
tmp->next = NULL;
|
tmp->next = NULL;
|
||||||
|
char* querystr = modutil_get_SQL(tmp);
|
||||||
|
skygw_log_write(LOGFILE_DEBUG,"dbshard: Sending queued buffer for session %p: %s",
|
||||||
|
router_cli_ses->rses_client_dcb->session,
|
||||||
|
querystr);
|
||||||
poll_add_epollin_event_to_dcb(router_cli_ses->dcb_route,tmp);
|
poll_add_epollin_event_to_dcb(router_cli_ses->dcb_route,tmp);
|
||||||
|
free(querystr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(router_cli_ses->init & INIT_USE_DB)
|
if(router_cli_ses->init & INIT_USE_DB)
|
||||||
{
|
{
|
||||||
|
skygw_log_write(LOGFILE_DEBUG,"dbshard: Reply to USE <db> received for session %p",
|
||||||
|
router_cli_ses->rses_client_dcb->session);
|
||||||
router_cli_ses->init &= ~INIT_USE_DB;
|
router_cli_ses->init &= ~INIT_USE_DB;
|
||||||
strcpy(router_cli_ses->rses_mysql_session->db,router_cli_ses->connect_db);
|
strcpy(router_cli_ses->rses_mysql_session->db,router_cli_ses->connect_db);
|
||||||
|
ss_dassert(router_cli_ses->init == INIT_READY);
|
||||||
rses_end_locked_router_action(router_cli_ses);
|
rses_end_locked_router_action(router_cli_ses);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user