mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 14:02:32 +01:00
8823b832bb
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.
194 lines
3.6 KiB
Text
194 lines
3.6 KiB
Text
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
|