Fix for Bug#31222: com_% global status counters
behave randomly with mysql_change_user. The problem was that global status variables were not updated in THD::check_user(), so thread statistics were lost after COM_CHANGE_USER. The fix is to update global status variables with the thread ones before preparing the thread for new user. mysql-test/r/change_user.result: Update result file. mysql-test/t/change_user.test: Add a test case for Bug#31222: com_% global status counters behave randomly with mysql_change_user. sql/sql_class.cc: Update global status variables when we're handling COM_CHANGE_USER for a thread.
This commit is contained in:
parent
a0d88ebb0b
commit
215625b143
@ -44,3 +44,10 @@ IS_FREE_LOCK('bug31418')
|
||||
SELECT IS_USED_LOCK('bug31418');
|
||||
IS_USED_LOCK('bug31418')
|
||||
NULL
|
||||
FLUSH STATUS;
|
||||
SHOW GLOBAL STATUS LIKE 'com_select';
|
||||
Variable_name Value
|
||||
Com_select 112
|
||||
SHOW GLOBAL STATUS LIKE 'com_select';
|
||||
Variable_name Value
|
||||
Com_select 112
|
||||
|
@ -33,3 +33,31 @@ SELECT IS_USED_LOCK('bug31418') = CONNECTION_ID();
|
||||
--change_user
|
||||
SELECT IS_FREE_LOCK('bug31418');
|
||||
SELECT IS_USED_LOCK('bug31418');
|
||||
|
||||
#
|
||||
# Bug#31222: com_% global status counters behave randomly with
|
||||
# mysql_change_user.
|
||||
#
|
||||
|
||||
FLUSH STATUS;
|
||||
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
|
||||
let $i = 100;
|
||||
|
||||
while ($i)
|
||||
{
|
||||
dec $i;
|
||||
|
||||
SELECT 1;
|
||||
}
|
||||
|
||||
--enable_query_log
|
||||
--enable_result_log
|
||||
|
||||
SHOW GLOBAL STATUS LIKE 'com_select';
|
||||
|
||||
--change_user
|
||||
|
||||
SHOW GLOBAL STATUS LIKE 'com_select';
|
||||
|
@ -769,6 +769,10 @@ void THD::init_for_queries()
|
||||
|
||||
void THD::change_user(void)
|
||||
{
|
||||
pthread_mutex_lock(&LOCK_status);
|
||||
add_to_status(&global_status_var, &status_var);
|
||||
pthread_mutex_unlock(&LOCK_status);
|
||||
|
||||
cleanup();
|
||||
killed= NOT_KILLED;
|
||||
cleanup_done= 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user