forked from facebook/mysql-5.6
-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
add histogram for rpl_semi_sync_master_trx_wait
Summary: add histogram for rpl_semi_sync_master_trx_wait. 8.0 porting notes: Keeps the same histogram status variables as before since these are already being read by various applications. We should eventually remove this. Reference Patch: facebook@d1a1394 Reference Patch: facebook@15333b2e6f9 Differential Revision: D21832889 ---------------------------------------------------------------------- Fix semi_sync histogram reporting Summary: Fix a porting bug with semi_sync histograms. Reviewed By: george-reynya Differential Revision: D40964563 fbshipit-source-id: 8d4f7ff ---------------------------------------------------------------------- Semisync histogram double free (facebook#1290) Summary: Avoid double free on latency histogram data Before this fix, rpl.rpl_semi_sync_alias test under ASan with ``` ================================================================= ==65389==ERROR: AddressSanitizer: heap-use-after-free on address 0x0001742e17d4 at pc 0x000107febaf0 bp 0x00016ea8f710 sp 0x00016ea8f708 READ of size 4 at 0x0001742e17d4 thread T80 #0 0x107febaec in my_free(void*) my_malloc.cc:135 facebook#1 0x103cb9828 in free_latency_histogram_sysvars(SHOW_VAR*) mysqld.cc:4668 facebook#2 0x103cb99bc in prepare_latency_histogram_vars(latency_histogram*, SHOW_VAR*, unsigned long long*) mysqld.cc:4692 facebook#3 0x17c65826c in rpl_semi_sync_master_trx_wait_histogram(THD*, SHOW_VAR*, char*) semisync_source_plugin.cc:581 facebook#4 0x10be1b4cc in PFS_status_variable_cache::manifest(THD*, SHOW_VAR const*, System_status_var*, char const*, bool, bool) pfs_variable.cc:1366 facebook#5 0x10be1ba90 in PFS_status_variable_cache::do_materialize_all(THD*) pfs_variable.cc:1172 facebook#6 0x10c0ab33c in PFS_variable_cache<Status_variable>::materialize_all(THD*) pfs_variable.h:536 facebook#7 0x10c0ab294 in table_session_status::rnd_init(bool) table_session_status.cc:111 facebook#8 0x10bceb790 in ha_perfschema::rnd_init(bool) ha_perfschema.cc:1686 facebook#9 0x1033c7cec in handler::ha_rnd_init(bool) handler.cc:3157 facebook#10 0x103975380 in TableScanIterator::Init() basic_row_iterators.cc:230 facebook#11 0x103a33a18 in FilterIterator::Init() composite_iterators.h:82 facebook#12 0x103982ec0 in MaterializeIterator::MaterializeQueryBlock(MaterializeIterator::QueryBlock const&, unsigned long long*) composite_iterators.cc:845 facebook#13 0x103981410 in MaterializeIterator::Init() composite_iterators.cc:660 facebook#14 0x1049fc518 in Query_expression::ExecuteIteratorQuery(THD*) sql_union.cc:1293 facebook#15 0x1049fd358 in Query_expression::execute(THD*) sql_union.cc:1355 facebook#16 0x1047ae7ac in Sql_cmd_dml::execute_inner(THD*) sql_select.cc:870 facebook#17 0x1047ac344 in Sql_cmd_dml::execute(THD*) sql_select.cc:618 facebook#18 0x1047ffcc8 in Sql_cmd_show::execute(THD*) sql_show.cc:232 facebook#19 0x10480ab58 in Sql_cmd_show_status::execute(THD*) sql_show.cc:894 facebook#20 0x1045cea6c in mysql_execute_command(THD*, bool, unsigned long long*) sql_parse.cc:5323 facebook#21 0x1045c5dcc in dispatch_sql_command(THD*, Parser_state*, unsigned long long*) sql_parse.cc:6093 facebook#22 0x1045bb92c in dispatch_command(THD*, COM_DATA const*, enum_server_command) sql_parse.cc:2444 facebook#23 0x1045c06f8 in do_command(THD*) sql_parse.cc:1636 facebook#24 0x104cc4cc4 in handle_connection(void*) connection_handler_per_thread.cc:307 facebook#25 0x10bd130d4 in pfs_spawn_thread(void*) pfs.cc:2983 facebook#26 0x18ad47fa4 in _pthread_start+0x90 (libsystem_pthread.dylib:arm64e+0x6fa4) facebook#27 0x18ad42d9c in thread_start+0x4 (libsystem_pthread.dylib:arm64e+0x1d9c) 0x0001742e17d4 is located 4 bytes inside of 40-byte region [0x0001742e17d0,0x0001742e17f8) freed by thread T80 here: #0 0x139ff6de4 in wrap_free+0x98 (libclang_rt.asan_osx_dynamic.dylib:arm64e+0x3ede4) facebook#1 0x107febcfc in my_raw_free(void*) my_malloc.cc:269 facebook#2 0x107feba48 in my_free(void*) my_malloc.cc:141 facebook#3 0x103cb9828 in free_latency_histogram_sysvars(SHOW_VAR*) mysqld.cc:4668 facebook#4 0x17c6231e8 in ReplSemiSyncMaster::~ReplSemiSyncMaster() semisync_source.cc:517 facebook#5 0x17c623488 in ReplSemiSyncMaster::~ReplSemiSyncMaster() semisync_source.cc:516 facebook#6 0x17c651484 in semi_sync_master_plugin_deinit(void*) semisync_source_plugin.cc:833 facebook#7 0x10467aa90 in plugin_deinitialize(st_plugin_int*, bool) sql_plugin.cc:1123 facebook#8 0x1046730b0 in reap_plugins() sql_plugin.cc:1192 facebook#9 0x1046863b4 in mysql_uninstall_plugin(THD*, MYSQL_LEX_CSTRING) sql_plugin.cc:2602 facebook#10 0x104685374 in Sql_cmd_uninstall_plugin::execute(THD*) sql_plugin.cc:3731 facebook#11 0x1045cea6c in mysql_execute_command(THD*, bool, unsigned long long*) sql_parse.cc:5323 facebook#12 0x1045c5dcc in dispatch_sql_command(THD*, Parser_state*, unsigned long long*) sql_parse.cc:6093 facebook#13 0x1045bb92c in dispatch_command(THD*, COM_DATA const*, enum_server_command) sql_parse.cc:2444 facebook#14 0x1045c06f8 in do_command(THD*) sql_parse.cc:1636 facebook#15 0x104cc4cc4 in handle_connection(void*) connection_handler_per_thread.cc:307 facebook#16 0x10bd130d4 in pfs_spawn_thread(void*) pfs.cc:2983 facebook#17 0x18ad47fa4 in _pthread_start+0x90 (libsystem_pthread.dylib:arm64e+0x6fa4) facebook#18 0x18ad42d9c in thread_start+0x4 (libsystem_pthread.dylib:arm64e+0x1d9c) ``` It seems that the double invocation of `free_latency_histogram_sysvars` is correct in this case, thus protect against the double free with resetting the pointers to nullptr. Pull Request resolved: facebook#1290 Reviewed By: sunshine-Chun Differential Revision: D45277600 Pulled By: hermanlee fbshipit-source-id: 37524d0
- Loading branch information
1 parent
5157ba2
commit 9057de3
Showing
14 changed files
with
669 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
75 changes: 75 additions & 0 deletions
75
mysql-test/suite/sys_vars/r/rpl_semi_sync_source_histogram_trx_wait_step_size_basic.result
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
SELECT COUNT(@@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size); | ||
COUNT(@@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size) | ||
1 | ||
1 Expected | ||
SET @start_global_value = @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size; | ||
SELECT @start_global_value; | ||
@start_global_value | ||
500us | ||
16ms Expected | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='16us'; | ||
select @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size; | ||
@@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size | ||
16us | ||
16us Expected | ||
select * from performance_schema.global_variables where variable_name='rpl_semi_sync_master_histogram_trx_wait_step_size'; | ||
VARIABLE_NAME VARIABLE_VALUE | ||
rpl_semi_sync_master_histogram_trx_wait_step_size 16us | ||
SELECT @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size = VARIABLE_VALUE | ||
FROM performance_schema.global_variables | ||
WHERE VARIABLE_NAME='rpl_semi_sync_master_histogram_trx_wait_step_size'; | ||
@@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size = VARIABLE_VALUE | ||
1 | ||
1 Expected | ||
SELECT COUNT(@@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size); | ||
COUNT(@@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size) | ||
1 | ||
1 Expected | ||
SELECT COUNT(VARIABLE_VALUE) | ||
FROM performance_schema.global_variables | ||
WHERE VARIABLE_NAME='rpl_semi_sync_master_histogram_trx_wait_step_size'; | ||
COUNT(VARIABLE_VALUE) | ||
1 | ||
1 Expected | ||
SELECT COUNT(@@local.rpl_semi_sync_master_histogram_trx_wait_step_size); | ||
ERROR HY000: Variable 'rpl_semi_sync_master_histogram_trx_wait_step_size' is a GLOBAL variable | ||
Expected error 'Variable is a GLOBAL variable' | ||
SELECT COUNT(@@SESSION.rpl_semi_sync_master_histogram_trx_wait_step_size); | ||
ERROR HY000: Variable 'rpl_semi_sync_master_histogram_trx_wait_step_size' is a GLOBAL variable | ||
Expected error 'Variable is a GLOBAL variable' | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='32'; | ||
ERROR 42000: Variable 'rpl_semi_sync_master_histogram_trx_wait_step_size' can't be set to the value of '32' | ||
Expected error 'Variable cannot be set to this value'; | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='0'; | ||
select @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size; | ||
@@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size | ||
0 | ||
0 Expected | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='ms32'; | ||
ERROR 42000: Variable 'rpl_semi_sync_master_histogram_trx_wait_step_size' can't be set to the value of 'ms32' | ||
Expected error 'Variable cannot be set to this value'; | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='32ps'; | ||
ERROR 42000: Variable 'rpl_semi_sync_master_histogram_trx_wait_step_size' can't be set to the value of '32ps' | ||
Expected error 'Variable cannot be set to this value'; | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='3s2'; | ||
ERROR 42000: Variable 'rpl_semi_sync_master_histogram_trx_wait_step_size' can't be set to the value of '3s2' | ||
Expected error 'Variable cannot be set to this value'; | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='32@s'; | ||
ERROR 42000: Variable 'rpl_semi_sync_master_histogram_trx_wait_step_size' can't be set to the value of '32@s' | ||
Expected error 'Variable cannot be set to this value'; | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='32s.'; | ||
ERROR 42000: Variable 'rpl_semi_sync_master_histogram_trx_wait_step_size' can't be set to the value of '32s.' | ||
Expected error 'Variable cannot be set to this value'; | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='s'; | ||
ERROR 42000: Variable 'rpl_semi_sync_master_histogram_trx_wait_step_size' can't be set to the value of 's' | ||
Expected error 'Variable cannot be set to this value' | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='16.5us'; | ||
select @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size; | ||
@@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size | ||
16.5us | ||
16.5us Expected | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size = @start_global_value; | ||
SELECT @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size; | ||
@@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size | ||
500us | ||
16ms Expected |
1 change: 1 addition & 0 deletions
1
...-test/suite/sys_vars/t/rpl_semi_sync_source_histogram_trx_wait_step_size_basic-master.opt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
$SEMISYNC_MASTER_PLUGIN_OPT $SEMISYNC_MASTER_PLUGIN_LOAD |
73 changes: 73 additions & 0 deletions
73
mysql-test/suite/sys_vars/t/rpl_semi_sync_source_histogram_trx_wait_step_size_basic.test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
SELECT COUNT(@@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size); | ||
--echo 1 Expected | ||
|
||
SET @start_global_value = @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size; | ||
SELECT @start_global_value; | ||
--echo 16ms Expected | ||
|
||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='16us'; | ||
select @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size; | ||
--echo 16us Expected | ||
|
||
select * from performance_schema.global_variables where variable_name='rpl_semi_sync_master_histogram_trx_wait_step_size'; | ||
|
||
SELECT @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size = VARIABLE_VALUE | ||
FROM performance_schema.global_variables | ||
WHERE VARIABLE_NAME='rpl_semi_sync_master_histogram_trx_wait_step_size'; | ||
--echo 1 Expected | ||
|
||
SELECT COUNT(@@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size); | ||
--echo 1 Expected | ||
|
||
SELECT COUNT(VARIABLE_VALUE) | ||
FROM performance_schema.global_variables | ||
WHERE VARIABLE_NAME='rpl_semi_sync_master_histogram_trx_wait_step_size'; | ||
--echo 1 Expected | ||
|
||
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR | ||
SELECT COUNT(@@local.rpl_semi_sync_master_histogram_trx_wait_step_size); | ||
--echo Expected error 'Variable is a GLOBAL variable' | ||
|
||
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR | ||
SELECT COUNT(@@SESSION.rpl_semi_sync_master_histogram_trx_wait_step_size); | ||
--echo Expected error 'Variable is a GLOBAL variable' | ||
|
||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='32'; | ||
--echo Expected error 'Variable cannot be set to this value'; | ||
|
||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='0'; | ||
select @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size; | ||
--echo 0 Expected | ||
|
||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='ms32'; | ||
--echo Expected error 'Variable cannot be set to this value'; | ||
|
||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='32ps'; | ||
--echo Expected error 'Variable cannot be set to this value'; | ||
|
||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='3s2'; | ||
--echo Expected error 'Variable cannot be set to this value'; | ||
|
||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='32@s'; | ||
--echo Expected error 'Variable cannot be set to this value'; | ||
|
||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='32s.'; | ||
--echo Expected error 'Variable cannot be set to this value'; | ||
|
||
--Error ER_WRONG_VALUE_FOR_VAR | ||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='s'; | ||
--echo Expected error 'Variable cannot be set to this value' | ||
|
||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size='16.5us'; | ||
select @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size; | ||
--echo 16.5us Expected | ||
|
||
SET @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size = @start_global_value; | ||
SELECT @@GLOBAL.rpl_semi_sync_master_histogram_trx_wait_step_size; | ||
--echo 16ms Expected |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.