mirror of
https://github.com/MariaDB/server.git
synced 2025-08-30 11:22:14 +03:00
Some GTID test cases were using include/wait_condition.inc with a condition like SELECT COUNT(*)=4 FROM t1 to wait for the slave to catch up with the master. This causes races and test failures, as the changes to the tables become visible at the COMMIT of the SQL thread (or even before in case of MyISAM), but the changes to @@gtid_slave_pos only become visible a little bit after the COMMIT. Now that we have MASTER_GTID_WAIT(), just use that to sync up in a GTID-friendly way, wrapped in nice include/save_master_gtid.inc and include/sync_with_master_gtid.inc scripts.
212 lines
7.1 KiB
Plaintext
212 lines
7.1 KiB
Plaintext
include/master-slave.inc
|
|
[connection master]
|
|
*** Test that we check against incorrect table definition for mysql.gtid_slave_pos ***
|
|
CREATE TABLE t1(a INT PRIMARY KEY) ENGINE=InnoDB;
|
|
include/stop_slave.inc
|
|
ALTER TABLE mysql.gtid_slave_pos CHANGE seq_no seq_no VARCHAR(20);
|
|
START SLAVE;
|
|
INSERT INTO t1 VALUES (1);
|
|
CALL mtr.add_suppression("Slave: Failed to open mysql.gtid_slave_pos");
|
|
include/wait_for_slave_sql_error.inc [errno=1942]
|
|
include/stop_slave.inc
|
|
ALTER TABLE mysql.gtid_slave_pos CHANGE seq_no seq_no BIGINT UNSIGNED NOT NULL;
|
|
ALTER TABLE mysql.gtid_slave_pos DROP PRIMARY KEY;
|
|
ALTER TABLE mysql.gtid_slave_pos ADD PRIMARY KEY (sub_id, domain_id);
|
|
START SLAVE;
|
|
include/wait_for_slave_sql_error.inc [errno=1942]
|
|
include/stop_slave.inc
|
|
ALTER TABLE mysql.gtid_slave_pos DROP PRIMARY KEY;
|
|
START SLAVE;
|
|
include/wait_for_slave_sql_error.inc [errno=1942]
|
|
include/stop_slave.inc
|
|
ALTER TABLE mysql.gtid_slave_pos ADD PRIMARY KEY (sub_id);
|
|
START SLAVE;
|
|
include/wait_for_slave_sql_error.inc [errno=1942]
|
|
include/stop_slave.inc
|
|
ALTER TABLE mysql.gtid_slave_pos DROP PRIMARY KEY;
|
|
ALTER TABLE mysql.gtid_slave_pos ADD PRIMARY KEY (domain_id, sub_id);
|
|
include/start_slave.inc
|
|
SELECT * FROM t1;
|
|
a
|
|
1
|
|
*** Test that setting @@gtid_domain_id or @@gtid_seq_no is not allowed inside a transaction. ***
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (100);
|
|
SET SESSION gtid_domain_id= 100;
|
|
ERROR HY000: Cannot modify @@session.gtid_domain_id or @@session.gtid_seq_no inside a transaction
|
|
SET SESSION gtid_seq_no= 100;
|
|
ERROR HY000: Cannot modify @@session.gtid_domain_id or @@session.gtid_seq_no inside a transaction
|
|
SET @old_domain= @@GLOBAL.gtid_domain_id;
|
|
SET GLOBAL gtid_domain_id= 100;
|
|
SELECT @@SESSION.gtid_domain_id;
|
|
@@SESSION.gtid_domain_id
|
|
0
|
|
SET GLOBAL gtid_domain_id= @old_domain;
|
|
INSERT INTO t1 VALUES (101);
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a
|
|
1
|
|
100
|
|
101
|
|
ROLLBACK;
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a
|
|
1
|
|
*** Test requesting an explicit GTID position that conflicts with newer GTIDs of our own in the binlog. ***
|
|
include/stop_slave.inc
|
|
RESET MASTER;
|
|
INSERT INTO t1 VALUES (2);
|
|
INSERT INTO t1 VALUES (4);
|
|
include/save_master_gtid.inc
|
|
SET sql_log_bin = 0;
|
|
INSERT INTO t1 VALUES (2);
|
|
SET sql_log_bin = 1;
|
|
INSERT INTO t1 VALUES (3);
|
|
CHANGE MASTER TO master_use_gtid=current_pos;
|
|
BEGIN;
|
|
SET GLOBAL gtid_slave_pos = "100-100-100";
|
|
ERROR 25000: You are not allowed to execute this command in a transaction
|
|
INSERT INTO t1 VALUES (100);
|
|
SET GLOBAL gtid_slave_pos = "100-100-100";
|
|
ERROR 25000: You are not allowed to execute this command in a transaction
|
|
ROLLBACK;
|
|
SET GLOBAL gtid_strict_mode= 1;
|
|
SET GLOBAL gtid_slave_pos = "0-1-1";
|
|
ERROR HY000: Specified GTID 0-1-1 conflicts with the binary log which contains a more recent GTID 0-2-11. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos.
|
|
SET GLOBAL gtid_slave_pos = "";
|
|
ERROR HY000: Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-11. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos.
|
|
SET GLOBAL gtid_strict_mode= 0;
|
|
SET GLOBAL gtid_slave_pos = "0-1-1";
|
|
Warnings:
|
|
Warning 1947 Specified GTID 0-1-1 conflicts with the binary log which contains a more recent GTID 0-2-11. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos.
|
|
SET GLOBAL gtid_slave_pos = "";
|
|
Warnings:
|
|
Warning 1948 Specified value for @@gtid_slave_pos contains no value for replication domain 0. This conflicts with the binary log which contains GTID 0-2-11. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos.
|
|
RESET MASTER;
|
|
SET GLOBAL gtid_slave_pos = "0-1-1";
|
|
START SLAVE;
|
|
include/sync_with_master_gtid.inc
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
4
|
|
*** MDEV-4688: Empty value of @@GLOBAL.gtid_slave_pos ***
|
|
include/stop_slave.inc
|
|
INSERT INTO t1 VALUES (5);
|
|
include/save_master_gtid.inc
|
|
SET @old_dbug= @@GLOBAL.debug_dbug;
|
|
SET GLOBAL debug_dbug="+d,dummy_disable_default_dbug_output";
|
|
SET GLOBAL debug_dbug="+d,gtid_fail_after_record_gtid";
|
|
SET sql_log_bin=0;
|
|
CALL mtr.add_suppression('Got error 131 "Command not supported by database" during COMMIT');
|
|
SET sql_log_bin=1;
|
|
START SLAVE;
|
|
include/wait_for_slave_sql_error.inc [errno=1180]
|
|
SELECT @@GLOBAL.gtid_slave_pos;
|
|
@@GLOBAL.gtid_slave_pos
|
|
0-1-2
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
4
|
|
SET GLOBAL debug_dbug= @old_dbug;
|
|
START SLAVE SQL_THREAD;
|
|
include/sync_with_master_gtid.inc
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
*** Test slave requesting a GTID that is not present in the master's binlog ***
|
|
include/stop_slave.inc
|
|
SET GLOBAL gtid_slave_pos = "0-1-4";
|
|
START SLAVE;
|
|
SET sql_log_bin=0;
|
|
CALL mtr.add_suppression("Got fatal error .* from master when reading data from binary log: 'Error: connecting slave requested to start from GTID .*, which is not in the master's binlog'");
|
|
SET sql_log_bin=1;
|
|
include/wait_for_slave_io_error.inc [errno=1236]
|
|
Slave_IO_State = ''
|
|
Last_IO_Errno = '1236'
|
|
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'Error: connecting slave requested to start from GTID 0-1-4, which is not in the master's binlog''
|
|
Using_Gtid = 'Current_Pos'
|
|
include/stop_slave.inc
|
|
SET GLOBAL gtid_slave_pos = "0-1-3";
|
|
START SLAVE;
|
|
include/wait_for_slave_to_start.inc
|
|
INSERT INTO t1 VALUES (6);
|
|
include/save_master_gtid.inc
|
|
include/sync_with_master_gtid.inc
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
*** MDEV-4278: Slave does not detect that master is not GTID-aware ***
|
|
include/stop_slave.inc
|
|
SET @old_dbug= @@global.DEBUG_DBUG;
|
|
SET GLOBAL debug_dbug="+d,simulate_non_gtid_aware_master";
|
|
START SLAVE;
|
|
include/wait_for_slave_io_error.inc [errno=1233]
|
|
SET GLOBAL debug_dbug= @old_dbug;
|
|
INSERT INTO t1 VALUES (7);
|
|
START SLAVE;
|
|
SET sql_log_bin=0;
|
|
CALL mtr.add_suppression("The slave I/O thread stops because master does not support MariaDB global transaction id");
|
|
SET sql_log_bin=1;
|
|
*** Test error during record_gtid() (non-xid cases) ***
|
|
include/stop_slave.inc
|
|
CREATE TABLE t2 (a INT) ENGINE=MyISAM;
|
|
INSERT INTO t2 VALUES (1);
|
|
SET @old_dbug= @@global.DEBUG_DBUG;
|
|
SET GLOBAL debug_dbug="+d,gtid_inject_record_gtid";
|
|
START SLAVE;
|
|
include/wait_for_slave_sql_error.inc [errno=1942]
|
|
SET GLOBAL debug_dbug= @old_dbug;
|
|
START SLAVE SQL_THREAD;
|
|
SELECT * FROM t2;
|
|
a
|
|
1
|
|
1
|
|
SET sql_log_bin=0;
|
|
CALL mtr.add_suppression("Slave: Could not update replication slave gtid state");
|
|
SET sql_log_bin=1;
|
|
*** MDEV-4906: When event apply fails, next SQL thread start errorneously commits the failing GTID to gtid_slave_pos ***
|
|
include/stop_slave.inc
|
|
SET sql_log_bin=0;
|
|
DELETE FROM t2;
|
|
SET sql_log_bin=1;
|
|
SET @old_format=@@binlog_format;
|
|
SET GLOBAL binlog_format='row';
|
|
include/start_slave.inc
|
|
SET @old_format=@@binlog_format;
|
|
SET binlog_format='row';
|
|
DELETE FROM t2;
|
|
SET binlog_format=@old_format;
|
|
include/wait_for_slave_sql_error.inc [errno=1032]
|
|
result
|
|
OK
|
|
STOP SLAVE IO_THREAD;
|
|
START SLAVE;
|
|
include/wait_for_slave_sql_error.inc [errno=1032]
|
|
result
|
|
OK
|
|
STOP SLAVE IO_THREAD;
|
|
SET sql_log_bin=0;
|
|
INSERT INTO t2 VALUES (1);
|
|
CALL mtr.add_suppression("Slave: Can't find record in 't2' Error_code: 1032");
|
|
SET sql_log_bin=1;
|
|
include/start_slave.inc
|
|
SET GLOBAL binlog_format=@old_format;
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
include/rpl_end.inc
|