mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	Bug#23831 deadlock not noticed RBR bug in that when replicated msta (multi-statement-trans-action) deadlocks with a local at write row event or gets timed-out, the event handler did not return the correct error code. Wrong error code stops slave sql thread instead of to proceed with rollback and replay. The correct code is typed in error log and stored for error handling rotine to conduct rollback and replay of the transaction. The handling for the rbr remains the same as for the sbr events. Particularly, timed-out transaction still is rolled back - look at the related bugs.
		
			
				
	
	
		
			195 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
stop slave;
 | 
						|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
 | 
						|
reset master;
 | 
						|
reset slave;
 | 
						|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
 | 
						|
start slave;
 | 
						|
CREATE TABLE t1 (a INT NOT NULL, KEY(a)) ENGINE=innodb;
 | 
						|
CREATE TABLE t2 (a INT NOT NULL, KEY(a)) ENGINE=innodb;
 | 
						|
CREATE TABLE t3 (a INT  UNIQUE) ENGINE=innodb;
 | 
						|
CREATE TABLE t4 (a INT) ENGINE=innodb;
 | 
						|
show variables like 'slave_transaction_retries';
 | 
						|
Variable_name	Value
 | 
						|
slave_transaction_retries	10
 | 
						|
show create table t1;
 | 
						|
Table	Create Table
 | 
						|
t1	CREATE TABLE `t1` (
 | 
						|
  `a` int(11) NOT NULL,
 | 
						|
  KEY `a` (`a`)
 | 
						|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 | 
						|
show create table t2;
 | 
						|
Table	Create Table
 | 
						|
t2	CREATE TABLE `t2` (
 | 
						|
  `a` int(11) NOT NULL,
 | 
						|
  KEY `a` (`a`)
 | 
						|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
 | 
						|
show variables like 'slave_transaction_retries';
 | 
						|
Variable_name	Value
 | 
						|
slave_transaction_retries	2
 | 
						|
stop slave;
 | 
						|
begin;
 | 
						|
insert into t2 values (0);
 | 
						|
insert into t1 values(1);
 | 
						|
commit;
 | 
						|
begin;
 | 
						|
select * from t1 for update;
 | 
						|
a
 | 
						|
start slave;
 | 
						|
select * from t2 for update /* dl */;
 | 
						|
a
 | 
						|
commit;
 | 
						|
select * from t1;
 | 
						|
a
 | 
						|
1
 | 
						|
select * from t2 /* must be 1 */;
 | 
						|
a
 | 
						|
0
 | 
						|
show slave status;
 | 
						|
Slave_IO_State	#
 | 
						|
Master_Host	127.0.0.1
 | 
						|
Master_User	root
 | 
						|
Master_Port	MASTER_MYPORT
 | 
						|
Connect_Retry	1
 | 
						|
Master_Log_File	master-bin.000001
 | 
						|
Read_Master_Log_Pos	#
 | 
						|
Relay_Log_File	#
 | 
						|
Relay_Log_Pos	#
 | 
						|
Relay_Master_Log_File	master-bin.000001
 | 
						|
Slave_IO_Running	Yes
 | 
						|
Slave_SQL_Running	Yes
 | 
						|
Replicate_Do_DB	
 | 
						|
Replicate_Ignore_DB	
 | 
						|
Replicate_Do_Table	
 | 
						|
Replicate_Ignore_Table	#
 | 
						|
Replicate_Wild_Do_Table	
 | 
						|
Replicate_Wild_Ignore_Table	
 | 
						|
Last_Errno	0
 | 
						|
Last_Error	
 | 
						|
Skip_Counter	0
 | 
						|
Exec_Master_Log_Pos	#
 | 
						|
Relay_Log_Space	#
 | 
						|
Until_Condition	None
 | 
						|
Until_Log_File	
 | 
						|
Until_Log_Pos	0
 | 
						|
Master_SSL_Allowed	No
 | 
						|
Master_SSL_CA_File	
 | 
						|
Master_SSL_CA_Path	
 | 
						|
Master_SSL_Cert	
 | 
						|
Master_SSL_Cipher	
 | 
						|
Master_SSL_Key	
 | 
						|
Seconds_Behind_Master	#
 | 
						|
stop slave;
 | 
						|
delete from t3;
 | 
						|
change master to master_log_pos=544;
 | 
						|
begin;
 | 
						|
select * from t2 for update;
 | 
						|
a
 | 
						|
0
 | 
						|
start slave;
 | 
						|
select count(*) from t3  /* must be zero */;
 | 
						|
count(*)
 | 
						|
0
 | 
						|
commit;
 | 
						|
select * from t1;
 | 
						|
a
 | 
						|
1
 | 
						|
1
 | 
						|
select * from t2;
 | 
						|
a
 | 
						|
0
 | 
						|
0
 | 
						|
show slave status;
 | 
						|
Slave_IO_State	#
 | 
						|
Master_Host	127.0.0.1
 | 
						|
Master_User	root
 | 
						|
Master_Port	MASTER_MYPORT
 | 
						|
Connect_Retry	1
 | 
						|
Master_Log_File	master-bin.000001
 | 
						|
Read_Master_Log_Pos	#
 | 
						|
Relay_Log_File	#
 | 
						|
Relay_Log_Pos	#
 | 
						|
Relay_Master_Log_File	master-bin.000001
 | 
						|
Slave_IO_Running	#
 | 
						|
Slave_SQL_Running	Yes
 | 
						|
Replicate_Do_DB	
 | 
						|
Replicate_Ignore_DB	
 | 
						|
Replicate_Do_Table	
 | 
						|
Replicate_Ignore_Table	#
 | 
						|
Replicate_Wild_Do_Table	
 | 
						|
Replicate_Wild_Ignore_Table	
 | 
						|
Last_Errno	0
 | 
						|
Last_Error	
 | 
						|
Skip_Counter	0
 | 
						|
Exec_Master_Log_Pos	#
 | 
						|
Relay_Log_Space	#
 | 
						|
Until_Condition	None
 | 
						|
Until_Log_File	
 | 
						|
Until_Log_Pos	0
 | 
						|
Master_SSL_Allowed	No
 | 
						|
Master_SSL_CA_File	
 | 
						|
Master_SSL_CA_Path	
 | 
						|
Master_SSL_Cert	
 | 
						|
Master_SSL_Cipher	
 | 
						|
Master_SSL_Key	
 | 
						|
Seconds_Behind_Master	#
 | 
						|
set global max_relay_log_size=0;
 | 
						|
stop slave;
 | 
						|
delete from t3;
 | 
						|
change master to master_log_pos=544;
 | 
						|
begin;
 | 
						|
select * from t2 for update;
 | 
						|
a
 | 
						|
0
 | 
						|
0
 | 
						|
start slave;
 | 
						|
select count(*) from t3  /* must be zero */;
 | 
						|
count(*)
 | 
						|
0
 | 
						|
commit;
 | 
						|
select * from t1;
 | 
						|
a
 | 
						|
1
 | 
						|
1
 | 
						|
1
 | 
						|
select * from t2;
 | 
						|
a
 | 
						|
0
 | 
						|
0
 | 
						|
0
 | 
						|
show slave status;
 | 
						|
Slave_IO_State	#
 | 
						|
Master_Host	127.0.0.1
 | 
						|
Master_User	root
 | 
						|
Master_Port	MASTER_MYPORT
 | 
						|
Connect_Retry	1
 | 
						|
Master_Log_File	master-bin.000001
 | 
						|
Read_Master_Log_Pos	#
 | 
						|
Relay_Log_File	#
 | 
						|
Relay_Log_Pos	#
 | 
						|
Relay_Master_Log_File	master-bin.000001
 | 
						|
Slave_IO_Running	#
 | 
						|
Slave_SQL_Running	Yes
 | 
						|
Replicate_Do_DB	
 | 
						|
Replicate_Ignore_DB	
 | 
						|
Replicate_Do_Table	
 | 
						|
Replicate_Ignore_Table	#
 | 
						|
Replicate_Wild_Do_Table	
 | 
						|
Replicate_Wild_Ignore_Table	
 | 
						|
Last_Errno	0
 | 
						|
Last_Error	
 | 
						|
Skip_Counter	0
 | 
						|
Exec_Master_Log_Pos	#
 | 
						|
Relay_Log_Space	#
 | 
						|
Until_Condition	None
 | 
						|
Until_Log_File	
 | 
						|
Until_Log_Pos	0
 | 
						|
Master_SSL_Allowed	No
 | 
						|
Master_SSL_CA_File	
 | 
						|
Master_SSL_CA_Path	
 | 
						|
Master_SSL_Cert	
 | 
						|
Master_SSL_Cipher	
 | 
						|
Master_SSL_Key	
 | 
						|
Seconds_Behind_Master	#
 | 
						|
drop table t1,t2,t3,t4;
 | 
						|
End of 5.1 tests
 |