MXS-1653: Fix hang on preparation of BEGIN
When a BEGIN statement is prepared using the binary protocol, it returns a single OK packet. Due to a bug in the code that deals with multi-statement results and EOF packets, the response was never sent to the client. Also added back the error messages of failed session commands to the INFO level. This way it's still possible to see why a session command fails but the log isn't flooded by them in normal usage.
This commit is contained in:
@ -637,9 +637,11 @@ int modutil_count_signal_packets(GWBUF *reply, int n_found, bool* more_out, modu
|
||||
bool skip_next = state ? state->state : false;
|
||||
bool more = false;
|
||||
bool only_ok = true;
|
||||
uint64_t num_packets = 0;
|
||||
|
||||
while (offset < len)
|
||||
{
|
||||
num_packets++;
|
||||
uint8_t header[MYSQL_HEADER_LEN + 5]; // Maximum size of an EOF packet
|
||||
|
||||
gwbuf_copy_data(reply, offset, MYSQL_HEADER_LEN + 1, header);
|
||||
@ -720,7 +722,9 @@ int modutil_count_signal_packets(GWBUF *reply, int n_found, bool* more_out, modu
|
||||
|
||||
*more_out = more;
|
||||
|
||||
if (only_ok && !more)
|
||||
// Treat complete multi-statement result sets that consist of only OK packets as a single result set
|
||||
// TODO: Review this, it doesn't look very convincing.
|
||||
if (only_ok && !more && num_packets > 1)
|
||||
{
|
||||
total = 2;
|
||||
}
|
||||
|
Reference in New Issue
Block a user