1
0
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:
unknown
2014-04-23 16:06:06 +02:00
parent f9e5f237f0
commit 010971a761
7 changed files with 186 additions and 47 deletions

View 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