Here is test case I am using to reproduce the stall
=== added file 'mysql-test/suite/rpl/t/percona_bug1331586-master.opt' --- mysql-test/suite/rpl/t/percona_bug1331586-master.opt 1970-01-01 00:00:00 +0000 +++ mysql-test/suite/rpl/t/percona_bug1331586-master.opt 2014-07-08 17:35:34 +0000 @@ -0,0 +1,3 @@ +--gtid_mode=ON +--enforce_gtid_consistency=true +--log-slave-updates
=== added file 'mysql-test/suite/rpl/t/percona_bug1331586-slave.opt' --- mysql-test/suite/rpl/t/percona_bug1331586-slave.opt 1970-01-01 00:00:00 +0000 +++ mysql-test/suite/rpl/t/percona_bug1331586-slave.opt 2014-07-08 17:35:34 +0000 @@ -0,0 +1,4 @@ +--slave_parallel_workers=8 +--gtid_mode=ON +--enforce_gtid_consistency=true +--log-slave-updates
=== added file 'mysql-test/suite/rpl/t/percona_bug1331586.test' --- mysql-test/suite/rpl/t/percona_bug1331586.test 1970-01-01 00:00:00 +0000 +++ mysql-test/suite/rpl/t/percona_bug1331586.test 2014-07-08 17:35:34 +0000 @@ -0,0 +1,38 @@ +--source include/have_debug.inc +--source include/master-slave.inc +--source include/have_binlog_format_statement.inc + +--disable_query_log +call mtr.add_suppression("Slave:*"); +--enable_query_log + +create table a(id int) engine=InnoDB; +start transaction; +insert into a values(1); + +connection slave; +set global debug="d,crash_xid_log_event"; +--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.2.expect + +connection master; +insert into a values(2); +insert into a values(3); +commit; + +connection slave; +--source include/wait_until_disconnected.inc + +--let $rpl_server_number= 2 +--source include/rpl_start_server.inc +--source include/start_slave.inc + +connection master; +sync_slave_with_master; +select * from a; + +connection master; +drop table a; + +sync_slave_with_master; + +--source include/rpl_end.inc
=== modified file 'sql/rpl_slave.cc' --- sql/rpl_slave.cc 2014-06-04 14:48:06 +0000 +++ sql/rpl_slave.cc 2014-07-08 17:35:34 +0000 @@ -6370,6 +6370,12 @@ mysql_mutex_unlock(&mi->data_lock); DBUG_RETURN(ret); } + DBUG_EXECUTE_IF("crash_xid_log_event", + if (event_type == XID_EVENT) + { + DBUG_SUICIDE(); + } + );
switch (event_type) { case STOP_EVENT:
Here is test case I am using to reproduce the stall
=== added file 'mysql- test/suite/ rpl/t/percona_ bug1331586- master. opt' suite/rpl/ t/percona_ bug1331586- master. opt 1970-01-01 00:00:00 +0000 suite/rpl/ t/percona_ bug1331586- master. opt 2014-07-08 17:35:34 +0000 gtid_consistenc y=true slave-updates
--- mysql-test/
+++ mysql-test/
@@ -0,0 +1,3 @@
+--gtid_mode=ON
+--enforce_
+--log-
=== added file 'mysql- test/suite/ rpl/t/percona_ bug1331586- slave.opt' suite/rpl/ t/percona_ bug1331586- slave.opt 1970-01-01 00:00:00 +0000 suite/rpl/ t/percona_ bug1331586- slave.opt 2014-07-08 17:35:34 +0000 parallel_ workers= 8 gtid_consistenc y=true slave-updates
--- mysql-test/
+++ mysql-test/
@@ -0,0 +1,4 @@
+--slave_
+--gtid_mode=ON
+--enforce_
+--log-
=== added file 'mysql- test/suite/ rpl/t/percona_ bug1331586. test' suite/rpl/ t/percona_ bug1331586. test 1970-01-01 00:00:00 +0000 suite/rpl/ t/percona_ bug1331586. test 2014-07-08 17:35:34 +0000 have_debug. inc master- slave.inc have_binlog_ format_ statement. inc query_log suppression( "Slave: *"); d,crash_ xid_log_ event"; VARDIR/ tmp/mysqld. 2.expect wait_until_ disconnected. inc rpl_start_ server. inc start_slave. inc with_master; with_master;
--- mysql-test/
+++ mysql-test/
@@ -0,0 +1,38 @@
+--source include/
+--source include/
+--source include/
+
+--disable_
+call mtr.add_
+--enable_query_log
+
+create table a(id int) engine=InnoDB;
+start transaction;
+insert into a values(1);
+
+connection slave;
+set global debug="
+--exec echo "wait" > $MYSQLTEST_
+
+connection master;
+insert into a values(2);
+insert into a values(3);
+commit;
+
+connection slave;
+--source include/
+
+--let $rpl_server_number= 2
+--source include/
+--source include/
+
+connection master;
+sync_slave_
+select * from a;
+
+connection master;
+drop table a;
+
+sync_slave_
+
+--source include/rpl_end.inc
=== modified file 'sql/rpl_slave.cc' mutex_unlock( &mi->data_ lock); RETURN( ret); IF("crash_ xid_log_ event",
--- sql/rpl_slave.cc 2014-06-04 14:48:06 +0000
+++ sql/rpl_slave.cc 2014-07-08 17:35:34 +0000
@@ -6370,6 +6370,12 @@
mysql_
DBUG_
}
+ DBUG_EXECUTE_
+ if (event_type == XID_EVENT)
+ {
+ DBUG_SUICIDE();
+ }
+ );
switch (event_type) {
case STOP_EVENT: