Commit c8aedb02 authored by unknown's avatar unknown

Fix for Bug#35074: max_used_connections is not correct.

The problem was that number of threads was used to calculate
max_used_connections.

The fix is to use number of active connections.


mysql-test/r/connect.result:
  Update result file.
mysql-test/t/connect.test:
  - Add a test case for Bug#35074: max_used_connections is not correct;
  - Make a test case for Bug#33507 more stable.
sql/mysqld.cc:
  Use number of connections insetad of threads
  to calculate max_used_connections.
parent f8d0ffeb
...@@ -162,14 +162,48 @@ root ...@@ -162,14 +162,48 @@ root
# -- Resetting variables... # -- Resetting variables...
SET GLOBAL max_connections = 151; SET GLOBAL max_connections = 151;
# -- Stopping Event Scheduler...
SET GLOBAL event_scheduler = OFF; SET GLOBAL event_scheduler = OFF;
# -- Waiting for Event Scheduler to stop...
# -- That's it. Closing connections... # -- That's it. Closing connections...
# -- Restoring default connection... # -- Restoring default connection...
# -- Waiting for connections to close...
DROP USER mysqltest_u1@localhost;
# -- End of Bug#33507. # -- End of Bug#33507.
# -- Bug#35074: max_used_connections is not correct.
FLUSH STATUS;
SHOW STATUS LIKE 'max_used_connections';
Variable_name Value
Max_used_connections 1
# -- Starting Event Scheduler...
SET GLOBAL event_scheduler = ON;
# -- Waiting for Event Scheduler to start...
# -- Opening a new connection to check max_used_connections...
# -- Check that max_used_connections hasn't changed.
SHOW STATUS LIKE 'max_used_connections';
Variable_name Value
Max_used_connections 2
# -- Closing new connection...
# -- Stopping Event Scheduler...
SET GLOBAL event_scheduler = OFF;
# -- Waiting for Event Scheduler to stop...
# -- End of Bug#35074.
# ------------------------------------------------------------------ # ------------------------------------------------------------------
# -- End of 5.1 tests # -- End of 5.1 tests
# ------------------------------------------------------------------ # ------------------------------------------------------------------
...@@ -209,22 +209,97 @@ SELECT user FROM information_schema.processlist ORDER BY id; ...@@ -209,22 +209,97 @@ SELECT user FROM information_schema.processlist ORDER BY id;
--echo # -- Resetting variables... --echo # -- Resetting variables...
--eval SET GLOBAL max_connections = $saved_max_connections --eval SET GLOBAL max_connections = $saved_max_connections
--echo
--echo # -- Stopping Event Scheduler...
SET GLOBAL event_scheduler = OFF; SET GLOBAL event_scheduler = OFF;
--echo # -- Waiting for Event Scheduler to stop...
let $wait_condition =
SELECT COUNT(*) = 0
FROM information_schema.processlist
WHERE user = 'event_scheduler';
--source include/wait_condition.inc
--echo --echo
--echo # -- That's it. Closing connections... --echo # -- That's it. Closing connections...
--disconnect con_1 --disconnect con_1
--disconnect con_2 --disconnect con_2
--disconnect con_3
--disconnect con_super_1 --disconnect con_super_1
--echo --echo
--echo # -- Restoring default connection... --echo # -- Restoring default connection...
--connect (default,localhost,root,,test) --connect (default,localhost,root,,test)
--echo
--echo # -- Waiting for connections to close...
let $wait_condition =
SELECT COUNT(*) = 1
FROM information_schema.processlist
WHERE db = 'test';
--source include/wait_condition.inc
--echo
DROP USER mysqltest_u1@localhost;
--echo --echo
--echo # -- End of Bug#33507. --echo # -- End of Bug#33507.
--echo --echo
###########################################################################
--echo # -- Bug#35074: max_used_connections is not correct.
--echo
FLUSH STATUS;
--echo
SHOW STATUS LIKE 'max_used_connections';
--echo
--echo # -- Starting Event Scheduler...
SET GLOBAL event_scheduler = ON;
--echo # -- Waiting for Event Scheduler to start...
let $wait_condition =
SELECT COUNT(*) = 1
FROM information_schema.processlist
WHERE user = 'event_scheduler';
--source include/wait_condition.inc
# NOTE: We should use a new connection here instead of reconnect in order to
# avoid races (we can not for sure when the connection being disconnected is
# actually disconnected on the server).
--echo
--echo # -- Opening a new connection to check max_used_connections...
--connect (con_1,localhost,root)
--echo
--echo # -- Check that max_used_connections hasn't changed.
SHOW STATUS LIKE 'max_used_connections';
--echo
--echo # -- Closing new connection...
--disconnect con_1
--connection default
--echo
--echo # -- Stopping Event Scheduler...
SET GLOBAL event_scheduler = OFF;
--echo # -- Waiting for Event Scheduler to stop...
let $wait_condition =
SELECT COUNT(*) = 0
FROM information_schema.processlist
WHERE user = 'event_scheduler';
--source include/wait_condition.inc
--echo
--echo # -- End of Bug#35074.
--echo
--echo # ------------------------------------------------------------------ --echo # ------------------------------------------------------------------
--echo # -- End of 5.1 tests --echo # -- End of 5.1 tests
--echo # ------------------------------------------------------------------ --echo # ------------------------------------------------------------------
...@@ -4776,6 +4776,9 @@ static void create_new_thread(THD *thd) ...@@ -4776,6 +4776,9 @@ static void create_new_thread(THD *thd)
++connection_count; ++connection_count;
if (connection_count > max_used_connections)
max_used_connections= connection_count;
pthread_mutex_unlock(&LOCK_connection_count); pthread_mutex_unlock(&LOCK_connection_count);
/* Start a new thread to handle connection. */ /* Start a new thread to handle connection. */
...@@ -4791,9 +4794,6 @@ static void create_new_thread(THD *thd) ...@@ -4791,9 +4794,6 @@ static void create_new_thread(THD *thd)
thread_count++; thread_count++;
if (thread_count - delayed_insert_threads > max_used_connections)
max_used_connections= thread_count - delayed_insert_threads;
thread_scheduler.add_connection(thd); thread_scheduler.add_connection(thd);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment