diff --git a/server/modules/protocol/mysql_common.c b/server/modules/protocol/mysql_common.c index ab1fab315..00bdd0e3f 100644 --- a/server/modules/protocol/mysql_common.c +++ b/server/modules/protocol/mysql_common.c @@ -1137,6 +1137,11 @@ int gw_send_change_user_to_backend( // allocating the GWBUF buffer = gwbuf_alloc(bytes); + /** + * Set correct type to GWBUF so that it will be handled like session + * commands should + */ + buffer->gwbuf_type = GWBUF_TYPE_MYSQL|GWBUF_TYPE_SINGLE_STMT|GWBUF_TYPE_SESCMD; payload = GWBUF_DATA(buffer); // clearing data diff --git a/server/modules/routing/readwritesplit/readwritesplit.c b/server/modules/routing/readwritesplit/readwritesplit.c index bbcdc2dea..968b15c62 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.c +++ b/server/modules/routing/readwritesplit/readwritesplit.c @@ -2337,21 +2337,29 @@ static void clientReply ( { uint8_t* buf = (uint8_t *)GWBUF_DATA((scur->scmd_cur_cmd->my_sescmd_buf)); - size_t len = MYSQL_GET_PACKET_LEN(buf); - char* cmdstr = (char *)malloc(len+1); - /** data+termination character == len */ - snprintf(cmdstr, len, "%s", &buf[5]); - + uint8_t* replybuf = (uint8_t *)GWBUF_DATA(writebuf); + size_t len = MYSQL_GET_PACKET_LEN(buf); + size_t replylen = MYSQL_GET_PACKET_LEN(replybuf); + char* cmdstr = strndup(&((char *)buf)[5], len-4); + char* err = strndup(&((char *)replybuf)[8], 5); + char* replystr = strndup(&((char *)replybuf)[13], + replylen-4-5); + ss_dassert(len+4 == GWBUF_LENGTH(scur->scmd_cur_cmd->my_sescmd_buf)); LOGIF(LE, (skygw_log_write_flush( LOGFILE_ERROR, - "Error : Failed to execute %s in %s:%d.", + "Error : Failed to execute %s in %s:%d.\n\t\t" + " %s %s", cmdstr, bref->bref_backend->backend_server->name, - bref->bref_backend->backend_server->port))); + bref->bref_backend->backend_server->port, + err, + replystr))); free(cmdstr); + free(err); + free(replystr); } if (GWBUF_IS_TYPE_SESCMD_RESPONSE(writebuf))