mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Fixed assert in perfschema/pfs.cc::start_idle_wait_v1 when using performance schema and big packets in debug version.
The bug was that my_real_read() called net_before_header_psi() multiple times for long packets. Fixed by adding a flag when we are reading a header. Did also some cleanups to interface of my_net_read() to avoid unnecessary calls if performance schema is not used. - Added my_net_read_packet() as a replacement for my_net_read(). my_net_read() is still in the client library for old clients. - Removed THD->m_server_idle (not needed anymore as this is now given as argument to my_net_read_packet() - Added my_net_read_packet(), which is a new version of my_net_read() with a new parameter if we are doing a read for a new command from the server. - Added tests for compressed protocol and big packets include/mysql.h.pp: Added my_net_read_packet() as a replacement for my_net_read() include/mysql_com.h: Added my_net_read_packet() as a replacement for my_net_read() mysql-test/r/mysql_client_test_comp.result: New test mysql-test/t/mysql_client_test-master.opt: Added max_allowed_packet to be able to test big packets and packet size overflows. mysql-test/t/mysql_client_test_comp-master.opt: New test mysql-test/t/mysql_client_test_nonblock-master.opt: Added max_allowed_packet to be able to test big packets and packet size overflows. sql-common/client.c: Use my_net_read_packet() sql/mf_iocache.cc: Use my_net_read_packet() sql/mysqld.cc: Removed THD->m_server_idle (not needed anymore as this is now given as argument to my_net_read_packet() sql/net_serv.cc: Added argument to my_real_read() to indicte if we are reading the first block of the next statement and should call performance schema. Added 'compatibilty function' my_net_read(). Added my_net_read_packet(), which is a new version of my_net_read() with a new parameter if we are doing a read for a new command from the server. sql/sql_class.cc: Removed m_server_idle (not needed anymore) sql/sql_class.h: Removed m_server_idle (not needed anymore) sql/sql_parse.cc: Removed m_server_idle (not needed anymore) tests/mysql_client_test.c: Added tests for compressed protocol and big packets
This commit is contained in:
@@ -18616,7 +18616,7 @@ static void test_bug56976()
|
||||
const char* query = "SELECT LENGTH(?)";
|
||||
char *long_buffer;
|
||||
unsigned long i, packet_len = 256 * 1024L;
|
||||
unsigned long dos_len = 2 * 1024 * 1024L;
|
||||
unsigned long dos_len = 35000000;
|
||||
|
||||
DBUG_ENTER("test_bug56976");
|
||||
myheader("test_bug56976");
|
||||
@@ -19255,6 +19255,106 @@ static void test_mdev4326()
|
||||
myquery(rc);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Check compressed protocol
|
||||
*/
|
||||
|
||||
static void test_compressed_protocol()
|
||||
{
|
||||
MYSQL *mysql_local;
|
||||
char query[4096], *end;
|
||||
int i;
|
||||
myheader("test_compressed_protocol");
|
||||
|
||||
if (!(mysql_local= mysql_client_init(NULL)))
|
||||
{
|
||||
fprintf(stderr, "\n mysql_client_init() failed");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!(mysql_real_connect(mysql_local, opt_host, opt_user,
|
||||
opt_password, current_db, opt_port,
|
||||
opt_unix_socket, CLIENT_COMPRESS)))
|
||||
{
|
||||
fprintf(stderr, "\n connection failed(%s)", mysql_error(mysql_local));
|
||||
exit(1);
|
||||
}
|
||||
mysql_options(mysql_local,MYSQL_OPT_COMPRESS,NullS);
|
||||
|
||||
end= strmov(strfill(strmov(query, "select length(\""),1000,'a'),"\")");
|
||||
|
||||
for (i=0 ; i < 2 ; i++)
|
||||
{
|
||||
MYSQL_RES *res;
|
||||
|
||||
int rc= mysql_real_query(mysql, query, (int) (end-query));
|
||||
myquery(rc);
|
||||
res= mysql_store_result(mysql);
|
||||
DBUG_ASSERT(res != 0);
|
||||
mysql_free_result(res);
|
||||
}
|
||||
|
||||
mysql_close(mysql_local);
|
||||
}
|
||||
|
||||
/*
|
||||
Check big packets
|
||||
*/
|
||||
|
||||
static void test_big_packet()
|
||||
{
|
||||
MYSQL *mysql_local;
|
||||
char *query, *end;
|
||||
/* We run the tests with a server with max packet size of 3200000 */
|
||||
size_t big_packet= 31000000L;
|
||||
int i;
|
||||
MYSQL_PARAMETERS *mysql_params= mysql_get_parameters();
|
||||
long org_max_allowed_packet= *mysql_params->p_max_allowed_packet;
|
||||
long opt_net_buffer_length= *mysql_params->p_net_buffer_length;
|
||||
|
||||
myheader("test_big_packet");
|
||||
|
||||
query= (char*) my_malloc(big_packet+1024, MYF(MY_WME));
|
||||
DIE_UNLESS(query);
|
||||
|
||||
if (!(mysql_local= mysql_client_init(NULL)))
|
||||
{
|
||||
fprintf(stderr, "\n mysql_client_init() failed");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!(mysql_real_connect(mysql_local, opt_host, opt_user,
|
||||
opt_password, current_db, opt_port,
|
||||
opt_unix_socket, 0)))
|
||||
{
|
||||
fprintf(stderr, "\n connection failed(%s)", mysql_error(mysql_local));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
*mysql_params->p_max_allowed_packet= big_packet+1000;
|
||||
*mysql_params->p_net_buffer_length= 8L*256L*256L;
|
||||
|
||||
end= strmov(strfill(strmov(query, "select length(\""), big_packet,'a'),"\")");
|
||||
|
||||
for (i=0 ; i < 2 ; i++)
|
||||
{
|
||||
MYSQL_RES *res;
|
||||
int rc= mysql_real_query(mysql, query, (int) (end-query));
|
||||
myquery(rc);
|
||||
res= mysql_store_result(mysql);
|
||||
DBUG_ASSERT(res != 0);
|
||||
mysql_free_result(res);
|
||||
}
|
||||
|
||||
mysql_close(mysql_local);
|
||||
my_free(query);
|
||||
|
||||
*mysql_params->p_max_allowed_packet= org_max_allowed_packet;
|
||||
*mysql_params->p_net_buffer_length = opt_net_buffer_length;
|
||||
}
|
||||
|
||||
|
||||
static struct my_tests_st my_tests[]= {
|
||||
{ "disable_query_logs", disable_query_logs },
|
||||
{ "test_view_sp_list_fields", test_view_sp_list_fields },
|
||||
@@ -19526,6 +19626,8 @@ static struct my_tests_st my_tests[]= {
|
||||
{ "test_bug13001491", test_bug13001491 },
|
||||
{ "test_mdev4326", test_mdev4326 },
|
||||
{ "test_ps_sp_out_params", test_ps_sp_out_params },
|
||||
{ "test_compressed_protocol", test_compressed_protocol },
|
||||
{ "test_big_packet", test_big_packet },
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user