Commit 550d6871 authored by Vladislav Vaintroub's avatar Vladislav Vaintroub

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.
parent 4cae0796
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;
# 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) ...@@ -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, ...@@ -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;
......
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