mirror of
https://github.com/MariaDB/server.git
synced 2025-04-01 21:05:34 +02:00
Bug#29915479 RUNNING COM_REGISTER_SLAVE WITHOUT COM_BINLOG_DUMP CAN RESULTS IN SERVER EXIT
in fact, in MariaDB it cannot, but it can show spurious slaves in SHOW SLAVE HOSTS. slave was registered in COM_REGISTER_SLAVE and un-registered after COM_BINLOG_DUMP. If there was no COM_BINLOG_DUMP, it would never unregister.
This commit is contained in:
parent
8c534bdeb8
commit
6bb28e0bc5
5 changed files with 52 additions and 1 deletions
mysql-test/suite/rpl
sql
16
mysql-test/suite/rpl/r/rpl_fail_register.result
Normal file
16
mysql-test/suite/rpl/r/rpl_fail_register.result
Normal file
|
@ -0,0 +1,16 @@
|
|||
include/master-slave.inc
|
||||
[connection master]
|
||||
set @old_dbug=@@global.debug_dbug;
|
||||
set global debug_dbug='d,fail_com_register_slave';
|
||||
stop slave;
|
||||
reset slave;
|
||||
include/wait_for_slave_to_stop.inc
|
||||
start slave;
|
||||
stop slave;
|
||||
include/wait_for_slave_to_stop.inc
|
||||
set global debug_dbug=@old_dbug;
|
||||
kill DUMP_THREAD;
|
||||
show slave hosts;
|
||||
Server_id Host Port Master_id
|
||||
start slave;
|
||||
include/rpl_end.inc
|
33
mysql-test/suite/rpl/t/rpl_fail_register.test
Normal file
33
mysql-test/suite/rpl/t/rpl_fail_register.test
Normal file
|
@ -0,0 +1,33 @@
|
|||
source include/have_debug.inc;
|
||||
source include/have_binlog_format_mixed.inc;
|
||||
source include/master-slave.inc;
|
||||
|
||||
connection slave;
|
||||
|
||||
set @old_dbug=@@global.debug_dbug;
|
||||
set global debug_dbug='d,fail_com_register_slave';
|
||||
|
||||
stop slave;
|
||||
reset slave;
|
||||
source include/wait_for_slave_to_stop.inc;
|
||||
start slave;
|
||||
stop slave;
|
||||
source include/wait_for_slave_to_stop.inc;
|
||||
set global debug_dbug=@old_dbug;
|
||||
|
||||
connection master;
|
||||
|
||||
### why is that needed?
|
||||
let $id=`SELECT id from information_schema.processlist where command='Binlog Dump'`;
|
||||
if ($id) {
|
||||
replace_result $id DUMP_THREAD;
|
||||
eval kill $id;
|
||||
let $wait_condition= SELECT count(*)=0 from information_schema.processlist where command='Binlog Dump';
|
||||
source include/wait_condition.inc;
|
||||
}
|
||||
|
||||
show slave hosts;
|
||||
|
||||
connection slave;
|
||||
start slave;
|
||||
source include/rpl_end.inc;
|
|
@ -3179,6 +3179,7 @@ connected:
|
|||
goto err;
|
||||
goto connected;
|
||||
}
|
||||
DBUG_EXECUTE_IF("fail_com_register_slave", goto err;);
|
||||
}
|
||||
|
||||
DBUG_PRINT("info",("Starting reading binary log from master"));
|
||||
|
|
|
@ -63,6 +63,7 @@
|
|||
#include "sql_parse.h" // is_update_query
|
||||
#include "sql_callback.h"
|
||||
#include "sql_connect.h"
|
||||
#include "repl_failsafe.h"
|
||||
|
||||
/*
|
||||
The following is used to initialise Table_ident with a internal
|
||||
|
@ -1496,6 +1497,7 @@ THD::~THD()
|
|||
if (rli_slave)
|
||||
rli_slave->cleanup_after_session();
|
||||
my_free(semisync_info);
|
||||
unregister_slave(this, true, true);
|
||||
#endif
|
||||
|
||||
free_root(&main_mem_root, MYF(0));
|
||||
|
|
|
@ -1269,7 +1269,6 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
|||
general_log_print(thd, command, "Log: '%s' Pos: %lu", name, pos);
|
||||
if (nlen < FN_REFLEN)
|
||||
mysql_binlog_send(thd, thd->strmake(name, nlen), (my_off_t)pos, flags);
|
||||
unregister_slave(thd,1,1);
|
||||
/* fake COM_QUIT -- if we get here, the thread needs to terminate */
|
||||
error = TRUE;
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue