mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
6e0a00ed75
Use include/sync_with_master_gtid.inc instead of --sync_with_master to avoid a race in the test case. In parallel replication, the old-style slave position (which is used by --sync_with_master) is updated out-of-order between parallel threads. This makes it possible for the position to be updated past DROP TEMPORARY TABLE t2 just before the commit of INSERT INTO t1 SELECT * FROM t2 becomes visible. In this case, there is a small window where a SELECT just after --sync_with_master may not see the changes from the INSERT.
58 lines
1.3 KiB
Text
58 lines
1.3 KiB
Text
include/master-slave.inc
|
|
[connection master]
|
|
ALTER TABLE mysql.gtid_slave_pos ENGINE = InnoDB;
|
|
FLUSH LOGS;
|
|
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) Engine=InnoDB;
|
|
include/stop_slave.inc
|
|
SET sql_log_bin= 0;
|
|
INSERT INTO t1 VALUES (1, 2);
|
|
SET sql_log_bin= 1;
|
|
CHANGE MASTER TO master_use_gtid= current_pos;
|
|
Contents on slave before:
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
1 2
|
|
SET @old_parallel= @@GLOBAL.slave_parallel_threads;
|
|
SET GLOBAL slave_parallel_threads=8;
|
|
CREATE TEMPORARY TABLE t2 LIKE t1;
|
|
INSERT INTO t2 VALUE (1, 1);
|
|
INSERT INTO t2 VALUE (2, 1);
|
|
INSERT INTO t2 VALUE (3, 1);
|
|
INSERT INTO t2 VALUE (4, 1);
|
|
INSERT INTO t2 VALUE (5, 1);
|
|
INSERT INTO t1 SELECT * FROM t2;
|
|
DROP TEMPORARY TABLE t2;
|
|
include/save_master_gtid.inc
|
|
Contents on master:
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
1 1
|
|
2 1
|
|
3 1
|
|
4 1
|
|
5 1
|
|
START SLAVE;
|
|
include/wait_for_slave_sql_error.inc [errno=1062]
|
|
STOP SLAVE IO_THREAD;
|
|
Contents on slave on slave error:
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
1 2
|
|
SET sql_log_bin= 0;
|
|
DELETE FROM t1 WHERE a=1;
|
|
SET sql_log_bin= 1;
|
|
include/start_slave.inc
|
|
include/sync_with_master_gtid.inc
|
|
Contents on slave after:
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
1 1
|
|
2 1
|
|
3 1
|
|
4 1
|
|
5 1
|
|
DROP TABLE t1;
|
|
include/stop_slave.inc
|
|
SET GLOBAL slave_parallel_threads= @old_parallel;
|
|
include/start_slave.inc
|
|
include/rpl_end.inc
|