diff --git a/mysql-test/suite/rpl/t/rpl_gtid_crash.test b/mysql-test/suite/rpl/t/rpl_gtid_crash.test index 21b35a3..088fcae 100644 --- a/mysql-test/suite/rpl/t/rpl_gtid_crash.test +++ b/mysql-test/suite/rpl/t/rpl_gtid_crash.test @@ -294,8 +294,46 @@ SHOW VARIABLES like 'gtid_strict_mode'; eval SET GLOBAL gtid_strict_mode= $old_gtid_strict; --enable_query_log + +--echo *** Incorrect recovery on a slave reconnecting to crashed master *** + +--connection server_1 +--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect +restart +EOF + +SET GLOBAL debug_dbug="+d,inject_error_writing_xid"; +BEGIN; +INSERT INTO t1 VALUES (11); +--error 1026 +COMMIT; +SET GLOBAL debug_dbug="+d,crash_dispatch_command_before"; +--error 2006,2013 +COMMIT; + +--source include/wait_until_disconnected.inc +--enable_reconnect +--source include/wait_until_connected_again.inc + +INSERT INTO t1 VALUES (12); +INSERT INTO t1 VALUES (13); +SELECT * from t1; +--source include/save_master_gtid.inc + +--connection server_2 +--source include/sync_with_master_gtid.inc +SELECT * from t1; + + --connection server_1 DROP TABLE t1; +RESET MASTER; + +--connection server_2 +RESET MASTER; +STOP SLAVE; +RESET SLAVE; +START SLAVE; --connection default --enable_reconnect diff --git a/sql/log.cc b/sql/log.cc index 5614c0e..caf6f53 100644 --- a/sql/log.cc +++ b/sql/log.cc @@ -7439,6 +7439,13 @@ MYSQL_BIN_LOG::write_transaction_or_stmt(group_commit_entry *entry, } } + DBUG_EXECUTE_IF("inject_error_writing_xid", + { + entry->error_cache= NULL; + entry->commit_errno= 28; + DBUG_RETURN(ER_ERROR_ON_WRITE); + }); + if (entry->end_event->write(&log_file)) { entry->error_cache= NULL;