Permalink
Show file tree
Hide file tree
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
MDEV-16812 Semisync slave io thread segfaults at STOP-SLAVE handling
When the semisync slave is being stopped with STOP SLAVE just after the master was shut down it attempts to reconnect with the master anyway per a semisync routine. Instead of an expected error the io-thread segfauls in mysql_real_connect() execution at !mysql->options.extension->async_context check trying to reach the extension's member while mysql->options.extension is actually and correctly NULL. Apparently not-NULL check for mysql->options.extension was missed and it's deployed by the patch to fix this issue. As a bonus it also tackles an assert Thread 0x7f16c72148c0 (LWP 24639) 0x00007f16c53b3bf2 in __GI___assert_fail (assertion=0x55a686117558 "global_status_var.global_memory_used == 0", file=0x55a6861171e8 "/home/andrei/MDB/WTs/10.3-clean/sql/mysqld.cc", line=2201, function=0x55a68611fa80 <mysqld_exit(int)::__PRETTY_FUNCTION__> "void mysqld_exit(int)") at assert.c:101 in a new test of the patch. The reason of the assert was insufficient cleanup in Repl_semi_sync_slave::kill_connection() which has a branch where a MYSQL instance was left out unfred.
- Loading branch information
Showing
4 changed files
with
95 additions
and
3 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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| include/master-slave.inc | ||
| [connection master] | ||
| connection master; | ||
| SET @@GLOBAL.rpl_semi_sync_master_enabled = 1; | ||
| connection slave; | ||
| include/stop_slave.inc | ||
| SET @@GLOBAL. rpl_semi_sync_slave_enabled = 1; | ||
| include/start_slave.inc | ||
| connection master; | ||
| CREATE TABLE t1 (a INT); | ||
| INSERT INTO t1 SET a=1; | ||
| connection slave; | ||
| connection master; | ||
| # Shutdown master | ||
| include/rpl_stop_server.inc [server_number=1] | ||
| connection slave; | ||
| include/stop_slave.inc | ||
| # Restart master | ||
| include/rpl_start_server.inc [server_number=1] | ||
| connection slave; | ||
| include/stop_slave.inc | ||
| Warnings: | ||
| Note 1255 Slave already has been stopped | ||
| include/start_slave.inc | ||
| connection master; | ||
| SET @@GLOBAL.debug_dbug=""; | ||
| SET @@GLOBAL. rpl_semi_sync_master_enabled = 0; | ||
| connection master; | ||
| DROP TABLE t1; | ||
| connection slave; | ||
| include/stop_slave.inc | ||
| SET @@GLOBAL. rpl_semi_sync_slave_enabled = 0; | ||
| include/rpl_end.inc |
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,60 @@ | ||
| # MDEV-16812 Semisync slave io thread segfaults at STOP-SLAVE handling | ||
| # | ||
| # The test verifies that the semisync-enabled slave io thread | ||
| # finishes off as specified in particular trying to connect even to a shut down | ||
| # master for a semisync firewell routine. | ||
|
|
||
| source include/not_embedded.inc; | ||
| source include/have_debug.inc; | ||
| source include/master-slave.inc; | ||
|
|
||
| --connection master | ||
|
|
||
| --let $sav_enabled_master=`SELECT @@GLOBAL.rpl_semi_sync_master_enabled ` | ||
| SET @@GLOBAL.rpl_semi_sync_master_enabled = 1; | ||
|
|
||
| --connection slave | ||
| source include/stop_slave.inc; | ||
| --let $sav_enabled_slave=`SELECT @@GLOBAL.rpl_semi_sync_slave_enabled ` | ||
| SET @@GLOBAL. rpl_semi_sync_slave_enabled = 1; | ||
| source include/start_slave.inc; | ||
|
|
||
| --connection master | ||
| CREATE TABLE t1 (a INT); | ||
| INSERT INTO t1 SET a=1; | ||
|
|
||
| --sync_slave_with_master | ||
|
|
||
| connection master; | ||
| --echo # Shutdown master | ||
| --let $rpl_server_number=1 | ||
| source include/rpl_stop_server.inc; | ||
|
|
||
| --connection slave | ||
| --source include/stop_slave.inc | ||
|
|
||
| #connection master; | ||
| --echo # Restart master | ||
| --let $rpl_server_number=1 | ||
| source include/rpl_start_server.inc; | ||
|
|
||
| # | ||
| # Clean up | ||
| # | ||
| --connection slave | ||
| --source include/stop_slave.inc | ||
| --source include/start_slave.inc | ||
|
|
||
| --connection master | ||
| SET @@GLOBAL.debug_dbug=""; | ||
| --eval SET @@GLOBAL. rpl_semi_sync_master_enabled = $sav_enabled_master | ||
|
|
||
| --connection master | ||
| DROP TABLE t1; | ||
|
|
||
| --sync_slave_with_master | ||
| source include/stop_slave.inc; | ||
| --eval SET @@GLOBAL. rpl_semi_sync_slave_enabled = $sav_enabled_slave | ||
|
|
||
| --let $rpl_only_running_threads= 1 | ||
| --source include/rpl_end.inc |
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