Added new member to TEE_SESSION structure: TEE_SESSION->tee_replybuf where reply message is stored until replied to client.

Temporarily commented out waiting section and left to be removed after further testing.
This commit is contained in:
VilhoRaatikka
2014-12-31 14:42:14 +02:00
parent 5ab329f888
commit d1bc68c7d0

View File

@ -162,6 +162,7 @@ typedef struct {
int residual; /* Any outstanding SQL text */ int residual; /* Any outstanding SQL text */
unsigned char last_qtype; unsigned char last_qtype;
char* last_query; char* last_query;
GWBUF* tee_replybuf; /* Buffer for reply */
} TEE_SESSION; } TEE_SESSION;
static int packet_is_required(GWBUF *queue); static int packet_is_required(GWBUF *queue);
@ -636,7 +637,7 @@ GWBUF *clone = NULL;
clone = gwbuf_clone(queue); clone = gwbuf_clone(queue);
} }
} }
#if 0
if (my_session->branch_session && my_session->waiting) if (my_session->branch_session && my_session->waiting)
{ {
SESSION *bsession; SESSION *bsession;
@ -698,6 +699,7 @@ GWBUF *clone = NULL;
my_session->waiting = 0; my_session->waiting = 0;
} }
ss_dassert(my_session->waiting == 0) ss_dassert(my_session->waiting == 0)
#endif
/* Pass the query downstream */ /* Pass the query downstream */
rval = my_session->down.routeQuery(my_session->down.instance, rval = my_session->down.routeQuery(my_session->down.instance,
my_session->down.session, my_session->down.session,
@ -750,18 +752,35 @@ GWBUF *clone = NULL;
static int static int
clientReply (FILTER* instance, void *session, GWBUF *reply) clientReply (FILTER* instance, void *session, GWBUF *reply)
{ {
int rc;
TEE_SESSION *my_session = (TEE_SESSION *) session; TEE_SESSION *my_session = (TEE_SESSION *) session;
my_session->replies++; my_session->replies++;
if (my_session->branch_session == NULL || if (my_session->tee_replybuf == NULL)
my_session->replies < my_session->min_replies)
{ {
return my_session->up.clientReply (my_session->up.instance, my_session->tee_replybuf = reply;
my_session->up.session, reply); }
else
{
gwbuf_free(reply);
} }
return 1; if (my_session->branch_session == NULL ||
my_session->replies >= my_session->min_replies)
{
rc = my_session->up.clientReply (
my_session->up.instance,
my_session->up.session,
my_session->tee_replybuf);
my_session->replies = 0;
my_session->tee_replybuf = NULL;
}
else
{
rc = 1;
}
return rc;
} }
/** /**
* Diagnostics routine * Diagnostics routine