mirror of
https://github.com/MariaDB/server.git
synced 2025-07-18 23:03:28 +03:00
MDEV-6156: Parallel replication incorrectly caches charset between worker threads
Replication caches the character sets used in a query, to be able to quickly reuse them for the next query in the common case of them not having changed. In parallel replication, this caching needs to be per-worker-thread. The code was not modified to handle this correctly, so the caching in one worker could cause another worker to run a query using the wrong character set, causing replication corruption.
This commit is contained in:
87
mysql-test/suite/rpl/r/rpl_parallel_charset.result
Normal file
87
mysql-test/suite/rpl/r/rpl_parallel_charset.result
Normal file
@ -0,0 +1,87 @@
|
||||
include/rpl_init.inc [topology=1->2]
|
||||
*** MDEV-6156: Parallel replication incorrectly caches charset between worker threads ***
|
||||
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL slave_parallel_threads=5;
|
||||
include/start_slave.inc
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(100) CHARACTER SET utf8);
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` int(11) NOT NULL,
|
||||
`b` varchar(100) CHARACTER SET utf8 DEFAULT NULL,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
SET character_set_client=latin1;
|
||||
INSERT INTO t1 VALUES (1, 'R<>dgr<67>d med fl<66>de 1');
|
||||
INSERT INTO t1 VALUES (2, 'R<>dgr<67>d med fl<66>de 2');
|
||||
INSERT INTO t1 VALUES (3, 'R<>dgr<67>d med fl<66>de 3');
|
||||
INSERT INTO t1 VALUES (4, 'R<>dgr<67>d med fl<66>de 4');
|
||||
INSERT INTO t1 VALUES (5, 'R<>dgr<67>d med fl<66>de 5');
|
||||
INSERT INTO t1 VALUES (6, 'R<>dgr<67>d med fl<66>de 6');
|
||||
INSERT INTO t1 VALUES (7, 'R<>dgr<67>d med fl<66>de 7');
|
||||
INSERT INTO t1 VALUES (8, 'R<>dgr<67>d med fl<66>de 8');
|
||||
INSERT INTO t1 VALUES (9, 'R<>dgr<67>d med fl<66>de 9');
|
||||
INSERT INTO t1 VALUES (10, 'R<>dgr<67>d med fl<66>de 10');
|
||||
SET character_set_client=utf8;
|
||||
INSERT INTO t1 VALUES (11, 'Rødgrød med fløde 1');
|
||||
INSERT INTO t1 VALUES (12, 'Rødgrød med fløde 2');
|
||||
INSERT INTO t1 VALUES (13, 'Rødgrød med fløde 3');
|
||||
INSERT INTO t1 VALUES (14, 'Rødgrød med fløde 4');
|
||||
INSERT INTO t1 VALUES (15, 'Rødgrød med fløde 5');
|
||||
INSERT INTO t1 VALUES (16, 'Rødgrød med fløde 6');
|
||||
INSERT INTO t1 VALUES (17, 'Rødgrød med fløde 7');
|
||||
INSERT INTO t1 VALUES (18, 'Rødgrød med fløde 8');
|
||||
INSERT INTO t1 VALUES (19, 'Rødgrød med fløde 9');
|
||||
INSERT INTO t1 VALUES (20, 'Rødgrød med fløde 10');
|
||||
SET character_set_results=utf8;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 Rødgrød med fløde 1
|
||||
2 Rødgrød med fløde 2
|
||||
3 Rødgrød med fløde 3
|
||||
4 Rødgrød med fløde 4
|
||||
5 Rødgrød med fløde 5
|
||||
6 Rødgrød med fløde 6
|
||||
7 Rødgrød med fløde 7
|
||||
8 Rødgrød med fløde 8
|
||||
9 Rødgrød med fløde 9
|
||||
10 Rødgrød med fløde 10
|
||||
11 Rødgrød med fløde 1
|
||||
12 Rødgrød med fløde 2
|
||||
13 Rødgrød med fløde 3
|
||||
14 Rødgrød med fløde 4
|
||||
15 Rødgrød med fløde 5
|
||||
16 Rødgrød med fløde 6
|
||||
17 Rødgrød med fløde 7
|
||||
18 Rødgrød med fløde 8
|
||||
19 Rødgrød med fløde 9
|
||||
20 Rødgrød med fløde 10
|
||||
SET character_set_results=utf8;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 Rødgrød med fløde 1
|
||||
2 Rødgrød med fløde 2
|
||||
3 Rødgrød med fløde 3
|
||||
4 Rødgrød med fløde 4
|
||||
5 Rødgrød med fløde 5
|
||||
6 Rødgrød med fløde 6
|
||||
7 Rødgrød med fløde 7
|
||||
8 Rødgrød med fløde 8
|
||||
9 Rødgrød med fløde 9
|
||||
10 Rødgrød med fløde 10
|
||||
11 Rødgrød med fløde 1
|
||||
12 Rødgrød med fløde 2
|
||||
13 Rødgrød med fløde 3
|
||||
14 Rødgrød med fløde 4
|
||||
15 Rødgrød med fløde 5
|
||||
16 Rødgrød med fløde 6
|
||||
17 Rødgrød med fløde 7
|
||||
18 Rødgrød med fløde 8
|
||||
19 Rødgrød med fløde 9
|
||||
20 Rødgrød med fløde 10
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL slave_parallel_threads=@old_parallel_threads;
|
||||
include/start_slave.inc
|
||||
DROP TABLE t1;
|
||||
include/rpl_end.inc
|
Reference in New Issue
Block a user