Merge branch 'schemarouter_fix' into develop
This commit is contained in:
@ -41,7 +41,8 @@ typedef enum init_mask
|
|||||||
{
|
{
|
||||||
INIT_READY = 0x0,
|
INIT_READY = 0x0,
|
||||||
INIT_MAPPING = 0x1,
|
INIT_MAPPING = 0x1,
|
||||||
INIT_USE_DB = 0x02
|
INIT_USE_DB = 0x02,
|
||||||
|
INIT_UNINT = 0x04
|
||||||
|
|
||||||
} init_mask_t;
|
} init_mask_t;
|
||||||
|
|
||||||
|
@ -378,7 +378,7 @@ int gen_databaselist(ROUTER_INSTANCE* inst, ROUTER_CLIENT_SES* session)
|
|||||||
unsigned int len;
|
unsigned int len;
|
||||||
|
|
||||||
session->init |= INIT_MAPPING;
|
session->init |= INIT_MAPPING;
|
||||||
|
session->init &= ~INIT_UNINT;
|
||||||
len = strlen(query);
|
len = strlen(query);
|
||||||
buffer = gwbuf_alloc(len + 4);
|
buffer = gwbuf_alloc(len + 4);
|
||||||
*((unsigned char*)buffer->start) = len;
|
*((unsigned char*)buffer->start) = len;
|
||||||
@ -836,7 +836,7 @@ static void* newSession(
|
|||||||
client_rses->dcb_route->func.read = internalRoute;
|
client_rses->dcb_route->func.read = internalRoute;
|
||||||
client_rses->dcb_route->state = DCB_STATE_POLLING;
|
client_rses->dcb_route->state = DCB_STATE_POLLING;
|
||||||
client_rses->dcb_route->session = session;
|
client_rses->dcb_route->session = session;
|
||||||
client_rses->init = INIT_MAPPING;
|
client_rses->init = INIT_UNINT;
|
||||||
if(using_db)
|
if(using_db)
|
||||||
client_rses->init |= INIT_USE_DB;
|
client_rses->init |= INIT_USE_DB;
|
||||||
/**
|
/**
|
||||||
@ -1685,34 +1685,44 @@ static int routeQuery(
|
|||||||
}
|
}
|
||||||
ss_dassert(!GWBUF_IS_TYPE_UNDEFINED(querybuf));
|
ss_dassert(!GWBUF_IS_TYPE_UNDEFINED(querybuf));
|
||||||
|
|
||||||
if(!rses_is_closed && router_cli_ses->init != INIT_READY)
|
if(!rses_is_closed)
|
||||||
{
|
{
|
||||||
/* Generate database list */
|
if(router_cli_ses->init & INIT_UNINT)
|
||||||
gen_databaselist(inst,router_cli_ses);
|
{
|
||||||
|
/* Generate database list */
|
||||||
|
gen_databaselist(inst,router_cli_ses);
|
||||||
|
|
||||||
char* querystr = modutil_get_SQL(querybuf);
|
}
|
||||||
skygw_log_write(LOGFILE_DEBUG,"schemarouter: 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;
|
|
||||||
|
|
||||||
while(ptr && ptr->next)
|
if(router_cli_ses->init & INIT_MAPPING)
|
||||||
{
|
{
|
||||||
ptr = ptr->next;
|
|
||||||
}
|
char* querystr = modutil_get_SQL(querybuf);
|
||||||
|
skygw_log_write(LOGFILE_DEBUG,"schemarouter: 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;
|
||||||
|
|
||||||
|
while(ptr && ptr->next)
|
||||||
|
{
|
||||||
|
ptr = ptr->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ptr == NULL)
|
||||||
|
{
|
||||||
|
router_cli_ses->queue = querybuf;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ptr->next = querybuf;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if(ptr == NULL)
|
|
||||||
{
|
|
||||||
router_cli_ses->queue = querybuf;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ptr->next = querybuf;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
packet = GWBUF_DATA(querybuf);
|
packet = GWBUF_DATA(querybuf);
|
||||||
packet_type = packet[4];
|
packet_type = packet[4];
|
||||||
|
|
||||||
@ -2232,9 +2242,13 @@ static void clientReply (
|
|||||||
goto lock_failed;
|
goto lock_failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
skygw_log_write(LOGFILE_DEBUG,"schemarouter: Received reply from %s for session %p",
|
skygw_log_write(LOGFILE_DEBUG,"schemarouter: Received reply from %s for session %p"
|
||||||
|
"\nmapped:%s queries queued:%s",
|
||||||
bref->bref_backend->backend_server->unique_name,
|
bref->bref_backend->backend_server->unique_name,
|
||||||
router_cli_ses->rses_client_dcb->session);
|
router_cli_ses->rses_client_dcb->session,
|
||||||
|
router_cli_ses->init & INIT_MAPPING?"true":"false",
|
||||||
|
router_cli_ses->queue == NULL ? "none" :
|
||||||
|
router_cli_ses->queue->next ? "multiple":"one");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user