-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge MDEV-6589 and MDEV-6403 into 10.1.
Conflicts: sql/log.cc sql/rpl_rli.cc sql/sql_repl.cc
- Loading branch information
Showing
13 changed files
with
666 additions
and
14 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
include/master-slave.inc | ||
[connection master] | ||
*** MDEV-6403: Temporary tables lost at STOP SLAVE in GTID mode if master has not rotated binlog since restart *** | ||
CREATE TABLE t1 (a INT PRIMARY KEY); | ||
include/stop_slave.inc | ||
SET sql_log_bin= 0; | ||
INSERT INTO t1 VALUES (1); | ||
SET sql_log_bin= 1; | ||
CHANGE MASTER TO master_use_gtid= current_pos; | ||
CREATE TEMPORARY TABLE t2 LIKE t1; | ||
INSERT INTO t2 VALUE (1); | ||
INSERT INTO t1 SELECT * FROM t2; | ||
DROP TEMPORARY TABLE t2; | ||
START SLAVE; | ||
include/wait_for_slave_sql_error.inc [errno=1062] | ||
STOP SLAVE IO_THREAD; | ||
SET sql_log_bin= 0; | ||
DELETE FROM t1 WHERE a=1; | ||
SET sql_log_bin= 1; | ||
include/start_slave.inc | ||
SELECT * FROM t1 ORDER BY a; | ||
a | ||
1 | ||
DROP TABLE t1; | ||
include/rpl_end.inc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
include/master-slave.inc | ||
[connection master] | ||
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads; | ||
include/stop_slave.inc | ||
SET GLOBAL slave_parallel_threads=10; | ||
CHANGE MASTER TO master_use_gtid=current_pos; | ||
include/start_slave.inc | ||
*** MDEV-6589: Incorrect relay log start position when restarting SQL thread after error in parallel replication *** | ||
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB; | ||
CREATE TABLE t1 (a int PRIMARY KEY) ENGINE=MyISAM; | ||
CREATE TABLE t2 (a int PRIMARY KEY) ENGINE=InnoDB; | ||
INSERT INTO t1 VALUES (1); | ||
INSERT INTO t2 VALUES (1); | ||
SELECT * FROM t1; | ||
a | ||
1 | ||
SELECT * FROM t2; | ||
a | ||
1 | ||
SET sql_log_bin=0; | ||
BEGIN; | ||
INSERT INTO t2 VALUES (5); | ||
SET gtid_domain_id=0; | ||
INSERT INTO t1 VALUES (2); | ||
INSERT INTO t2 VALUES (3); | ||
FLUSH LOGS; | ||
INSERT INTO t1 VALUES (4); | ||
SET gtid_domain_id=1; | ||
INSERT INTO t2 VALUES (5); | ||
SET gtid_domain_id=0; | ||
INSERT INTO t1 VALUES (6); | ||
INSERT INTO t1 VALUES (7); | ||
SET gtid_domain_id=2; | ||
INSERT INTO t2 VALUES (8); | ||
INSERT INTO t1 VALUES (9); | ||
FLUSH LOGS; | ||
SET gtid_domain_id=3; | ||
INSERT INTO t2 VALUES (10); | ||
INSERT INTO t1 VALUES (11); | ||
SET gtid_domain_id=1; | ||
INSERT INTO t1 VALUES (12); | ||
INSERT INTO t2 VALUES (13); | ||
SET gtid_domain_id=0; | ||
INSERT INTO t2 VALUES (14); | ||
FLUSH LOGS; | ||
SET gtid_domain_id=3; | ||
INSERT INTO t2 VALUES (15); | ||
SET gtid_domain_id=2; | ||
INSERT INTO t2 VALUES (16); | ||
SET gtid_domain_id=0; | ||
INSERT INTO t1 VALUES (17); | ||
SET @gtid0 = @@last_gtid; | ||
SET gtid_domain_id=2; | ||
INSERT INTO t1 VALUES (18); | ||
SET @gtid2 = @@last_gtid; | ||
SET gtid_domain_id=3; | ||
INSERT INTO t1 VALUES (19); | ||
SET @gtid3 = @@last_gtid; | ||
SELECT * FROM t1 ORDER BY a; | ||
a | ||
1 | ||
2 | ||
4 | ||
6 | ||
7 | ||
9 | ||
11 | ||
12 | ||
17 | ||
18 | ||
19 | ||
SELECT * FROM t2 ORDER BY a; | ||
a | ||
1 | ||
3 | ||
5 | ||
8 | ||
10 | ||
13 | ||
14 | ||
15 | ||
16 | ||
include/save_master_gtid.inc | ||
SELECT MASTER_GTID_WAIT('WAIT_POS'); | ||
MASTER_GTID_WAIT('WAIT_POS') | ||
0 | ||
COMMIT; | ||
SET sql_log_bin=1; | ||
include/wait_for_slave_sql_error.inc [errno=1062] | ||
SELECT * FROM t1 ORDER BY a; | ||
a | ||
1 | ||
2 | ||
4 | ||
6 | ||
7 | ||
9 | ||
11 | ||
17 | ||
18 | ||
19 | ||
SELECT * FROM t2 ORDER BY a; | ||
a | ||
1 | ||
3 | ||
5 | ||
8 | ||
10 | ||
14 | ||
15 | ||
16 | ||
SET sql_log_bin=0; | ||
DELETE FROM t2 WHERE a=5; | ||
SET sql_log_bin=1; | ||
include/start_slave.inc | ||
include/sync_with_master_gtid.inc | ||
SELECT * FROM t1 ORDER BY a; | ||
a | ||
1 | ||
2 | ||
4 | ||
6 | ||
7 | ||
9 | ||
11 | ||
12 | ||
17 | ||
18 | ||
19 | ||
SELECT * FROM t2 ORDER BY a; | ||
a | ||
1 | ||
3 | ||
5 | ||
8 | ||
10 | ||
13 | ||
14 | ||
15 | ||
16 | ||
include/stop_slave.inc | ||
SET GLOBAL slave_parallel_threads=@old_parallel_threads; | ||
include/start_slave.inc | ||
SET DEBUG_SYNC= 'RESET'; | ||
DROP TABLE t1,t2; | ||
SET DEBUG_SYNC= 'RESET'; | ||
include/rpl_end.inc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
--source include/master-slave.inc | ||
|
||
--echo *** MDEV-6403: Temporary tables lost at STOP SLAVE in GTID mode if master has not rotated binlog since restart *** | ||
|
||
--connection master | ||
CREATE TABLE t1 (a INT PRIMARY KEY); | ||
--sync_slave_with_master | ||
|
||
--connection slave | ||
--source include/stop_slave.inc | ||
# Inject a duplicate key error that will make the slave stop in the middle of | ||
# a sequence of transactions that use a temporary table. | ||
SET sql_log_bin= 0; | ||
INSERT INTO t1 VALUES (1); | ||
SET sql_log_bin= 1; | ||
CHANGE MASTER TO master_use_gtid= current_pos; | ||
|
||
--connection master | ||
|
||
# Make some queries that use a temporary table. | ||
CREATE TEMPORARY TABLE t2 LIKE t1; | ||
INSERT INTO t2 VALUE (1); | ||
INSERT INTO t1 SELECT * FROM t2; | ||
DROP TEMPORARY TABLE t2; | ||
--save_master_pos | ||
|
||
--connection slave | ||
START SLAVE; | ||
--let $slave_sql_errno=1062 | ||
--source include/wait_for_slave_sql_error.inc | ||
|
||
# Restart the slave. | ||
# The bug was that the IO thread would receive again the restart | ||
# format_description event at the start of the master's binlog, and this | ||
# event would cause the SQL thread to discard all active temporary tables. | ||
|
||
STOP SLAVE IO_THREAD; | ||
|
||
SET sql_log_bin= 0; | ||
DELETE FROM t1 WHERE a=1; | ||
SET sql_log_bin= 1; | ||
|
||
--source include/start_slave.inc | ||
--sync_with_master | ||
SELECT * FROM t1 ORDER BY a; | ||
|
||
--connection master | ||
DROP TABLE t1; | ||
|
||
--source include/rpl_end.inc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,132 @@ | ||
--source include/have_innodb.inc | ||
--source include/have_debug.inc | ||
--source include/have_debug_sync.inc | ||
--source include/master-slave.inc | ||
|
||
--connection server_2 | ||
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads; | ||
--source include/stop_slave.inc | ||
SET GLOBAL slave_parallel_threads=10; | ||
CHANGE MASTER TO master_use_gtid=current_pos; | ||
--source include/start_slave.inc | ||
|
||
|
||
--echo *** MDEV-6589: Incorrect relay log start position when restarting SQL thread after error in parallel replication *** | ||
|
||
--connection server_1 | ||
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB; | ||
CREATE TABLE t1 (a int PRIMARY KEY) ENGINE=MyISAM; | ||
CREATE TABLE t2 (a int PRIMARY KEY) ENGINE=InnoDB; | ||
INSERT INTO t1 VALUES (1); | ||
INSERT INTO t2 VALUES (1); | ||
--save_master_pos | ||
|
||
--connection server_2 | ||
--sync_with_master | ||
SELECT * FROM t1; | ||
SELECT * FROM t2; | ||
|
||
# Block one domain, which we will later cause to give an error. And let some | ||
# other domains proceed so we can check that after restart, the slave is able | ||
# to correctly restart each domain in a separate position. | ||
|
||
--connect (con_temp1,127.0.0.1,root,,test,$SERVER_MYPORT_2,) | ||
SET sql_log_bin=0; | ||
BEGIN; | ||
INSERT INTO t2 VALUES (5); | ||
|
||
--connection server_1 | ||
SET gtid_domain_id=0; | ||
INSERT INTO t1 VALUES (2); | ||
INSERT INTO t2 VALUES (3); | ||
FLUSH LOGS; | ||
INSERT INTO t1 VALUES (4); | ||
|
||
SET gtid_domain_id=1; | ||
# This query will be blocked on the slave, and later give a duplicate key error. | ||
INSERT INTO t2 VALUES (5); | ||
|
||
SET gtid_domain_id=0; | ||
INSERT INTO t1 VALUES (6); | ||
INSERT INTO t1 VALUES (7); | ||
|
||
SET gtid_domain_id=2; | ||
INSERT INTO t2 VALUES (8); | ||
INSERT INTO t1 VALUES (9); | ||
FLUSH LOGS; | ||
|
||
SET gtid_domain_id=3; | ||
INSERT INTO t2 VALUES (10); | ||
INSERT INTO t1 VALUES (11); | ||
|
||
# These cannot be replicated before the error, as a prior commit is blocked. | ||
SET gtid_domain_id=1; | ||
INSERT INTO t1 VALUES (12); | ||
INSERT INTO t2 VALUES (13); | ||
|
||
SET gtid_domain_id=0; | ||
INSERT INTO t2 VALUES (14); | ||
FLUSH LOGS; | ||
|
||
SET gtid_domain_id=3; | ||
INSERT INTO t2 VALUES (15); | ||
|
||
SET gtid_domain_id=2; | ||
INSERT INTO t2 VALUES (16); | ||
|
||
SET gtid_domain_id=0; | ||
INSERT INTO t1 VALUES (17); | ||
SET @gtid0 = @@last_gtid; | ||
SET gtid_domain_id=2; | ||
INSERT INTO t1 VALUES (18); | ||
SET @gtid2 = @@last_gtid; | ||
SET gtid_domain_id=3; | ||
INSERT INTO t1 VALUES (19); | ||
SET @gtid3 = @@last_gtid; | ||
--let $wait_pos= `SELECT CONCAT(@gtid0, ",", @gtid2, ",", @gtid3)` | ||
|
||
SELECT * FROM t1 ORDER BY a; | ||
SELECT * FROM t2 ORDER BY a; | ||
--source include/save_master_gtid.inc | ||
|
||
|
||
--connection server_2 | ||
# First wait for domains 0, 2, and 3 to complete. | ||
--replace_result $wait_pos WAIT_POS | ||
eval SELECT MASTER_GTID_WAIT('$wait_pos'); | ||
|
||
# Then release the row lock, and wait for the domain 1 to fail with | ||
# duplicate key error. | ||
--connection con_temp1 | ||
COMMIT; | ||
SET sql_log_bin=1; | ||
|
||
--connection server_2 | ||
--let $slave_sql_errno= 1062 | ||
--source include/wait_for_slave_sql_error.inc | ||
|
||
SELECT * FROM t1 ORDER BY a; | ||
SELECT * FROM t2 ORDER BY a; | ||
|
||
SET sql_log_bin=0; | ||
DELETE FROM t2 WHERE a=5; | ||
SET sql_log_bin=1; | ||
--source include/start_slave.inc | ||
--source include/sync_with_master_gtid.inc | ||
|
||
SELECT * FROM t1 ORDER BY a; | ||
SELECT * FROM t2 ORDER BY a; | ||
|
||
|
||
# Clean up. | ||
--connection server_2 | ||
--source include/stop_slave.inc | ||
SET GLOBAL slave_parallel_threads=@old_parallel_threads; | ||
--source include/start_slave.inc | ||
SET DEBUG_SYNC= 'RESET'; | ||
|
||
--connection server_1 | ||
DROP TABLE t1,t2; | ||
SET DEBUG_SYNC= 'RESET'; | ||
|
||
--source include/rpl_end.inc |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.