Skip to content

Commit da66549

Browse files
MDEV-38179 sysvars tracker: lock only when needed
Lock LOCK_plugin only when the variable is a plugin variable. Lock LOCK_global_system_variables only when the variable is a global-only variable or a plugin variable. Also fix lockless session value for Sys_var_multi_source_ulonglong. This saves 54 calls to pthread_mutex_lock when constructing the initial OK packet. The added testcases do not show the lock savings. They are there to improve coverage for the MDEV-31609 feature, in light of bugs like MDEV-39207 and MDEV-39217.
1 parent 3a7f7ce commit da66549

16 files changed

Lines changed: 170 additions & 23 deletions

include/mysql/plugin.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ enum enum_mysql_show_type
200200

201201
enum enum_var_type
202202
{
203-
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL
203+
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL, SHOW_OPT_SESSION_NO_LOCK
204204
};
205205

206206
struct st_mysql_show_var {

include/mysql/plugin_audit.h.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@
540540
};
541541
enum enum_var_type
542542
{
543-
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL
543+
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL, SHOW_OPT_SESSION_NO_LOCK
544544
};
545545
struct st_mysql_show_var {
546546
const char *name;

include/mysql/plugin_auth.h.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@
540540
};
541541
enum enum_var_type
542542
{
543-
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL
543+
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL, SHOW_OPT_SESSION_NO_LOCK
544544
};
545545
struct st_mysql_show_var {
546546
const char *name;

include/mysql/plugin_data_type.h.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@
540540
};
541541
enum enum_var_type
542542
{
543-
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL
543+
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL, SHOW_OPT_SESSION_NO_LOCK
544544
};
545545
struct st_mysql_show_var {
546546
const char *name;

include/mysql/plugin_encryption.h.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@
540540
};
541541
enum enum_var_type
542542
{
543-
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL
543+
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL, SHOW_OPT_SESSION_NO_LOCK
544544
};
545545
struct st_mysql_show_var {
546546
const char *name;

include/mysql/plugin_ftparser.h.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@
540540
};
541541
enum enum_var_type
542542
{
543-
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL
543+
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL, SHOW_OPT_SESSION_NO_LOCK
544544
};
545545
struct st_mysql_show_var {
546546
const char *name;

include/mysql/plugin_function.h.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@
540540
};
541541
enum enum_var_type
542542
{
543-
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL
543+
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL, SHOW_OPT_SESSION_NO_LOCK
544544
};
545545
struct st_mysql_show_var {
546546
const char *name;

include/mysql/plugin_password_validation.h.pp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -540,7 +540,7 @@
540540
};
541541
enum enum_var_type
542542
{
543-
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL
543+
SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL, SHOW_OPT_SESSION_NO_LOCK
544544
};
545545
struct st_mysql_show_var {
546546
const char *name;

mysql-test/suite/sys_vars/r/session_track_system_variables_basic.result

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,3 +202,59 @@ connect foo,localhost,root;
202202
connection default;
203203
disconnect foo;
204204
# End of tests 11.5
205+
#
206+
# MDEV-38179 regression in t_connect
207+
#
208+
# myisam_block_size is a global only plugin var and is not
209+
# added to the session_track_system_variables.
210+
# example_int_var is a session plugin var and is included.
211+
install soname 'ha_example.so';
212+
set global session_track_system_variables='sql_slave_skip_counter,character_set_client,example_int_var';
213+
select @@global.session_track_system_variables;
214+
@@global.session_track_system_variables
215+
character_set_client,example_int_var,sql_slave_skip_counter
216+
connect foo,localhost,root;
217+
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
218+
-- character_set_client: latin1
219+
-- example_int_var: 0
220+
-- sql_slave_skip_counter: 0
221+
222+
select @@session.session_track_system_variables;
223+
@@session.session_track_system_variables
224+
character_set_client,example_int_var,sql_slave_skip_counter
225+
connection default;
226+
disconnect foo;
227+
set global session_track_system_variables='sql_slave_skip_counter,myisam_block_size,character_set_client,example_int_var';
228+
select @@global.session_track_system_variables;
229+
@@global.session_track_system_variables
230+
character_set_client,example_int_var,sql_slave_skip_counter
231+
connect foo,localhost,root;
232+
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
233+
-- character_set_client: latin1
234+
-- example_int_var: 0
235+
-- sql_slave_skip_counter: 0
236+
237+
select @@session.session_track_system_variables;
238+
@@session.session_track_system_variables
239+
character_set_client,example_int_var,sql_slave_skip_counter
240+
connection default;
241+
disconnect foo;
242+
set global session_track_system_variables='sql_slave_skip_counter,myisam_block_size,max_connections,character_set_client,example_int_var';
243+
select @@global.session_track_system_variables;
244+
@@global.session_track_system_variables
245+
character_set_client,example_int_var,max_connections,sql_slave_skip_counter
246+
connect foo,localhost,root;
247+
-- Tracker : SESSION_TRACK_SYSTEM_VARIABLES
248+
-- character_set_client: latin1
249+
-- example_int_var: 0
250+
-- max_connections: 151
251+
-- sql_slave_skip_counter: 0
252+
253+
select @@session.session_track_system_variables;
254+
@@session.session_track_system_variables
255+
character_set_client,example_int_var,max_connections,sql_slave_skip_counter
256+
connection default;
257+
SET global session_track_system_variables = @global_saved_tmp;
258+
disconnect foo;
259+
uninstall soname 'ha_example.so';
260+
# End of tests 11.8

mysql-test/suite/sys_vars/t/session_track_system_variables_basic.test

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,3 +173,45 @@ connection default;
173173
disconnect foo;
174174

175175
--echo # End of tests 11.5
176+
177+
--echo #
178+
--echo # MDEV-38179 regression in t_connect
179+
--echo #
180+
181+
--echo # myisam_block_size is a global only plugin var and is not
182+
--echo # added to the session_track_system_variables.
183+
--echo # example_int_var is a session plugin var and is included.
184+
install soname 'ha_example.so';
185+
set global session_track_system_variables='sql_slave_skip_counter,character_set_client,example_int_var';
186+
select @@global.session_track_system_variables;
187+
enable_session_track_info;
188+
189+
connect foo,localhost,root;
190+
select @@session.session_track_system_variables;
191+
192+
connection default;
193+
disconnect foo;
194+
195+
set global session_track_system_variables='sql_slave_skip_counter,myisam_block_size,character_set_client,example_int_var';
196+
select @@global.session_track_system_variables;
197+
enable_session_track_info;
198+
199+
connect foo,localhost,root;
200+
select @@session.session_track_system_variables;
201+
202+
connection default;
203+
disconnect foo;
204+
205+
set global session_track_system_variables='sql_slave_skip_counter,myisam_block_size,max_connections,character_set_client,example_int_var';
206+
select @@global.session_track_system_variables;
207+
enable_session_track_info;
208+
209+
connect foo,localhost,root;
210+
select @@session.session_track_system_variables;
211+
212+
connection default;
213+
214+
SET global session_track_system_variables = @global_saved_tmp;
215+
disconnect foo;
216+
uninstall soname 'ha_example.so';
217+
--echo # End of tests 11.8

0 commit comments

Comments
 (0)