Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
17622bc0
Commit
17622bc0
authored
Sep 01, 2016
by
Igor Babaev
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '10.2' into 10.2-mdev9197
parents
3fb4f9bb
addb38f4
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
968 additions
and
638 deletions
+968
-638
mysql-test/r/mysqld--help,win.rdiff
mysql-test/r/mysqld--help,win.rdiff
+12
-12
mysql-test/suite/rpl/r/parallel_conflicts.result
mysql-test/suite/rpl/r/parallel_conflicts.result
+312
-0
mysql-test/suite/rpl/r/rpl_parallel.result
mysql-test/suite/rpl/r/rpl_parallel.result
+3
-338
mysql-test/suite/rpl/r/rpl_parallel_conflicts.result
mysql-test/suite/rpl/r/rpl_parallel_conflicts.result
+333
-0
mysql-test/suite/rpl/t/rpl_parallel.test
mysql-test/suite/rpl/t/rpl_parallel.test
+3
-264
mysql-test/suite/rpl/t/rpl_parallel_conflicts-slave.opt
mysql-test/suite/rpl/t/rpl_parallel_conflicts-slave.opt
+1
-0
mysql-test/suite/rpl/t/rpl_parallel_conflicts.test
mysql-test/suite/rpl/t/rpl_parallel_conflicts.test
+261
-0
sql/mysqld.cc
sql/mysqld.cc
+28
-22
sql/mysqld.h
sql/mysqld.h
+1
-1
sql/signal_handler.cc
sql/signal_handler.cc
+1
-0
storage/innobase/handler/ha_innodb.cc
storage/innobase/handler/ha_innodb.cc
+1
-0
storage/innobase/log/log0log.cc
storage/innobase/log/log0log.cc
+7
-0
storage/innobase/trx/trx0trx.cc
storage/innobase/trx/trx0trx.cc
+5
-1
No files found.
mysql-test/r/mysqld--help,win.rdiff
View file @
17622bc0
...
@@ -17,15 +17,15 @@
...
@@ -17,15 +17,15 @@
Buffer length for TCP/IP and socket communication
Buffer length for TCP/IP and socket communication
--net-read-timeout=#
--net-read-timeout=#
@@ -903,6 +903,9 @@
@@ -903,6 +903,9 @@
files within specified directory
characteristics (isolation level, read only/read
--server-id=# Uniquely identifies the server instance in the community
write,snapshot - but not any work done / data modified
of replication partners
within the transaction).
+ --shared-memory Enable the shared memory
+ --shared-memory Enable the shared memory
+ --shared-memory-base-name=name
+ --shared-memory-base-name=name
+ Base name of shared memory
+ Base name of shared memory
--s
ession-track-schema
--s
how-slave-auth-info
Track changes to the default schema.
Show user and password in SHOW SLAVE HOSTS on this
(Defaults to on; use --skip-session-track-schema to disable.)
master.
@@ -1015,6 +1018,10 @@
@@ -1015,6 +1018,10 @@
Log slow queries to given log file. Defaults logging to
Log slow queries to given log file. Defaults logging to
'hostname'-slow.log. Must be enabled to activate other
'hostname'-slow.log. Must be enabled to activate other
...
@@ -101,14 +101,14 @@
...
@@ -101,14 +101,14 @@
net-read-timeout 30
net-read-timeout 30
net-retry-count 10
net-retry-count 10
@@ -1387,6 +1381,8 @@
@@ -1387,6 +1381,8 @@
secure-auth TRUE
secure-file-priv (No default value)
server-id 1
+shared-memory FALSE
+shared-memory-base-name MYSQL
session-track-schema TRUE
session-track-state-change FALSE
session-track-state-change FALSE
session-track-system-variables
session-track-system-variables
session-track-transaction-info OFF
+shared-memory FALSE
+shared-memory-base-name MYSQL
show-slave-auth-info FALSE
silent-startup FALSE
skip-grant-tables TRUE
@@ -1411,6 +1407,7 @@
@@ -1411,6 +1407,7 @@
slave-type-conversions
slave-type-conversions
slow-launch-time 2
slow-launch-time 2
...
...
mysql-test/suite/rpl/r/parallel_conflicts.result
0 → 100644
View file @
17622bc0
include/master-slave.inc
[connection master]
connection server_2;
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
include/stop_slave.inc
SET GLOBAL slave_parallel_threads=10;
SET GLOBAL slave_parallel_mode='conservative';
include/start_slave.inc
*** MDEV-7847: "Slave worker thread retried transaction 10 time(s) in vain, giving up", followed by replication hanging ***
*** MDEV-7882: Excessive transaction retry in parallel replication ***
connection server_1;
CREATE TABLE t7 (a int PRIMARY KEY, b INT) ENGINE=InnoDB;
CREATE TABLE t8 (a int PRIMARY KEY, b INT) ENGINE=InnoDB;
connection server_2;
include/stop_slave.inc
SET GLOBAL slave_parallel_threads=40;
SELECT @old_retries:=@@GLOBAL.slave_transaction_retries;
@old_retries:=@@GLOBAL.slave_transaction_retries
10
SET GLOBAL slave_transaction_retries= 5;
connection server_1;
INSERT INTO t7 VALUES (1,1), (2,2), (3,3), (4,4), (5,5);
SET @old_dbug= @@SESSION.debug_dbug;
SET @commit_id= 42;
SET SESSION debug_dbug="+d,binlog_force_commit_id";
INSERT INTO t8 VALUES (1,1);
INSERT INTO t8 VALUES (2,2);
INSERT INTO t8 VALUES (3,3);
INSERT INTO t8 VALUES (4,4);
INSERT INTO t8 VALUES (5,5);
INSERT INTO t8 VALUES (6,6);
INSERT INTO t8 VALUES (7,7);
INSERT INTO t8 VALUES (8,8);
UPDATE t7 SET b=9 WHERE a=3;
UPDATE t7 SET b=10 WHERE a=3;
UPDATE t7 SET b=11 WHERE a=3;
INSERT INTO t8 VALUES (12,12);
INSERT INTO t8 VALUES (13,13);
UPDATE t7 SET b=14 WHERE a=3;
UPDATE t7 SET b=15 WHERE a=3;
INSERT INTO t8 VALUES (16,16);
UPDATE t7 SET b=17 WHERE a=3;
INSERT INTO t8 VALUES (18,18);
INSERT INTO t8 VALUES (19,19);
UPDATE t7 SET b=20 WHERE a=3;
INSERT INTO t8 VALUES (21,21);
UPDATE t7 SET b=22 WHERE a=3;
INSERT INTO t8 VALUES (23,24);
INSERT INTO t8 VALUES (24,24);
UPDATE t7 SET b=25 WHERE a=3;
INSERT INTO t8 VALUES (26,26);
UPDATE t7 SET b=27 WHERE a=3;
BEGIN;
INSERT INTO t8 VALUES (28,28);
INSERT INTO t8 VALUES (29,28), (30,28);
INSERT INTO t8 VALUES (31,28);
INSERT INTO t8 VALUES (32,28);
INSERT INTO t8 VALUES (33,28);
INSERT INTO t8 VALUES (34,28);
INSERT INTO t8 VALUES (35,28);
INSERT INTO t8 VALUES (36,28);
INSERT INTO t8 VALUES (37,28);
INSERT INTO t8 VALUES (38,28);
INSERT INTO t8 VALUES (39,28);
INSERT INTO t8 VALUES (40,28);
INSERT INTO t8 VALUES (41,28);
INSERT INTO t8 VALUES (42,28);
COMMIT;
SET @commit_id=43;
INSERT INTO t8 VALUES (43,43);
INSERT INTO t8 VALUES (44,44);
UPDATE t7 SET b=45 WHERE a=3;
INSERT INTO t8 VALUES (46,46);
INSERT INTO t8 VALUES (47,47);
UPDATE t7 SET b=48 WHERE a=3;
INSERT INTO t8 VALUES (49,49);
INSERT INTO t8 VALUES (50,50);
SET @commit_id=44;
INSERT INTO t8 VALUES (51,51);
INSERT INTO t8 VALUES (52,52);
UPDATE t7 SET b=53 WHERE a=3;
INSERT INTO t8 VALUES (54,54);
INSERT INTO t8 VALUES (55,55);
UPDATE t7 SET b=56 WHERE a=3;
INSERT INTO t8 VALUES (57,57);
UPDATE t7 SET b=58 WHERE a=3;
INSERT INTO t8 VALUES (58,58);
INSERT INTO t8 VALUES (59,59);
INSERT INTO t8 VALUES (60,60);
INSERT INTO t8 VALUES (61,61);
UPDATE t7 SET b=62 WHERE a=3;
INSERT INTO t8 VALUES (63,63);
INSERT INTO t8 VALUES (64,64);
INSERT INTO t8 VALUES (65,65);
INSERT INTO t8 VALUES (66,66);
UPDATE t7 SET b=67 WHERE a=3;
INSERT INTO t8 VALUES (68,68);
UPDATE t7 SET b=69 WHERE a=3;
UPDATE t7 SET b=70 WHERE a=3;
UPDATE t7 SET b=71 WHERE a=3;
INSERT INTO t8 VALUES (72,72);
UPDATE t7 SET b=73 WHERE a=3;
UPDATE t7 SET b=74 WHERE a=3;
UPDATE t7 SET b=75 WHERE a=3;
UPDATE t7 SET b=76 WHERE a=3;
INSERT INTO t8 VALUES (77,77);
UPDATE t7 SET b=78 WHERE a=3;
INSERT INTO t8 VALUES (79,79);
UPDATE t7 SET b=80 WHERE a=3;
INSERT INTO t8 VALUES (81,81);
UPDATE t7 SET b=82 WHERE a=3;
INSERT INTO t8 VALUES (83,83);
UPDATE t7 SET b=84 WHERE a=3;
SET @commit_id=45;
INSERT INTO t8 VALUES (85,85);
UPDATE t7 SET b=86 WHERE a=3;
INSERT INTO t8 VALUES (87,87);
SET @commit_id=46;
INSERT INTO t8 VALUES (88,88);
INSERT INTO t8 VALUES (89,89);
INSERT INTO t8 VALUES (90,90);
SET SESSION debug_dbug=@old_dbug;
INSERT INTO t8 VALUES (91,91);
INSERT INTO t8 VALUES (92,92);
INSERT INTO t8 VALUES (93,93);
INSERT INTO t8 VALUES (94,94);
INSERT INTO t8 VALUES (95,95);
INSERT INTO t8 VALUES (96,96);
INSERT INTO t8 VALUES (97,97);
INSERT INTO t8 VALUES (98,98);
INSERT INTO t8 VALUES (99,99);
SELECT * FROM t7 ORDER BY a;
a b
1 1
2 2
3 86
4 4
5 5
SELECT * FROM t8 ORDER BY a;
a b
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
12 12
13 13
16 16
18 18
19 19
21 21
23 24
24 24
26 26
28 28
29 28
30 28
31 28
32 28
33 28
34 28
35 28
36 28
37 28
38 28
39 28
40 28
41 28
42 28
43 43
44 44
46 46
47 47
49 49
50 50
51 51
52 52
54 54
55 55
57 57
58 58
59 59
60 60
61 61
63 63
64 64
65 65
66 66
68 68
72 72
77 77
79 79
81 81
83 83
85 85
87 87
88 88
89 89
90 90
91 91
92 92
93 93
94 94
95 95
96 96
97 97
98 98
99 99
include/save_master_gtid.inc
connection server_2;
include/start_slave.inc
include/sync_with_master_gtid.inc
SELECT * FROM t7 ORDER BY a;
a b
1 1
2 2
3 86
4 4
5 5
SELECT * FROM t8 ORDER BY a;
a b
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
12 12
13 13
16 16
18 18
19 19
21 21
23 24
24 24
26 26
28 28
29 28
30 28
31 28
32 28
33 28
34 28
35 28
36 28
37 28
38 28
39 28
40 28
41 28
42 28
43 43
44 44
46 46
47 47
49 49
50 50
51 51
52 52
54 54
55 55
57 57
58 58
59 59
60 60
61 61
63 63
64 64
65 65
66 66
68 68
72 72
77 77
79 79
81 81
83 83
85 85
87 87
88 88
89 89
90 90
91 91
92 92
93 93
94 94
95 95
96 96
97 97
98 98
99 99
connection server_2;
include/stop_slave.inc
SET GLOBAL slave_parallel_threads=@old_parallel_threads;
SET GLOBAL slave_transaction_retries=@old_retries;
include/start_slave.inc
SET DEBUG_SYNC= 'RESET';
connection server_1;
DROP TABLE if exists t1,t2,t3,t4,t5,t6,t7,t8;
Warnings:
Note 1051 Unknown table 'test.t1'
Note 1051 Unknown table 'test.t2'
Note 1051 Unknown table 'test.t3'
Note 1051 Unknown table 'test.t4'
Note 1051 Unknown table 'test.t5'
Note 1051 Unknown table 'test.t6'
SET DEBUG_SYNC= 'RESET';
include/rpl_end.inc
mysql-test/suite/rpl/r/rpl_parallel.result
View file @
17622bc0
...
@@ -1504,303 +1504,11 @@ a
...
@@ -1504,303 +1504,11 @@ a
1044
1044
1045
1045
1046
1046
include/stop_slave.inc
SET GLOBAL slave_parallel_mode='conservative';
include/start_slave.inc
*** MDEV-7847: "Slave worker thread retried transaction 10 time(s) in vain, giving up", followed by replication hanging ***
*** MDEV-7882: Excessive transaction retry in parallel replication ***
connection server_1;
CREATE TABLE t7 (a int PRIMARY KEY, b INT) ENGINE=InnoDB;
CREATE TABLE t8 (a int PRIMARY KEY, b INT) ENGINE=InnoDB;
connection server_2;
include/stop_slave.inc
SET GLOBAL slave_parallel_threads=40;
SELECT @old_retries:=@@GLOBAL.slave_transaction_retries;
@old_retries:=@@GLOBAL.slave_transaction_retries
10
SET GLOBAL slave_transaction_retries= 5;
connection server_1;
INSERT INTO t7 VALUES (1,1), (2,2), (3,3), (4,4), (5,5);
SET @old_dbug= @@SESSION.debug_dbug;
SET @commit_id= 42;
SET SESSION debug_dbug="+d,binlog_force_commit_id";
INSERT INTO t8 VALUES (1,1);
INSERT INTO t8 VALUES (2,2);
INSERT INTO t8 VALUES (3,3);
INSERT INTO t8 VALUES (4,4);
INSERT INTO t8 VALUES (5,5);
INSERT INTO t8 VALUES (6,6);
INSERT INTO t8 VALUES (7,7);
INSERT INTO t8 VALUES (8,8);
UPDATE t7 SET b=9 WHERE a=3;
UPDATE t7 SET b=10 WHERE a=3;
UPDATE t7 SET b=11 WHERE a=3;
INSERT INTO t8 VALUES (12,12);
INSERT INTO t8 VALUES (13,13);
UPDATE t7 SET b=14 WHERE a=3;
UPDATE t7 SET b=15 WHERE a=3;
INSERT INTO t8 VALUES (16,16);
UPDATE t7 SET b=17 WHERE a=3;
INSERT INTO t8 VALUES (18,18);
INSERT INTO t8 VALUES (19,19);
UPDATE t7 SET b=20 WHERE a=3;
INSERT INTO t8 VALUES (21,21);
UPDATE t7 SET b=22 WHERE a=3;
INSERT INTO t8 VALUES (23,24);
INSERT INTO t8 VALUES (24,24);
UPDATE t7 SET b=25 WHERE a=3;
INSERT INTO t8 VALUES (26,26);
UPDATE t7 SET b=27 WHERE a=3;
BEGIN;
INSERT INTO t8 VALUES (28,28);
INSERT INTO t8 VALUES (29,28), (30,28);
INSERT INTO t8 VALUES (31,28);
INSERT INTO t8 VALUES (32,28);
INSERT INTO t8 VALUES (33,28);
INSERT INTO t8 VALUES (34,28);
INSERT INTO t8 VALUES (35,28);
INSERT INTO t8 VALUES (36,28);
INSERT INTO t8 VALUES (37,28);
INSERT INTO t8 VALUES (38,28);
INSERT INTO t8 VALUES (39,28);
INSERT INTO t8 VALUES (40,28);
INSERT INTO t8 VALUES (41,28);
INSERT INTO t8 VALUES (42,28);
COMMIT;
SET @commit_id=43;
INSERT INTO t8 VALUES (43,43);
INSERT INTO t8 VALUES (44,44);
UPDATE t7 SET b=45 WHERE a=3;
INSERT INTO t8 VALUES (46,46);
INSERT INTO t8 VALUES (47,47);
UPDATE t7 SET b=48 WHERE a=3;
INSERT INTO t8 VALUES (49,49);
INSERT INTO t8 VALUES (50,50);
SET @commit_id=44;
INSERT INTO t8 VALUES (51,51);
INSERT INTO t8 VALUES (52,52);
UPDATE t7 SET b=53 WHERE a=3;
INSERT INTO t8 VALUES (54,54);
INSERT INTO t8 VALUES (55,55);
UPDATE t7 SET b=56 WHERE a=3;
INSERT INTO t8 VALUES (57,57);
UPDATE t7 SET b=58 WHERE a=3;
INSERT INTO t8 VALUES (58,58);
INSERT INTO t8 VALUES (59,59);
INSERT INTO t8 VALUES (60,60);
INSERT INTO t8 VALUES (61,61);
UPDATE t7 SET b=62 WHERE a=3;
INSERT INTO t8 VALUES (63,63);
INSERT INTO t8 VALUES (64,64);
INSERT INTO t8 VALUES (65,65);
INSERT INTO t8 VALUES (66,66);
UPDATE t7 SET b=67 WHERE a=3;
INSERT INTO t8 VALUES (68,68);
UPDATE t7 SET b=69 WHERE a=3;
UPDATE t7 SET b=70 WHERE a=3;
UPDATE t7 SET b=71 WHERE a=3;
INSERT INTO t8 VALUES (72,72);
UPDATE t7 SET b=73 WHERE a=3;
UPDATE t7 SET b=74 WHERE a=3;
UPDATE t7 SET b=75 WHERE a=3;
UPDATE t7 SET b=76 WHERE a=3;
INSERT INTO t8 VALUES (77,77);
UPDATE t7 SET b=78 WHERE a=3;
INSERT INTO t8 VALUES (79,79);
UPDATE t7 SET b=80 WHERE a=3;
INSERT INTO t8 VALUES (81,81);
UPDATE t7 SET b=82 WHERE a=3;
INSERT INTO t8 VALUES (83,83);
UPDATE t7 SET b=84 WHERE a=3;
SET @commit_id=45;
INSERT INTO t8 VALUES (85,85);
UPDATE t7 SET b=86 WHERE a=3;
INSERT INTO t8 VALUES (87,87);
SET @commit_id=46;
INSERT INTO t8 VALUES (88,88);
INSERT INTO t8 VALUES (89,89);
INSERT INTO t8 VALUES (90,90);
SET SESSION debug_dbug=@old_dbug;
INSERT INTO t8 VALUES (91,91);
INSERT INTO t8 VALUES (92,92);
INSERT INTO t8 VALUES (93,93);
INSERT INTO t8 VALUES (94,94);
INSERT INTO t8 VALUES (95,95);
INSERT INTO t8 VALUES (96,96);
INSERT INTO t8 VALUES (97,97);
INSERT INTO t8 VALUES (98,98);
INSERT INTO t8 VALUES (99,99);
SELECT * FROM t7 ORDER BY a;
a b
1 1
2 2
3 86
4 4
5 5
SELECT * FROM t8 ORDER BY a;
a b
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
12 12
13 13
16 16
18 18
19 19
21 21
23 24
24 24
26 26
28 28
29 28
30 28
31 28
32 28
33 28
34 28
35 28
36 28
37 28
38 28
39 28
40 28
41 28
42 28
43 43
44 44
46 46
47 47
49 49
50 50
51 51
52 52
54 54
55 55
57 57
58 58
59 59
60 60
61 61
63 63
64 64
65 65
66 66
68 68
72 72
77 77
79 79
81 81
83 83
85 85
87 87
88 88
89 89
90 90
91 91
92 92
93 93
94 94
95 95
96 96
97 97
98 98
99 99
include/save_master_gtid.inc
connection server_2;
include/start_slave.inc
include/sync_with_master_gtid.inc
SELECT * FROM t7 ORDER BY a;
a b
1 1
2 2
3 86
4 4
5 5
SELECT * FROM t8 ORDER BY a;
a b
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
12 12
13 13
16 16
18 18
19 19
21 21
23 24
24 24
26 26
28 28
29 28
30 28
31 28
32 28
33 28
34 28
35 28
36 28
37 28
38 28
39 28
40 28
41 28
42 28
43 43
44 44
46 46
47 47
49 49
50 50
51 51
52 52
54 54
55 55
57 57
58 58
59 59
60 60
61 61
63 63
64 64
65 65
66 66
68 68
72 72
77 77
79 79
81 81
83 83
85 85
87 87
88 88
89 89
90 90
91 91
92 92
93 93
94 94
95 95
96 96
97 97
98 98
99 99
include/stop_slave.inc
SET GLOBAL slave_transaction_retries= @old_retries;
SET GLOBAL slave_parallel_threads=10;
include/start_slave.inc
*** MDEV-7888: ANALYZE TABLE does wakeup_subsequent_commits(), causing wrong binlog order and parallel replication hang ***
*** MDEV-7888: ANALYZE TABLE does wakeup_subsequent_commits(), causing wrong binlog order and parallel replication hang ***
connection server_2;
connection server_2;
include/stop_slave.inc
include/stop_slave.inc
SET GLOBAL slave_parallel_mode='conservative';
SET GLOBAL slave_parallel_threads=10;
SET @old_dbug= @@GLOBAL.debug_dbug;
SET @old_dbug= @@GLOBAL.debug_dbug;
SET GLOBAL debug_dbug= '+d,inject_analyze_table_sleep';
SET GLOBAL debug_dbug= '+d,inject_analyze_table_sleep';
connection server_1;
connection server_1;
...
@@ -1949,49 +1657,6 @@ include/stop_slave.inc
...
@@ -1949,49 +1657,6 @@ include/stop_slave.inc
SET GLOBAL debug_dbug= @old_debg;
SET GLOBAL debug_dbug= @old_debg;
SET GLOBAL max_relay_log_size= @old_max;
SET GLOBAL max_relay_log_size= @old_max;
include/start_slave.inc
include/start_slave.inc
*** MDEV-8302: Duplicate key with parallel replication ***
connection server_2;
include/stop_slave.inc
/* Inject a small sleep which makes the race easier to hit. */
SET @old_dbug=@@GLOBAL.debug_dbug;
SET GLOBAL debug_dbug="+d,inject_mdev8302";
connection server_1;
INSERT INTO t7 VALUES (100,1), (101,2), (102,3), (103,4), (104,5);
SET @old_dbug= @@SESSION.debug_dbug;
SET @commit_id= 20000;
SET SESSION debug_dbug="+d,binlog_force_commit_id";
SET SESSION debug_dbug=@old_dbug;
SELECT * FROM t7 ORDER BY a;
a b
1 1
2 2
3 86
4 4
5 5
100 5
101 1
102 2
103 3
104 4
include/save_master_gtid.inc
connection server_2;
include/start_slave.inc
include/sync_with_master_gtid.inc
SELECT * FROM t7 ORDER BY a;
a b
1 1
2 2
3 86
4 4
5 5
100 5
101 1
102 2
103 3
104 4
include/stop_slave.inc
SET GLOBAL debug_dbug=@old_dbug;
include/start_slave.inc
*** MDEV-8725: Assertion on ROLLBACK statement in the binary log ***
*** MDEV-8725: Assertion on ROLLBACK statement in the binary log ***
connection server_1;
connection server_1;
BEGIN;
BEGIN;
...
@@ -2019,6 +1684,6 @@ include/start_slave.inc
...
@@ -2019,6 +1684,6 @@ include/start_slave.inc
SET DEBUG_SYNC= 'RESET';
SET DEBUG_SYNC= 'RESET';
connection server_1;
connection server_1;
DROP function foo;
DROP function foo;
DROP TABLE t1,t2,t3,t4,t5,t6
,t7,t8
;
DROP TABLE t1,t2,t3,t4,t5,t6;
SET DEBUG_SYNC= 'RESET';
SET DEBUG_SYNC= 'RESET';
include/rpl_end.inc
include/rpl_end.inc
mysql-test/suite/rpl/r/rpl_parallel_conflicts.result
0 → 100644
View file @
17622bc0
include/master-slave.inc
[connection master]
*** MDEV-7847: "Slave worker thread retried transaction 10 time(s) in vain, giving up", followed by replication hanging ***
*** MDEV-7882: Excessive transaction retry in parallel replication ***
connection server_1;
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
CREATE TABLE t7 (a int PRIMARY KEY, b INT) ENGINE=InnoDB;
CREATE TABLE t8 (a int PRIMARY KEY, b INT) ENGINE=InnoDB;
connection server_2;
include/stop_slave.inc
connection server_1;
INSERT INTO t7 VALUES (1,1), (2,2), (3,3), (4,4), (5,5);
SET @old_dbug= @@SESSION.debug_dbug;
SET @commit_id= 42;
SET SESSION debug_dbug="+d,binlog_force_commit_id";
INSERT INTO t8 VALUES (1,1);
INSERT INTO t8 VALUES (2,2);
INSERT INTO t8 VALUES (3,3);
INSERT INTO t8 VALUES (4,4);
INSERT INTO t8 VALUES (5,5);
INSERT INTO t8 VALUES (6,6);
INSERT INTO t8 VALUES (7,7);
INSERT INTO t8 VALUES (8,8);
UPDATE t7 SET b=9 WHERE a=3;
UPDATE t7 SET b=10 WHERE a=3;
UPDATE t7 SET b=11 WHERE a=3;
INSERT INTO t8 VALUES (12,12);
INSERT INTO t8 VALUES (13,13);
UPDATE t7 SET b=14 WHERE a=3;
UPDATE t7 SET b=15 WHERE a=3;
INSERT INTO t8 VALUES (16,16);
UPDATE t7 SET b=17 WHERE a=3;
INSERT INTO t8 VALUES (18,18);
INSERT INTO t8 VALUES (19,19);
UPDATE t7 SET b=20 WHERE a=3;
INSERT INTO t8 VALUES (21,21);
UPDATE t7 SET b=22 WHERE a=3;
INSERT INTO t8 VALUES (23,24);
INSERT INTO t8 VALUES (24,24);
UPDATE t7 SET b=25 WHERE a=3;
INSERT INTO t8 VALUES (26,26);
UPDATE t7 SET b=27 WHERE a=3;
BEGIN;
INSERT INTO t8 VALUES (28,28);
INSERT INTO t8 VALUES (29,28), (30,28);
INSERT INTO t8 VALUES (31,28);
INSERT INTO t8 VALUES (32,28);
INSERT INTO t8 VALUES (33,28);
INSERT INTO t8 VALUES (34,28);
INSERT INTO t8 VALUES (35,28);
INSERT INTO t8 VALUES (36,28);
INSERT INTO t8 VALUES (37,28);
INSERT INTO t8 VALUES (38,28);
INSERT INTO t8 VALUES (39,28);
INSERT INTO t8 VALUES (40,28);
INSERT INTO t8 VALUES (41,28);
INSERT INTO t8 VALUES (42,28);
COMMIT;
SET @commit_id=43;
INSERT INTO t8 VALUES (43,43);
INSERT INTO t8 VALUES (44,44);
UPDATE t7 SET b=45 WHERE a=3;
INSERT INTO t8 VALUES (46,46);
INSERT INTO t8 VALUES (47,47);
UPDATE t7 SET b=48 WHERE a=3;
INSERT INTO t8 VALUES (49,49);
INSERT INTO t8 VALUES (50,50);
SET @commit_id=44;
INSERT INTO t8 VALUES (51,51);
INSERT INTO t8 VALUES (52,52);
UPDATE t7 SET b=53 WHERE a=3;
INSERT INTO t8 VALUES (54,54);
INSERT INTO t8 VALUES (55,55);
UPDATE t7 SET b=56 WHERE a=3;
INSERT INTO t8 VALUES (57,57);
UPDATE t7 SET b=58 WHERE a=3;
INSERT INTO t8 VALUES (58,58);
INSERT INTO t8 VALUES (59,59);
INSERT INTO t8 VALUES (60,60);
INSERT INTO t8 VALUES (61,61);
UPDATE t7 SET b=62 WHERE a=3;
INSERT INTO t8 VALUES (63,63);
INSERT INTO t8 VALUES (64,64);
INSERT INTO t8 VALUES (65,65);
INSERT INTO t8 VALUES (66,66);
UPDATE t7 SET b=67 WHERE a=3;
INSERT INTO t8 VALUES (68,68);
UPDATE t7 SET b=69 WHERE a=3;
UPDATE t7 SET b=70 WHERE a=3;
UPDATE t7 SET b=71 WHERE a=3;
INSERT INTO t8 VALUES (72,72);
UPDATE t7 SET b=73 WHERE a=3;
UPDATE t7 SET b=74 WHERE a=3;
UPDATE t7 SET b=75 WHERE a=3;
UPDATE t7 SET b=76 WHERE a=3;
INSERT INTO t8 VALUES (77,77);
UPDATE t7 SET b=78 WHERE a=3;
INSERT INTO t8 VALUES (79,79);
UPDATE t7 SET b=80 WHERE a=3;
INSERT INTO t8 VALUES (81,81);
UPDATE t7 SET b=82 WHERE a=3;
INSERT INTO t8 VALUES (83,83);
UPDATE t7 SET b=84 WHERE a=3;
SET @commit_id=45;
INSERT INTO t8 VALUES (85,85);
UPDATE t7 SET b=86 WHERE a=3;
INSERT INTO t8 VALUES (87,87);
SET @commit_id=46;
INSERT INTO t8 VALUES (88,88);
INSERT INTO t8 VALUES (89,89);
INSERT INTO t8 VALUES (90,90);
SET SESSION debug_dbug=@old_dbug;
INSERT INTO t8 VALUES (91,91);
INSERT INTO t8 VALUES (92,92);
INSERT INTO t8 VALUES (93,93);
INSERT INTO t8 VALUES (94,94);
INSERT INTO t8 VALUES (95,95);
INSERT INTO t8 VALUES (96,96);
INSERT INTO t8 VALUES (97,97);
INSERT INTO t8 VALUES (98,98);
INSERT INTO t8 VALUES (99,99);
SELECT * FROM t7 ORDER BY a;
a b
1 1
2 2
3 86
4 4
5 5
SELECT * FROM t8 ORDER BY a;
a b
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
12 12
13 13
16 16
18 18
19 19
21 21
23 24
24 24
26 26
28 28
29 28
30 28
31 28
32 28
33 28
34 28
35 28
36 28
37 28
38 28
39 28
40 28
41 28
42 28
43 43
44 44
46 46
47 47
49 49
50 50
51 51
52 52
54 54
55 55
57 57
58 58
59 59
60 60
61 61
63 63
64 64
65 65
66 66
68 68
72 72
77 77
79 79
81 81
83 83
85 85
87 87
88 88
89 89
90 90
91 91
92 92
93 93
94 94
95 95
96 96
97 97
98 98
99 99
include/save_master_gtid.inc
connection server_2;
include/start_slave.inc
include/sync_with_master_gtid.inc
SELECT * FROM t7 ORDER BY a;
a b
1 1
2 2
3 86
4 4
5 5
SELECT * FROM t8 ORDER BY a;
a b
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
12 12
13 13
16 16
18 18
19 19
21 21
23 24
24 24
26 26
28 28
29 28
30 28
31 28
32 28
33 28
34 28
35 28
36 28
37 28
38 28
39 28
40 28
41 28
42 28
43 43
44 44
46 46
47 47
49 49
50 50
51 51
52 52
54 54
55 55
57 57
58 58
59 59
60 60
61 61
63 63
64 64
65 65
66 66
68 68
72 72
77 77
79 79
81 81
83 83
85 85
87 87
88 88
89 89
90 90
91 91
92 92
93 93
94 94
95 95
96 96
97 97
98 98
99 99
*** MDEV-8302: Duplicate key with parallel replication ***
connection server_2;
include/stop_slave.inc
/* Inject a small sleep which makes the race easier to hit. */
SET @old_dbug=@@GLOBAL.debug_dbug;
SET GLOBAL debug_dbug="+d,inject_mdev8302";
connection server_1;
INSERT INTO t7 VALUES (100,1), (101,2), (102,3), (103,4), (104,5);
SET @old_dbug= @@SESSION.debug_dbug;
SET @commit_id= 20000;
SET SESSION debug_dbug="+d,binlog_force_commit_id";
SET SESSION debug_dbug=@old_dbug;
SELECT * FROM t7 ORDER BY a;
a b
1 1
2 2
3 86
4 4
5 5
100 5
101 1
102 2
103 3
104 4
include/save_master_gtid.inc
connection server_2;
include/start_slave.inc
include/sync_with_master_gtid.inc
SELECT * FROM t7 ORDER BY a;
a b
1 1
2 2
3 86
4 4
5 5
100 5
101 1
102 2
103 3
104 4
include/stop_slave.inc
SET GLOBAL debug_dbug=@old_dbug;
include/start_slave.inc
SET DEBUG_SYNC= 'RESET';
connection server_1;
DROP TABLE t7,t8;
SET DEBUG_SYNC= 'RESET';
include/rpl_end.inc
mysql-test/suite/rpl/t/rpl_parallel.test
View file @
17622bc0
...
@@ -1972,218 +1972,14 @@ SET GLOBAL slave_parallel_mode=minimal;
...
@@ -1972,218 +1972,14 @@ SET GLOBAL slave_parallel_mode=minimal;
--
source
include
/
start_slave
.
inc
--
source
include
/
start_slave
.
inc
--
source
include
/
sync_with_master_gtid
.
inc
--
source
include
/
sync_with_master_gtid
.
inc
SELECT
*
FROM
t2
WHERE
a
>=
1040
ORDER
BY
a
;
SELECT
*
FROM
t2
WHERE
a
>=
1040
ORDER
BY
a
;
--
source
include
/
stop_slave
.
inc
SET
GLOBAL
slave_parallel_mode
=
'conservative'
;
--
source
include
/
start_slave
.
inc
--
echo
***
MDEV
-
7847
:
"Slave worker thread retried transaction 10 time(s) in vain, giving up"
,
followed
by
replication
hanging
***
--
echo
***
MDEV
-
7882
:
Excessive
transaction
retry
in
parallel
replication
***
--
connection
server_1
CREATE
TABLE
t7
(
a
int
PRIMARY
KEY
,
b
INT
)
ENGINE
=
InnoDB
;
CREATE
TABLE
t8
(
a
int
PRIMARY
KEY
,
b
INT
)
ENGINE
=
InnoDB
;
--
save_master_pos
--
connection
server_2
--
sync_with_master
--
source
include
/
stop_slave
.
inc
SET
GLOBAL
slave_parallel_threads
=
40
;
SELECT
@
old_retries
:=@@
GLOBAL
.
slave_transaction_retries
;
SET
GLOBAL
slave_transaction_retries
=
5
;
# Using dbug error injection, we artificially create event groups with a lot of
# conflicting transactions in each event group. The bugs were originally seen
# "in the wild" with transactions that did not conflict on the master, and only
# conflicted very rarely on the slave (maybe some edge case with InnoDB btree
# page splits or something like that). The event groups here loosely reflect
# the structure of the original failure's group commits.
--
connection
server_1
INSERT
INTO
t7
VALUES
(
1
,
1
),
(
2
,
2
),
(
3
,
3
),
(
4
,
4
),
(
5
,
5
);
SET
@
old_dbug
=
@@
SESSION
.
debug_dbug
;
SET
@
commit_id
=
42
;
SET
SESSION
debug_dbug
=
"+d,binlog_force_commit_id"
;
INSERT
INTO
t8
VALUES
(
1
,
1
);
INSERT
INTO
t8
VALUES
(
2
,
2
);
INSERT
INTO
t8
VALUES
(
3
,
3
);
INSERT
INTO
t8
VALUES
(
4
,
4
);
INSERT
INTO
t8
VALUES
(
5
,
5
);
INSERT
INTO
t8
VALUES
(
6
,
6
);
INSERT
INTO
t8
VALUES
(
7
,
7
);
INSERT
INTO
t8
VALUES
(
8
,
8
);
UPDATE
t7
SET
b
=
9
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
10
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
11
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
12
,
12
);
INSERT
INTO
t8
VALUES
(
13
,
13
);
UPDATE
t7
SET
b
=
14
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
15
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
16
,
16
);
UPDATE
t7
SET
b
=
17
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
18
,
18
);
INSERT
INTO
t8
VALUES
(
19
,
19
);
UPDATE
t7
SET
b
=
20
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
21
,
21
);
UPDATE
t7
SET
b
=
22
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
23
,
24
);
INSERT
INTO
t8
VALUES
(
24
,
24
);
UPDATE
t7
SET
b
=
25
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
26
,
26
);
UPDATE
t7
SET
b
=
27
WHERE
a
=
3
;
BEGIN
;
INSERT
INTO
t8
VALUES
(
28
,
28
);
INSERT
INTO
t8
VALUES
(
29
,
28
),
(
30
,
28
);
INSERT
INTO
t8
VALUES
(
31
,
28
);
INSERT
INTO
t8
VALUES
(
32
,
28
);
INSERT
INTO
t8
VALUES
(
33
,
28
);
INSERT
INTO
t8
VALUES
(
34
,
28
);
INSERT
INTO
t8
VALUES
(
35
,
28
);
INSERT
INTO
t8
VALUES
(
36
,
28
);
INSERT
INTO
t8
VALUES
(
37
,
28
);
INSERT
INTO
t8
VALUES
(
38
,
28
);
INSERT
INTO
t8
VALUES
(
39
,
28
);
INSERT
INTO
t8
VALUES
(
40
,
28
);
INSERT
INTO
t8
VALUES
(
41
,
28
);
INSERT
INTO
t8
VALUES
(
42
,
28
);
COMMIT
;
SET
@
commit_id
=
43
;
INSERT
INTO
t8
VALUES
(
43
,
43
);
INSERT
INTO
t8
VALUES
(
44
,
44
);
UPDATE
t7
SET
b
=
45
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
46
,
46
);
INSERT
INTO
t8
VALUES
(
47
,
47
);
UPDATE
t7
SET
b
=
48
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
49
,
49
);
INSERT
INTO
t8
VALUES
(
50
,
50
);
SET
@
commit_id
=
44
;
INSERT
INTO
t8
VALUES
(
51
,
51
);
INSERT
INTO
t8
VALUES
(
52
,
52
);
UPDATE
t7
SET
b
=
53
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
54
,
54
);
INSERT
INTO
t8
VALUES
(
55
,
55
);
UPDATE
t7
SET
b
=
56
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
57
,
57
);
UPDATE
t7
SET
b
=
58
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
58
,
58
);
INSERT
INTO
t8
VALUES
(
59
,
59
);
INSERT
INTO
t8
VALUES
(
60
,
60
);
INSERT
INTO
t8
VALUES
(
61
,
61
);
UPDATE
t7
SET
b
=
62
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
63
,
63
);
INSERT
INTO
t8
VALUES
(
64
,
64
);
INSERT
INTO
t8
VALUES
(
65
,
65
);
INSERT
INTO
t8
VALUES
(
66
,
66
);
UPDATE
t7
SET
b
=
67
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
68
,
68
);
UPDATE
t7
SET
b
=
69
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
70
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
71
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
72
,
72
);
UPDATE
t7
SET
b
=
73
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
74
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
75
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
76
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
77
,
77
);
UPDATE
t7
SET
b
=
78
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
79
,
79
);
UPDATE
t7
SET
b
=
80
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
81
,
81
);
UPDATE
t7
SET
b
=
82
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
83
,
83
);
UPDATE
t7
SET
b
=
84
WHERE
a
=
3
;
SET
@
commit_id
=
45
;
INSERT
INTO
t8
VALUES
(
85
,
85
);
UPDATE
t7
SET
b
=
86
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
87
,
87
);
SET
@
commit_id
=
46
;
INSERT
INTO
t8
VALUES
(
88
,
88
);
INSERT
INTO
t8
VALUES
(
89
,
89
);
INSERT
INTO
t8
VALUES
(
90
,
90
);
SET
SESSION
debug_dbug
=@
old_dbug
;
INSERT
INTO
t8
VALUES
(
91
,
91
);
INSERT
INTO
t8
VALUES
(
92
,
92
);
INSERT
INTO
t8
VALUES
(
93
,
93
);
INSERT
INTO
t8
VALUES
(
94
,
94
);
INSERT
INTO
t8
VALUES
(
95
,
95
);
INSERT
INTO
t8
VALUES
(
96
,
96
);
INSERT
INTO
t8
VALUES
(
97
,
97
);
INSERT
INTO
t8
VALUES
(
98
,
98
);
INSERT
INTO
t8
VALUES
(
99
,
99
);
SELECT
*
FROM
t7
ORDER
BY
a
;
SELECT
*
FROM
t8
ORDER
BY
a
;
--
source
include
/
save_master_gtid
.
inc
--
echo
***
MDEV
-
7888
:
ANALYZE
TABLE
does
wakeup_subsequent_commits
(),
causing
wrong
binlog
order
and
parallel
replication
hang
***
--
connection
server_2
--
connection
server_2
--
source
include
/
start_slave
.
inc
--
source
include
/
sync_with_master_gtid
.
inc
SELECT
*
FROM
t7
ORDER
BY
a
;
SELECT
*
FROM
t8
ORDER
BY
a
;
--
source
include
/
stop_slave
.
inc
--
source
include
/
stop_slave
.
inc
SET
GLOBAL
slave_
transaction_retries
=
@
old_retries
;
SET
GLOBAL
slave_
parallel_mode
=
'conservative'
;
SET
GLOBAL
slave_parallel_threads
=
10
;
SET
GLOBAL
slave_parallel_threads
=
10
;
--
source
include
/
start_slave
.
inc
--
echo
***
MDEV
-
7888
:
ANALYZE
TABLE
does
wakeup_subsequent_commits
(),
causing
wrong
binlog
order
and
parallel
replication
hang
***
--
connection
server_2
--
source
include
/
stop_slave
.
inc
SET
@
old_dbug
=
@@
GLOBAL
.
debug_dbug
;
SET
@
old_dbug
=
@@
GLOBAL
.
debug_dbug
;
SET
GLOBAL
debug_dbug
=
'+d,inject_analyze_table_sleep'
;
SET
GLOBAL
debug_dbug
=
'+d,inject_analyze_table_sleep'
;
...
@@ -2380,62 +2176,6 @@ SET GLOBAL debug_dbug= @old_debg;
...
@@ -2380,62 +2176,6 @@ SET GLOBAL debug_dbug= @old_debg;
SET
GLOBAL
max_relay_log_size
=
@
old_max
;
SET
GLOBAL
max_relay_log_size
=
@
old_max
;
--
source
include
/
start_slave
.
inc
--
source
include
/
start_slave
.
inc
--
echo
***
MDEV
-
8302
:
Duplicate
key
with
parallel
replication
***
--
connection
server_2
--
source
include
/
stop_slave
.
inc
/* Inject a small sleep which makes the race easier to hit. */
SET
@
old_dbug
=@@
GLOBAL
.
debug_dbug
;
SET
GLOBAL
debug_dbug
=
"+d,inject_mdev8302"
;
--
connection
server_1
INSERT
INTO
t7
VALUES
(
100
,
1
),
(
101
,
2
),
(
102
,
3
),
(
103
,
4
),
(
104
,
5
);
# Artificially create a bunch of group commits with conflicting transactions.
# The bug happened when T1 and T2 was in one group commit, and T3 was in the
# following group commit. T2 is a DELETE of a row with same primary key as a
# row that T3 inserts. T1 and T2 can conflict, causing T2 to be deadlock
# killed after starting to commit. The bug was that T2 could roll back before
# doing unmark_start_commit(); this could allow T3 to run before the retry
# of T2, causing duplicate key violation.
SET
@
old_dbug
=
@@
SESSION
.
debug_dbug
;
SET
@
commit_id
=
20000
;
SET
SESSION
debug_dbug
=
"+d,binlog_force_commit_id"
;
--
let
$n
=
100
--
disable_query_log
while
(
$n
)
{
eval
UPDATE
t7
SET
b
=
b
+
1
WHERE
a
=
100
+
(
$n
MOD
5
);
eval
DELETE
FROM
t7
WHERE
a
=
100
+
(
$n
MOD
5
);
SET
@
commit_id
=
@
commit_id
+
1
;
eval
INSERT
INTO
t7
VALUES
(
100
+
(
$n
MOD
5
),
$n
);
SET
@
commit_id
=
@
commit_id
+
1
;
dec
$n
;
}
--
enable_query_log
SET
SESSION
debug_dbug
=@
old_dbug
;
SELECT
*
FROM
t7
ORDER
BY
a
;
--
source
include
/
save_master_gtid
.
inc
--
connection
server_2
--
source
include
/
start_slave
.
inc
--
source
include
/
sync_with_master_gtid
.
inc
SELECT
*
FROM
t7
ORDER
BY
a
;
--
source
include
/
stop_slave
.
inc
SET
GLOBAL
debug_dbug
=@
old_dbug
;
--
source
include
/
start_slave
.
inc
--
echo
***
MDEV
-
8725
:
Assertion
on
ROLLBACK
statement
in
the
binary
log
***
--
echo
***
MDEV
-
8725
:
Assertion
on
ROLLBACK
statement
in
the
binary
log
***
--
connection
server_1
--
connection
server_1
# Inject an event group terminated by ROLLBACK, by mixing MyISAM and InnoDB
# Inject an event group terminated by ROLLBACK, by mixing MyISAM and InnoDB
...
@@ -2457,7 +2197,6 @@ SELECT * FROM t2 WHERE a>=2000 ORDER BY a;
...
@@ -2457,7 +2197,6 @@ SELECT * FROM t2 WHERE a>=2000 ORDER BY a;
SELECT
*
FROM
t1
WHERE
a
>=
2000
ORDER
BY
a
;
SELECT
*
FROM
t1
WHERE
a
>=
2000
ORDER
BY
a
;
SELECT
*
FROM
t2
WHERE
a
>=
2000
ORDER
BY
a
;
SELECT
*
FROM
t2
WHERE
a
>=
2000
ORDER
BY
a
;
# Clean up.
# Clean up.
--
connection
server_2
--
connection
server_2
--
source
include
/
stop_slave
.
inc
--
source
include
/
stop_slave
.
inc
...
@@ -2467,7 +2206,7 @@ SET DEBUG_SYNC= 'RESET';
...
@@ -2467,7 +2206,7 @@ SET DEBUG_SYNC= 'RESET';
--
connection
server_1
--
connection
server_1
DROP
function
foo
;
DROP
function
foo
;
DROP
TABLE
t1
,
t2
,
t3
,
t4
,
t5
,
t6
,
t7
,
t8
;
DROP
TABLE
t1
,
t2
,
t3
,
t4
,
t5
,
t6
;
SET
DEBUG_SYNC
=
'RESET'
;
SET
DEBUG_SYNC
=
'RESET'
;
--
source
include
/
rpl_end
.
inc
--
source
include
/
rpl_end
.
inc
mysql-test/suite/rpl/t/rpl_parallel_conflicts-slave.opt
0 → 100644
View file @
17622bc0
--slave_parallel_threads=40 --slave_parallel_mode=conservative --slave_transaction_retries=5
mysql-test/suite/rpl/t/rpl_parallel_conflicts.test
0 → 100644
View file @
17622bc0
--
source
include
/
have_innodb
.
inc
--
source
include
/
have_debug
.
inc
--
source
include
/
have_debug_sync
.
inc
--
source
include
/
master
-
slave
.
inc
--
echo
***
MDEV
-
7847
:
"Slave worker thread retried transaction 10 time(s) in vain, giving up"
,
followed
by
replication
hanging
***
--
echo
***
MDEV
-
7882
:
Excessive
transaction
retry
in
parallel
replication
***
--
connection
server_1
ALTER
TABLE
mysql
.
gtid_slave_pos
ENGINE
=
InnoDB
;
CREATE
TABLE
t7
(
a
int
PRIMARY
KEY
,
b
INT
)
ENGINE
=
InnoDB
;
CREATE
TABLE
t8
(
a
int
PRIMARY
KEY
,
b
INT
)
ENGINE
=
InnoDB
;
--
save_master_pos
--
connection
server_2
--
sync_with_master
--
source
include
/
stop_slave
.
inc
# Using dbug error injection, we artificially create event groups with a lot of
# conflicting transactions in each event group. The bugs were originally seen
# "in the wild" with transactions that did not conflict on the master, and only
# conflicted very rarely on the slave (maybe some edge case with InnoDB btree
# page splits or something like that). The event groups here loosely reflect
# the structure of the original failure's group commits.
--
connection
server_1
INSERT
INTO
t7
VALUES
(
1
,
1
),
(
2
,
2
),
(
3
,
3
),
(
4
,
4
),
(
5
,
5
);
SET
@
old_dbug
=
@@
SESSION
.
debug_dbug
;
SET
@
commit_id
=
42
;
SET
SESSION
debug_dbug
=
"+d,binlog_force_commit_id"
;
INSERT
INTO
t8
VALUES
(
1
,
1
);
INSERT
INTO
t8
VALUES
(
2
,
2
);
INSERT
INTO
t8
VALUES
(
3
,
3
);
INSERT
INTO
t8
VALUES
(
4
,
4
);
INSERT
INTO
t8
VALUES
(
5
,
5
);
INSERT
INTO
t8
VALUES
(
6
,
6
);
INSERT
INTO
t8
VALUES
(
7
,
7
);
INSERT
INTO
t8
VALUES
(
8
,
8
);
UPDATE
t7
SET
b
=
9
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
10
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
11
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
12
,
12
);
INSERT
INTO
t8
VALUES
(
13
,
13
);
UPDATE
t7
SET
b
=
14
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
15
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
16
,
16
);
UPDATE
t7
SET
b
=
17
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
18
,
18
);
INSERT
INTO
t8
VALUES
(
19
,
19
);
UPDATE
t7
SET
b
=
20
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
21
,
21
);
UPDATE
t7
SET
b
=
22
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
23
,
24
);
INSERT
INTO
t8
VALUES
(
24
,
24
);
UPDATE
t7
SET
b
=
25
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
26
,
26
);
UPDATE
t7
SET
b
=
27
WHERE
a
=
3
;
BEGIN
;
INSERT
INTO
t8
VALUES
(
28
,
28
);
INSERT
INTO
t8
VALUES
(
29
,
28
),
(
30
,
28
);
INSERT
INTO
t8
VALUES
(
31
,
28
);
INSERT
INTO
t8
VALUES
(
32
,
28
);
INSERT
INTO
t8
VALUES
(
33
,
28
);
INSERT
INTO
t8
VALUES
(
34
,
28
);
INSERT
INTO
t8
VALUES
(
35
,
28
);
INSERT
INTO
t8
VALUES
(
36
,
28
);
INSERT
INTO
t8
VALUES
(
37
,
28
);
INSERT
INTO
t8
VALUES
(
38
,
28
);
INSERT
INTO
t8
VALUES
(
39
,
28
);
INSERT
INTO
t8
VALUES
(
40
,
28
);
INSERT
INTO
t8
VALUES
(
41
,
28
);
INSERT
INTO
t8
VALUES
(
42
,
28
);
COMMIT
;
SET
@
commit_id
=
43
;
INSERT
INTO
t8
VALUES
(
43
,
43
);
INSERT
INTO
t8
VALUES
(
44
,
44
);
UPDATE
t7
SET
b
=
45
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
46
,
46
);
INSERT
INTO
t8
VALUES
(
47
,
47
);
UPDATE
t7
SET
b
=
48
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
49
,
49
);
INSERT
INTO
t8
VALUES
(
50
,
50
);
SET
@
commit_id
=
44
;
INSERT
INTO
t8
VALUES
(
51
,
51
);
INSERT
INTO
t8
VALUES
(
52
,
52
);
UPDATE
t7
SET
b
=
53
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
54
,
54
);
INSERT
INTO
t8
VALUES
(
55
,
55
);
UPDATE
t7
SET
b
=
56
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
57
,
57
);
UPDATE
t7
SET
b
=
58
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
58
,
58
);
INSERT
INTO
t8
VALUES
(
59
,
59
);
INSERT
INTO
t8
VALUES
(
60
,
60
);
INSERT
INTO
t8
VALUES
(
61
,
61
);
UPDATE
t7
SET
b
=
62
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
63
,
63
);
INSERT
INTO
t8
VALUES
(
64
,
64
);
INSERT
INTO
t8
VALUES
(
65
,
65
);
INSERT
INTO
t8
VALUES
(
66
,
66
);
UPDATE
t7
SET
b
=
67
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
68
,
68
);
UPDATE
t7
SET
b
=
69
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
70
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
71
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
72
,
72
);
UPDATE
t7
SET
b
=
73
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
74
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
75
WHERE
a
=
3
;
UPDATE
t7
SET
b
=
76
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
77
,
77
);
UPDATE
t7
SET
b
=
78
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
79
,
79
);
UPDATE
t7
SET
b
=
80
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
81
,
81
);
UPDATE
t7
SET
b
=
82
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
83
,
83
);
UPDATE
t7
SET
b
=
84
WHERE
a
=
3
;
SET
@
commit_id
=
45
;
INSERT
INTO
t8
VALUES
(
85
,
85
);
UPDATE
t7
SET
b
=
86
WHERE
a
=
3
;
INSERT
INTO
t8
VALUES
(
87
,
87
);
SET
@
commit_id
=
46
;
INSERT
INTO
t8
VALUES
(
88
,
88
);
INSERT
INTO
t8
VALUES
(
89
,
89
);
INSERT
INTO
t8
VALUES
(
90
,
90
);
SET
SESSION
debug_dbug
=@
old_dbug
;
INSERT
INTO
t8
VALUES
(
91
,
91
);
INSERT
INTO
t8
VALUES
(
92
,
92
);
INSERT
INTO
t8
VALUES
(
93
,
93
);
INSERT
INTO
t8
VALUES
(
94
,
94
);
INSERT
INTO
t8
VALUES
(
95
,
95
);
INSERT
INTO
t8
VALUES
(
96
,
96
);
INSERT
INTO
t8
VALUES
(
97
,
97
);
INSERT
INTO
t8
VALUES
(
98
,
98
);
INSERT
INTO
t8
VALUES
(
99
,
99
);
SELECT
*
FROM
t7
ORDER
BY
a
;
SELECT
*
FROM
t8
ORDER
BY
a
;
--
source
include
/
save_master_gtid
.
inc
--
connection
server_2
--
source
include
/
start_slave
.
inc
--
source
include
/
sync_with_master_gtid
.
inc
SELECT
*
FROM
t7
ORDER
BY
a
;
SELECT
*
FROM
t8
ORDER
BY
a
;
--
echo
***
MDEV
-
8302
:
Duplicate
key
with
parallel
replication
***
--
connection
server_2
--
source
include
/
stop_slave
.
inc
/* Inject a small sleep which makes the race easier to hit. */
SET
@
old_dbug
=@@
GLOBAL
.
debug_dbug
;
SET
GLOBAL
debug_dbug
=
"+d,inject_mdev8302"
;
--
connection
server_1
INSERT
INTO
t7
VALUES
(
100
,
1
),
(
101
,
2
),
(
102
,
3
),
(
103
,
4
),
(
104
,
5
);
# Artificially create a bunch of group commits with conflicting transactions.
# The bug happened when T1 and T2 was in one group commit, and T3 was in the
# following group commit. T2 is a DELETE of a row with same primary key as a
# row that T3 inserts. T1 and T2 can conflict, causing T2 to be deadlock
# killed after starting to commit. The bug was that T2 could roll back before
# doing unmark_start_commit(); this could allow T3 to run before the retry
# of T2, causing duplicate key violation.
SET
@
old_dbug
=
@@
SESSION
.
debug_dbug
;
SET
@
commit_id
=
20000
;
SET
SESSION
debug_dbug
=
"+d,binlog_force_commit_id"
;
--
let
$n
=
100
--
disable_query_log
while
(
$n
)
{
eval
UPDATE
t7
SET
b
=
b
+
1
WHERE
a
=
100
+
(
$n
MOD
5
);
eval
DELETE
FROM
t7
WHERE
a
=
100
+
(
$n
MOD
5
);
SET
@
commit_id
=
@
commit_id
+
1
;
eval
INSERT
INTO
t7
VALUES
(
100
+
(
$n
MOD
5
),
$n
);
SET
@
commit_id
=
@
commit_id
+
1
;
dec
$n
;
}
--
enable_query_log
SET
SESSION
debug_dbug
=@
old_dbug
;
SELECT
*
FROM
t7
ORDER
BY
a
;
--
source
include
/
save_master_gtid
.
inc
--
connection
server_2
--
source
include
/
start_slave
.
inc
--
source
include
/
sync_with_master_gtid
.
inc
SELECT
*
FROM
t7
ORDER
BY
a
;
--
source
include
/
stop_slave
.
inc
SET
GLOBAL
debug_dbug
=@
old_dbug
;
# Clean up.
--
source
include
/
start_slave
.
inc
SET
DEBUG_SYNC
=
'RESET'
;
--
connection
server_1
DROP
TABLE
t7
,
t8
;
SET
DEBUG_SYNC
=
'RESET'
;
--
source
include
/
rpl_end
.
inc
sql/mysqld.cc
View file @
17622bc0
...
@@ -4340,11 +4340,23 @@ static int init_common_variables()
...
@@ -4340,11 +4340,23 @@ static int init_common_variables()
if
(
get_options
(
&
remaining_argc
,
&
remaining_argv
))
if
(
get_options
(
&
remaining_argc
,
&
remaining_argv
))
return
1
;
return
1
;
set_server_version
();
if
(
IS_SYSVAR_AUTOSIZE
(
&
server_version_ptr
))
set_server_version
(
server_version
,
sizeof
(
server_version
));
if
(
!
opt_abort
)
if
(
!
opt_abort
)
{
if
(
IS_SYSVAR_AUTOSIZE
(
&
server_version_ptr
))
sql_print_information
(
"%s (mysqld %s) starting as process %lu ..."
,
sql_print_information
(
"%s (mysqld %s) starting as process %lu ..."
,
my_progname
,
server_version
,
(
ulong
)
getpid
());
my_progname
,
server_version
,
(
ulong
)
getpid
());
else
{
char
real_server_version
[
SERVER_VERSION_LENGTH
];
set_server_version
(
real_server_version
,
sizeof
(
real_server_version
));
sql_print_information
(
"%s (mysqld %s as %s) starting as process %lu ..."
,
my_progname
,
real_server_version
,
server_version
,
(
ulong
)
getpid
());
}
}
#ifndef EMBEDDED_LIBRARY
#ifndef EMBEDDED_LIBRARY
if
(
opt_abort
&&
!
opt_verbose
)
if
(
opt_abort
&&
!
opt_verbose
)
...
@@ -8571,7 +8583,8 @@ static bool add_many_options(DYNAMIC_ARRAY *options, my_option *list,
...
@@ -8571,7 +8583,8 @@ static bool add_many_options(DYNAMIC_ARRAY *options, my_option *list,
#ifndef EMBEDDED_LIBRARY
#ifndef EMBEDDED_LIBRARY
static
void
print_version
(
void
)
static
void
print_version
(
void
)
{
{
set_server_version
();
if
(
IS_SYSVAR_AUTOSIZE
(
&
server_version_ptr
))
set_server_version
(
server_version
,
sizeof
(
server_version
));
printf
(
"%s Ver %s for %s on %s (%s)
\n
"
,
my_progname
,
printf
(
"%s Ver %s for %s on %s (%s)
\n
"
,
my_progname
,
server_version
,
SYSTEM_TYPE
,
MACHINE_TYPE
,
MYSQL_COMPILATION_COMMENT
);
server_version
,
SYSTEM_TYPE
,
MACHINE_TYPE
,
MYSQL_COMPILATION_COMMENT
);
...
@@ -9680,24 +9693,17 @@ static int get_options(int *argc_ptr, char ***argv_ptr)
...
@@ -9680,24 +9693,17 @@ static int get_options(int *argc_ptr, char ***argv_ptr)
(MYSQL_SERVER_SUFFIX is set by the compilation environment)
(MYSQL_SERVER_SUFFIX is set by the compilation environment)
*/
*/
void
set_server_version
(
void
)
void
set_server_version
(
char
*
buf
,
size_t
size
)
{
{
if
(
!
IS_SYSVAR_AUTOSIZE
(
&
server_version_ptr
))
bool
is_log
=
opt_log
||
global_system_variables
.
sql_log_slow
||
opt_bin_log
;
return
;
bool
is_debug
=
IF_DBUG
(
!
strstr
(
MYSQL_SERVER_SUFFIX_STR
,
"-debug"
),
0
);
char
*
version_end
=
server_version
+
sizeof
(
server_version
)
-
1
;
strxnmov
(
buf
,
size
-
1
,
char
*
end
=
strxnmov
(
server_version
,
sizeof
(
server_version
)
-
1
,
MYSQL_SERVER_VERSION
,
MYSQL_SERVER_VERSION
,
MYSQL_SERVER_SUFFIX_STR
,
NullS
);
MYSQL_SERVER_SUFFIX_STR
,
#ifdef EMBEDDED_LIBRARY
IF_EMBEDDED
(
"-embedded"
,
""
),
end
=
strnmov
(
end
,
"-embedded"
,
(
version_end
-
end
));
is_debug
?
"-debug"
:
""
,
#endif
is_log
?
"-log"
:
""
,
#ifndef DBUG_OFF
NullS
);
if
(
!
strstr
(
MYSQL_SERVER_SUFFIX_STR
,
"-debug"
))
end
=
strnmov
(
end
,
"-debug"
,
(
version_end
-
end
));
#endif
if
(
opt_log
||
global_system_variables
.
sql_log_slow
||
opt_bin_log
)
strnmov
(
end
,
"-log"
,
(
version_end
-
end
));
// This may slow down system
*
end
=
0
;
}
}
...
...
sql/mysqld.h
View file @
17622bc0
...
@@ -774,7 +774,7 @@ inline void dec_thread_running()
...
@@ -774,7 +774,7 @@ inline void dec_thread_running()
thread_safe_decrement32
(
&
thread_running
);
thread_safe_decrement32
(
&
thread_running
);
}
}
extern
void
set_server_version
(
void
);
extern
void
set_server_version
(
char
*
buf
,
size_t
size
);
#if defined(MYSQL_DYNAMIC_PLUGIN) && defined(_WIN32)
#if defined(MYSQL_DYNAMIC_PLUGIN) && defined(_WIN32)
extern
"C"
THD
*
_current_thd_noinline
();
extern
"C"
THD
*
_current_thd_noinline
();
...
...
sql/signal_handler.cc
View file @
17622bc0
...
@@ -107,6 +107,7 @@ extern "C" sig_handler handle_fatal_signal(int sig)
...
@@ -107,6 +107,7 @@ extern "C" sig_handler handle_fatal_signal(int sig)
"diagnose the problem, but since we have already crashed,
\n
"
"diagnose the problem, but since we have already crashed,
\n
"
"something is definitely wrong and this may fail.
\n\n
"
);
"something is definitely wrong and this may fail.
\n\n
"
);
set_server_version
(
server_version
,
sizeof
(
server_version
));
my_safe_printf_stderr
(
"Server version: %s
\n
"
,
server_version
);
my_safe_printf_stderr
(
"Server version: %s
\n
"
,
server_version
);
if
(
dflt_key_cache
)
if
(
dflt_key_cache
)
...
...
storage/innobase/handler/ha_innodb.cc
View file @
17622bc0
...
@@ -4257,6 +4257,7 @@ innobase_commit(
...
@@ -4257,6 +4257,7 @@ innobase_commit(
trx_t
*
trx
;
trx_t
*
trx
;
DBUG_ENTER
(
"innobase_commit"
);
DBUG_ENTER
(
"innobase_commit"
);
DBUG_PRINT
(
"enter"
,
(
"commit_trx: %d"
,
commit_trx
));
DBUG_ASSERT
(
hton
==
innodb_hton_ptr
);
DBUG_ASSERT
(
hton
==
innodb_hton_ptr
);
DBUG_PRINT
(
"trans"
,
(
"ending transaction"
));
DBUG_PRINT
(
"trans"
,
(
"ending transaction"
));
...
...
storage/innobase/log/log0log.cc
View file @
17622bc0
...
@@ -1268,6 +1268,10 @@ log_group_file_header_flush(
...
@@ -1268,6 +1268,10 @@ log_group_file_header_flush(
}
}
#endif
/* UNIV_DEBUG */
#endif
/* UNIV_DEBUG */
if
(
log_do_write
)
{
if
(
log_do_write
)
{
DBUG_PRINT
(
"ib_log"
,
(
"write "
LSN_PF
" group "
ULINTPF
" file "
ULINTPF
" header"
,
start_lsn
,
group
->
id
,
nth_file
));
log_sys
->
n_log_ios
++
;
log_sys
->
n_log_ios
++
;
MONITOR_INC
(
MONITOR_LOG_IO
);
MONITOR_INC
(
MONITOR_LOG_IO
);
...
@@ -1539,6 +1543,9 @@ log_write_up_to(
...
@@ -1539,6 +1543,9 @@ log_write_up_to(
return
;
return
;
}
}
DBUG_PRINT
(
"ib_log"
,
(
"write "
LSN_PF
" to "
LSN_PF
,
log_sys
->
written_to_all_lsn
,
log_sys
->
lsn
));
#ifdef UNIV_DEBUG
#ifdef UNIV_DEBUG
if
(
log_debug_writes
)
{
if
(
log_debug_writes
)
{
fprintf
(
stderr
,
fprintf
(
stderr
,
...
...
storage/innobase/trx/trx0trx.cc
View file @
17622bc0
...
@@ -1138,6 +1138,7 @@ trx_flush_log_if_needed_low(
...
@@ -1138,6 +1138,7 @@ trx_flush_log_if_needed_low(
lsn_t
lsn
)
/*!< in: lsn up to which logs are to be
lsn_t
lsn
)
/*!< in: lsn up to which logs are to be
flushed. */
flushed. */
{
{
DBUG_ENTER
(
"trx_flush_log_if_needed_low"
);
switch
(
srv_flush_log_at_trx_commit
)
{
switch
(
srv_flush_log_at_trx_commit
)
{
case
0
:
case
0
:
/* Do nothing */
/* Do nothing */
...
@@ -1156,6 +1157,7 @@ trx_flush_log_if_needed_low(
...
@@ -1156,6 +1157,7 @@ trx_flush_log_if_needed_low(
default:
default:
ut_error
;
ut_error
;
}
}
DBUG_VOID_RETURN
;
}
}
/**********************************************************************//**
/**********************************************************************//**
...
@@ -1690,15 +1692,17 @@ trx_commit_complete_for_mysql(
...
@@ -1690,15 +1692,17 @@ trx_commit_complete_for_mysql(
trx_t
*
trx
)
/*!< in/out: transaction */
trx_t
*
trx
)
/*!< in/out: transaction */
{
{
ut_a
(
trx
);
ut_a
(
trx
);
DBUG_ENTER
(
"trx_commit_complete_for_mysql"
);
if
(
!
trx
->
must_flush_log_later
if
(
!
trx
->
must_flush_log_later
||
(
srv_flush_log_at_trx_commit
==
1
&&
trx
->
active_commit_ordered
))
{
||
(
srv_flush_log_at_trx_commit
==
1
&&
trx
->
active_commit_ordered
))
{
return
;
DBUG_VOID_RETURN
;
}
}
trx_flush_log_if_needed
(
trx
->
commit_lsn
,
trx
);
trx_flush_log_if_needed
(
trx
->
commit_lsn
,
trx
);
trx
->
must_flush_log_later
=
FALSE
;
trx
->
must_flush_log_later
=
FALSE
;
DBUG_VOID_RETURN
;
}
}
/**********************************************************************//**
/**********************************************************************//**
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment