Fixed session commands being executed multiple times.

This commit is contained in:
Markus Makela
2015-07-22 14:39:18 +03:00
parent 732cfeb38c
commit 19d9c9982f

View File

@ -3825,7 +3825,7 @@ static GWBUF* sescmd_cursor_process_replies(
/** Mark the rest session commands as replied */ /** Mark the rest session commands as replied */
scmd->my_sescmd_is_replied = true; scmd->my_sescmd_is_replied = true;
scmd->reply_cmd = *((unsigned char*)replybuf->start + 4); scmd->reply_cmd = *((unsigned char*)replybuf->start + 4);
skygw_log_write(LOGFILE_DEBUG,"Master '%s' responded to a session command.", skygw_log_write(LT,"Master '%s' responded to a session command.",
bref->bref_backend->backend_server->unique_name); bref->bref_backend->backend_server->unique_name);
int i; int i;
@ -3845,6 +3845,11 @@ static GWBUF* sescmd_cursor_process_replies(
if(ses->rses_backend_ref[i].bref_dcb) if(ses->rses_backend_ref[i].bref_dcb)
dcb_close(ses->rses_backend_ref[i].bref_dcb); dcb_close(ses->rses_backend_ref[i].bref_dcb);
*reconnect = true; *reconnect = true;
skygw_log_write(LT,"Disabling slave %s:%d, result differs from master's result. Master: %d Slave: %d",
ses->rses_backend_ref[i].bref_backend->backend_server->name,
ses->rses_backend_ref[i].bref_backend->backend_server->port,
bref->reply_cmd,
ses->rses_backend_ref[i].reply_cmd);
} }
} }
} }
@ -3852,11 +3857,17 @@ static GWBUF* sescmd_cursor_process_replies(
} }
else else
{ {
skygw_log_write(LOGFILE_DEBUG,"Slave '%s' responded faster to a session command.", skygw_log_write(LT,"Slave '%s' responded before master to a session command. Result: %d",
bref->bref_backend->backend_server->unique_name); bref->bref_backend->backend_server->unique_name,
(int)bref->reply_cmd);
if(bref->reply_cmd == 0xff)
{
SERVER* serv = bref->bref_backend->backend_server;
skygw_log_write(LE,"Error: Slave '%s' (%s:%u) failed to execute session command.",
serv->unique_name,serv->name,serv->port);
}
if(replybuf) if(replybuf)
while((replybuf = gwbuf_consume(replybuf,gwbuf_length(replybuf)))); while((replybuf = gwbuf_consume(replybuf,gwbuf_length(replybuf))));
return NULL;
} }