mirror of
https://github.com/MariaDB/server.git
synced 2025-02-10 15:35:34 +01:00
![Kristian Nielsen](/assets/img/avatar_default.png)
Fix some random test failures following MDEV-32168 push. Don't blindly set $rpl_only_running_threads in many places. Instead explicit stop only the IO or SQL thread, as appropriate. Setting it interfered with rpl_end.inc in some cases. Rather than clearing it afterwards, better to not set it at all when it is not needed, removing ambiguity in the test about the state of the replication threads. Don't fail the test if include/stop_slave_io.inc finds an error in the IO thread after stop. Such errors can be simply because slave stop happened in the middle of the IO thread's initial communication with the master. Signed-off-by: Kristian Nielsen <knielsen@knielsen-hq.org>
199 lines
6.4 KiB
Text
199 lines
6.4 KiB
Text
include/master-slave.inc
|
|
[connection master]
|
|
# Case 1: UNSAFE
|
|
call mtr.add_suppression("Unsafe statement written to the binary log using statement format");
|
|
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY , b INT,
|
|
UNIQUE(b), c int) engine=innodb;
|
|
connection slave;
|
|
connection master;
|
|
INSERT INTO t1 VALUES (1, 1, 1);
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (2, 1, 2) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c);
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe
|
|
connection master1;
|
|
INSERT INTO t1 VALUES(2, 2, 3) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c);
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe
|
|
connection master;
|
|
COMMIT;
|
|
SELECT * FROM t1;
|
|
a b c
|
|
1 1 2
|
|
2 2 3
|
|
connection slave;
|
|
include/wait_for_slave_sql_error.inc [errno=1062]
|
|
Last_SQL_Error = 'Error 'Duplicate entry '1' for key 'b'' on query. Default database: 'test'. Query: 'INSERT INTO t1 VALUES (2, 1, 2) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c)''
|
|
#Different value from server
|
|
SELECT * FROM t1;
|
|
a b c
|
|
1 1 1
|
|
2 2 3
|
|
include/stop_slave_io.inc
|
|
reset slave;
|
|
connection master;
|
|
reset master;
|
|
drop table t1;
|
|
connection slave;
|
|
start slave;
|
|
include/wait_for_slave_to_start.inc
|
|
# Case 2: UNSAFE
|
|
connection master;
|
|
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY auto_increment, b INT,
|
|
UNIQUE(b), c int) engine=innodb;
|
|
connection slave;
|
|
connection master;
|
|
INSERT INTO t1 VALUES (default, 1, 1);
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (default, 1, 2) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c);
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe
|
|
connection master1;
|
|
INSERT INTO t1 VALUES(default, 2, 3) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c);
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe
|
|
connection master;
|
|
COMMIT;
|
|
SELECT * FROM t1;
|
|
a b c
|
|
1 1 2
|
|
3 2 3
|
|
connection slave;
|
|
#same data as master
|
|
SELECT * FROM t1;
|
|
a b c
|
|
1 1 2
|
|
3 2 3
|
|
connection master;
|
|
drop table t1;
|
|
connection slave;
|
|
# Case 3A: UNSAFE
|
|
connection master;
|
|
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT,
|
|
UNIQUE(b), c int, d int ) engine=innodb;
|
|
connection slave;
|
|
connection master;
|
|
INSERT INTO t1 VALUES (1, 1, 1, 1);
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (2, NULL, 2, 2) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c);
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe
|
|
connection master1;
|
|
INSERT INTO t1 VALUES(3, NULL, 2, 3) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c);
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe
|
|
connection master;
|
|
COMMIT;
|
|
SELECT * FROM t1;
|
|
a b c d
|
|
1 1 1 1
|
|
2 NULL 2 2
|
|
3 NULL 2 3
|
|
connection slave;
|
|
#same data as master
|
|
SELECT * FROM t1;
|
|
a b c d
|
|
1 1 1 1
|
|
2 NULL 2 2
|
|
3 NULL 2 3
|
|
connection master;
|
|
drop table t1;
|
|
connection slave;
|
|
# Case 3B: UNSAFE - all column specified.
|
|
connection master;
|
|
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT,
|
|
UNIQUE(b), c int, d int ) engine=innodb;
|
|
connection slave;
|
|
connection master;
|
|
INSERT INTO t1 VALUES (1, 1, 1, 1);
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (2, NULL, 2, 2) ON DUPLICATE KEY UPDATE c=VALUES(c);
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe
|
|
connection master1;
|
|
INSERT INTO t1 VALUES(3, NULL, 2, 3) ON DUPLICATE KEY UPDATE c=VALUES(c);
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe
|
|
connection master;
|
|
COMMIT;
|
|
SELECT * FROM t1;
|
|
a b c d
|
|
1 1 1 1
|
|
2 NULL 2 2
|
|
3 NULL 2 3
|
|
connection slave;
|
|
#same data as master
|
|
SELECT * FROM t1;
|
|
a b c d
|
|
1 1 1 1
|
|
2 NULL 2 2
|
|
3 NULL 2 3
|
|
connection master;
|
|
drop table t1;
|
|
connection slave;
|
|
# Case 3C: SAFE - only one unique key (PK) specified.
|
|
connection master;
|
|
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT,
|
|
UNIQUE(b), c int, d int ) engine=innodb;
|
|
connection slave;
|
|
connection master;
|
|
INSERT INTO t1 VALUES (1, 1, 1, 1);
|
|
BEGIN;
|
|
INSERT INTO t1 (`a`, `c`, `d`) VALUES (2, 2, 2) ON DUPLICATE KEY UPDATE c=99;
|
|
connection master1;
|
|
INSERT INTO t1 (`a`, `c`, `d`) VALUES(3, 2, 3) ON DUPLICATE KEY UPDATE c=100;
|
|
connection master;
|
|
COMMIT;
|
|
SELECT * FROM t1;
|
|
a b c d
|
|
1 1 1 1
|
|
2 NULL 2 2
|
|
3 NULL 2 3
|
|
connection slave;
|
|
#same data as master
|
|
SELECT * FROM t1;
|
|
a b c d
|
|
1 1 1 1
|
|
2 NULL 2 2
|
|
3 NULL 2 3
|
|
connection master;
|
|
drop table t1;
|
|
connection slave;
|
|
# Case 4: UNSAFE
|
|
connection master;
|
|
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY auto_increment, b INT,
|
|
UNIQUE(b), c int) engine=innodb;
|
|
connection slave;
|
|
connection master;
|
|
INSERT INTO t1 VALUES (1, 1, 1);
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (2, 1, 2) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c);
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe
|
|
connection master1;
|
|
INSERT INTO t1 VALUES(2, 2, 3) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c);
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe
|
|
connection master;
|
|
COMMIT;
|
|
SELECT * FROM t1;
|
|
a b c
|
|
1 1 2
|
|
2 2 3
|
|
connection slave;
|
|
include/wait_for_slave_sql_error.inc [errno=1062]
|
|
Last_SQL_Error = 'Error 'Duplicate entry '1' for key 'b'' on query. Default database: 'test'. Query: 'INSERT INTO t1 VALUES (2, 1, 2) ON DUPLICATE KEY UPDATE b=VALUES(b), c=VALUES(c)''
|
|
#Different value from server
|
|
SELECT * FROM t1;
|
|
a b c
|
|
1 1 1
|
|
2 2 3
|
|
include/stop_slave_io.inc
|
|
reset slave;
|
|
connection master;
|
|
reset master;
|
|
drop table t1;
|
|
connection slave;
|
|
start slave;
|
|
include/wait_for_slave_to_start.inc
|
|
include/rpl_end.inc
|