mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-246 - Aborted_clients incremented during ordinary connection close
The problem was increment of aborted_threads variable due to thd->killed which was set when threadpool connection was terminated . The fix is not to set thd->killed anymore, there is no real reason for doing it.. Added a test that checks that status variable aborted_clients does not grow for ordinary disconnects, and that successful KILL increments this variable.
This commit is contained in:
10
mysql-test/r/aborted_clients.result
Normal file
10
mysql-test/r/aborted_clients.result
Normal file
@ -0,0 +1,10 @@
|
||||
FLUSH STATUS;
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='aborted_clients';
|
||||
VARIABLE_VALUE
|
||||
0
|
||||
KILL CONNECTION_ID();
|
||||
ERROR 70100: Connection was killed
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='aborted_clients';
|
||||
VARIABLE_VALUE
|
||||
1
|
||||
FLUSH STATUS;
|
26
mysql-test/t/aborted_clients.test
Normal file
26
mysql-test/t/aborted_clients.test
Normal file
@ -0,0 +1,26 @@
|
||||
# Test case for MDEV-246, lp:992983
|
||||
# Check that ordinary connect/disconnect does not increase aborted_clients
|
||||
# status variable, but KILL connection does
|
||||
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
FLUSH STATUS;
|
||||
# Connect/Disconnect look that aborted_clients stays 0
|
||||
connect (con1,localhost,root,,);
|
||||
disconnect con1;
|
||||
connection default;
|
||||
# Check that there is 0 aborted clients so far
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='aborted_clients';
|
||||
|
||||
# Kill a connection, check that aborted_clients is incremented
|
||||
connect(con2,localhost,root,,);
|
||||
--disable_reconnect
|
||||
--error ER_CONNECTION_KILLED
|
||||
KILL CONNECTION_ID();
|
||||
disconnect con2;
|
||||
connection default;
|
||||
|
||||
# aborted clients must be 1 now
|
||||
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='aborted_clients';
|
||||
FLUSH STATUS;
|
||||
|
@ -167,7 +167,6 @@ void threadpool_remove_connection(THD *thd)
|
||||
worker_context.save();
|
||||
|
||||
thread_attach(thd);
|
||||
thd->killed= KILL_CONNECTION;
|
||||
thd->net.reading_or_writing= 0;
|
||||
|
||||
end_connection(thd);
|
||||
|
@ -573,6 +573,10 @@ static VOID CALLBACK io_completion_callback(PTP_CALLBACK_INSTANCE instance,
|
||||
}
|
||||
|
||||
connection_t *connection = (connection_t*)context;
|
||||
|
||||
if (io_result != ERROR_SUCCESS)
|
||||
goto error;
|
||||
|
||||
THD *thd= connection->thd;
|
||||
ulonglong old_timeout = connection->timeout;
|
||||
connection->timeout = ULONGLONG_MAX;
|
||||
|
Reference in New Issue
Block a user