Files
MaxScale/maxscale-system-test/mxs1804_long_ps_hang.cpp
Markus Mäkelä 3a1c2119fb MXS-1804: Fix hanging of large session commands
Large session commands weren't properly handled which caused the router to
think that the trailing end of a multi-packet query was actually a new
query.

This cannot be confidently solved in 2.2 which is why the router session
is now closed the moment a large session command is noticed.
2018-04-17 15:04:12 +03:00

42 lines
1.0 KiB
C++

/**
* MXS-1804: request 16M-1 stmt_prepare command packet connect hang
*
* https://jira.mariadb.org/browse/MXS-1804
*/
#include "testconnections.h"
int sql_str_size(int sqlsize)
{
char prefx[] = "select ''";
return sqlsize - strlen(prefx) - 1;
}
void gen_select_sqlstr(char *sqlstr, unsigned int strsize, int sqlsize)
{
strcpy(sqlstr, "select '");
memset(sqlstr + strlen("select '"), 'f', strsize);
sqlstr[sqlsize - 2] = '\'';
sqlstr[sqlsize - 1] = '\0';
}
int main(int argc, char** argv)
{
TestConnections test(argc, argv);
int sqlsize = 16777215;
int strsize = sql_str_size(sqlsize);
char* sqlstr = (char *)malloc(sqlsize);
gen_select_sqlstr(sqlstr, strsize, sqlsize);
test.set_timeout(30);
test.maxscales->connect();
MYSQL_STMT* stmt = mysql_stmt_init(test.maxscales->conn_rwsplit[0]);
test.assert(mysql_stmt_prepare(stmt, sqlstr, strlen(sqlstr)) != 0, "Prepare should fail in 2.2 but not hang",
mysql_stmt_error(stmt));
mysql_stmt_close(stmt);
return test.global_result;
}