mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
In test for bug#15933 we have to wait for all disconnects to finish to avoid
a race between updating and checking Max_used_connections. This is done in a loop until either disconnect finished or timeout expired. In a latter case the test will fail. mysql-test/r/status.result: Update result to match changes in test case. mysql-test/t/status.test: Close extra conections in previous test. In test for bug#15933 we have to wait for all disconnects to finish to avoid a race between updating and checking Max_used_connections. This is done in a loop until either disconnect finished or timeout expired. In a latter case the test will fail. Use con1, con2, con3 instead of con3, con4, con5.
This commit is contained in:
@ -26,20 +26,20 @@ Last_query_cost 0.000000
|
|||||||
FLUSH STATUS;
|
FLUSH STATUS;
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Max_used_connections 3
|
Max_used_connections 1
|
||||||
SET @save_thread_cache_size=@@thread_cache_size;
|
SET @save_thread_cache_size=@@thread_cache_size;
|
||||||
SET GLOBAL thread_cache_size=3;
|
SET GLOBAL thread_cache_size=3;
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Max_used_connections 5
|
Max_used_connections 3
|
||||||
FLUSH STATUS;
|
FLUSH STATUS;
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
|
Max_used_connections 2
|
||||||
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
|
Variable_name Value
|
||||||
|
Max_used_connections 3
|
||||||
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
|
Variable_name Value
|
||||||
Max_used_connections 4
|
Max_used_connections 4
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
|
||||||
Variable_name Value
|
|
||||||
Max_used_connections 5
|
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
|
||||||
Variable_name Value
|
|
||||||
Max_used_connections 6
|
|
||||||
SET GLOBAL thread_cache_size=@save_thread_cache_size;
|
SET GLOBAL thread_cache_size=@save_thread_cache_size;
|
||||||
|
@ -36,6 +36,10 @@ reap;
|
|||||||
show status like 'Table_lock%';
|
show status like 'Table_lock%';
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
disconnect con2;
|
||||||
|
disconnect con1;
|
||||||
|
connection default;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -60,48 +64,81 @@ show status like 'last_query_cost';
|
|||||||
# taking a thread from the cache as well as when creating new threads
|
# taking a thread from the cache as well as when creating new threads
|
||||||
#
|
#
|
||||||
|
|
||||||
# Previous test uses con1, con2. If we disconnect them, there will be
|
# Wait for at most $disconnect_timeout seconds for disconnects to finish.
|
||||||
# a race on when exactly this will happen, so we better leave them as
|
let $disconnect_timeout = 10;
|
||||||
# is.
|
|
||||||
connection default;
|
|
||||||
|
|
||||||
# Reset max_used_connections from previous tests.
|
# Wait for any previous disconnects to finish.
|
||||||
FLUSH STATUS;
|
FLUSH STATUS;
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
eval SET @wait_left = $disconnect_timeout;
|
||||||
|
let $max_used_connections = `SHOW STATUS LIKE 'max_used_connections'`;
|
||||||
|
eval SET @max_used_connections = SUBSTRING('$max_used_connections', 21)+0;
|
||||||
|
let $wait_more = `SELECT @max_used_connections != 1 && @wait_left > 0`;
|
||||||
|
while ($wait_more)
|
||||||
|
{
|
||||||
|
sleep 1;
|
||||||
|
FLUSH STATUS;
|
||||||
|
SET @wait_left = @wait_left - 1;
|
||||||
|
let $max_used_connections = `SHOW STATUS LIKE 'max_used_connections'`;
|
||||||
|
eval SET @max_used_connections = SUBSTRING('$max_used_connections', 21)+0;
|
||||||
|
let $wait_more = `SELECT @max_used_connections != 1 && @wait_left > 0`;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
--enable_result_log
|
||||||
|
|
||||||
|
# Prerequisite.
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
|
|
||||||
# Save original setting.
|
# Save original setting.
|
||||||
SET @save_thread_cache_size=@@thread_cache_size;
|
SET @save_thread_cache_size=@@thread_cache_size;
|
||||||
SET GLOBAL thread_cache_size=3;
|
SET GLOBAL thread_cache_size=3;
|
||||||
|
|
||||||
connect (con3,localhost,root,,);
|
connect (con1,localhost,root,,);
|
||||||
connect (con4,localhost,root,,);
|
connect (con2,localhost,root,,);
|
||||||
|
|
||||||
connection con3;
|
connection con1;
|
||||||
disconnect con4;
|
disconnect con2;
|
||||||
|
|
||||||
# Check that max_used_connections still reflects maximum value.
|
# Check that max_used_connections still reflects maximum value.
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
|
|
||||||
# Check that after flush max_used_connections equals to current number
|
# Check that after flush max_used_connections equals to current number
|
||||||
# of connections.
|
# of connections. First wait for previous disconnect to finish.
|
||||||
FLUSH STATUS;
|
FLUSH STATUS;
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
eval SET @wait_left = $disconnect_timeout;
|
||||||
|
let $max_used_connections = `SHOW STATUS LIKE 'max_used_connections'`;
|
||||||
|
eval SET @max_used_connections = SUBSTRING('$max_used_connections', 21)+0;
|
||||||
|
let $wait_more = `SELECT @max_used_connections != 2 && @wait_left > 0`;
|
||||||
|
while ($wait_more)
|
||||||
|
{
|
||||||
|
sleep 1;
|
||||||
|
FLUSH STATUS;
|
||||||
|
SET @wait_left = @wait_left - 1;
|
||||||
|
let $max_used_connections = `SHOW STATUS LIKE 'max_used_connections'`;
|
||||||
|
eval SET @max_used_connections = SUBSTRING('$max_used_connections', 21)+0;
|
||||||
|
let $wait_more = `SELECT @max_used_connections != 2 && @wait_left > 0`;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
--enable_result_log
|
||||||
|
# Check that we don't count disconnected thread any longer.
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
|
|
||||||
# Check that max_used_connections is updated when cached thread is
|
# Check that max_used_connections is updated when cached thread is
|
||||||
# reused...
|
# reused...
|
||||||
connect (con4,localhost,root,,);
|
connect (con2,localhost,root,,);
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
|
|
||||||
# ...and when new thread is created.
|
# ...and when new thread is created.
|
||||||
connect (con5,localhost,root,,);
|
connect (con3,localhost,root,,);
|
||||||
SHOW STATUS LIKE 'max_used_connections';
|
SHOW STATUS LIKE 'max_used_connections';
|
||||||
|
|
||||||
# Restore original setting.
|
# Restore original setting.
|
||||||
connection default;
|
connection default;
|
||||||
SET GLOBAL thread_cache_size=@save_thread_cache_size;
|
SET GLOBAL thread_cache_size=@save_thread_cache_size;
|
||||||
|
|
||||||
disconnect con5;
|
|
||||||
disconnect con4;
|
|
||||||
disconnect con3;
|
disconnect con3;
|
||||||
disconnect con2;
|
disconnect con2;
|
||||||
disconnect con1;
|
disconnect con1;
|
||||||
|
Reference in New Issue
Block a user