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();
|
worker_context.save();
|
||||||
|
|
||||||
thread_attach(thd);
|
thread_attach(thd);
|
||||||
thd->killed= KILL_CONNECTION;
|
|
||||||
thd->net.reading_or_writing= 0;
|
thd->net.reading_or_writing= 0;
|
||||||
|
|
||||||
end_connection(thd);
|
end_connection(thd);
|
||||||
|
@ -573,6 +573,10 @@ static VOID CALLBACK io_completion_callback(PTP_CALLBACK_INSTANCE instance,
|
|||||||
}
|
}
|
||||||
|
|
||||||
connection_t *connection = (connection_t*)context;
|
connection_t *connection = (connection_t*)context;
|
||||||
|
|
||||||
|
if (io_result != ERROR_SUCCESS)
|
||||||
|
goto error;
|
||||||
|
|
||||||
THD *thd= connection->thd;
|
THD *thd= connection->thd;
|
||||||
ulonglong old_timeout = connection->timeout;
|
ulonglong old_timeout = connection->timeout;
|
||||||
connection->timeout = ULONGLONG_MAX;
|
connection->timeout = ULONGLONG_MAX;
|
||||||
|
Reference in New Issue
Block a user