mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
57a267a8c0
The merge is still missing a few hunks related to temporary tables and InnoDB log file size. The associated code did not seem to exist in 10.0, so the merge of that needs more work. Until this is fixed, there are a number of test failures as a result.
267 lines
8.4 KiB
Text
267 lines
8.4 KiB
Text
include/rpl_init.inc [topology=1->2]
|
|
SET @old_parallel_threads=@@GLOBAL.slave_parallel_threads;
|
|
SET GLOBAL slave_parallel_threads=10;
|
|
ERROR HY000: This operation cannot be performed as you have a running slave ''; run STOP SLAVE '' first
|
|
include/stop_slave.inc
|
|
SET GLOBAL slave_parallel_threads=10;
|
|
CHANGE MASTER TO master_use_gtid=slave_pos;
|
|
include/start_slave.inc
|
|
*** Test long-running query in domain 1 can run in parallel with short queries in domain 0 ***
|
|
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);
|
|
LOCK TABLE t1 WRITE;
|
|
SET gtid_domain_id=1;
|
|
INSERT INTO t1 VALUES (2);
|
|
SET gtid_domain_id=0;
|
|
INSERT INTO t2 VALUES (2);
|
|
INSERT INTO t2 VALUES (3);
|
|
BEGIN;
|
|
INSERT INTO t2 VALUES (4);
|
|
INSERT INTO t2 VALUES (5);
|
|
COMMIT;
|
|
INSERT INTO t2 VALUES (6);
|
|
SELECT * FROM t2 ORDER by a;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
SELECT * FROM t1;
|
|
a
|
|
1
|
|
UNLOCK TABLES;
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a
|
|
1
|
|
2
|
|
*** Test two transactions in different domains committed in opposite order on slave but in a single group commit. ***
|
|
include/stop_slave.inc
|
|
SET sql_log_bin=0;
|
|
CREATE FUNCTION foo(x INT, d1 VARCHAR(500), d2 VARCHAR(500))
|
|
RETURNS INT DETERMINISTIC
|
|
BEGIN
|
|
RETURN x;
|
|
END
|
|
||
|
|
SET sql_log_bin=1;
|
|
SET @old_format= @@SESSION.binlog_format;
|
|
SET binlog_format='statement';
|
|
SET gtid_domain_id=1;
|
|
INSERT INTO t2 VALUES (foo(10,
|
|
'commit_before_enqueue SIGNAL ready1 WAIT_FOR cont1',
|
|
'commit_after_release_LOCK_prepare_ordered SIGNAL ready2'));
|
|
FLUSH LOGS;
|
|
SET sql_log_bin=0;
|
|
CREATE FUNCTION foo(x INT, d1 VARCHAR(500), d2 VARCHAR(500))
|
|
RETURNS INT DETERMINISTIC
|
|
BEGIN
|
|
IF d1 != '' THEN
|
|
SET debug_sync = d1;
|
|
END IF;
|
|
IF d2 != '' THEN
|
|
SET debug_sync = d2;
|
|
END IF;
|
|
RETURN x;
|
|
END
|
|
||
|
|
SET sql_log_bin=1;
|
|
SET @old_format=@@GLOBAL.binlog_format;
|
|
SET GLOBAL binlog_format=statement;
|
|
SET GLOBAL slave_parallel_threads=0;
|
|
SET GLOBAL slave_parallel_threads=10;
|
|
include/start_slave.inc
|
|
SET debug_sync='now WAIT_FOR ready1';
|
|
SET gtid_domain_id=2;
|
|
INSERT INTO t2 VALUES (foo(11,
|
|
'commit_before_enqueue SIGNAL ready3 WAIT_FOR cont3',
|
|
'commit_after_release_LOCK_prepare_ordered SIGNAL ready4 WAIT_FOR cont4'));
|
|
SET gtid_domain_id=0;
|
|
SELECT * FROM t2 WHERE a >= 10 ORDER BY a;
|
|
a
|
|
10
|
|
11
|
|
SET debug_sync='now WAIT_FOR ready3';
|
|
SET debug_sync='now SIGNAL cont3';
|
|
SET debug_sync='now WAIT_FOR ready4';
|
|
SET debug_sync='now SIGNAL cont1';
|
|
SET debug_sync='now WAIT_FOR ready2';
|
|
SET debug_sync='now SIGNAL cont4';
|
|
SELECT * FROM t2 WHERE a >= 10 ORDER BY a;
|
|
a
|
|
10
|
|
11
|
|
include/show_binlog_events.inc
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
slave-bin.000002 # Binlog_checkpoint # # slave-bin.000002
|
|
slave-bin.000002 # Gtid # # BEGIN GTID #-#-# cid=#
|
|
slave-bin.000002 # Query # # use `test`; INSERT INTO t2 VALUES (foo(11,
|
|
'commit_before_enqueue SIGNAL ready3 WAIT_FOR cont3',
|
|
'commit_after_release_LOCK_prepare_ordered SIGNAL ready4 WAIT_FOR cont4'))
|
|
slave-bin.000002 # Xid # # COMMIT /* XID */
|
|
slave-bin.000002 # Gtid # # BEGIN GTID #-#-# cid=#
|
|
slave-bin.000002 # Query # # use `test`; INSERT INTO t2 VALUES (foo(10,
|
|
'commit_before_enqueue SIGNAL ready1 WAIT_FOR cont1',
|
|
'commit_after_release_LOCK_prepare_ordered SIGNAL ready2'))
|
|
slave-bin.000002 # Xid # # COMMIT /* XID */
|
|
FLUSH LOGS;
|
|
include/stop_slave.inc
|
|
SET GLOBAL slave_parallel_threads=0;
|
|
SET GLOBAL slave_parallel_threads=10;
|
|
SET debug_sync='RESET';
|
|
include/start_slave.inc
|
|
*** Test that group-committed transactions on the master can replicate in parallel on the slave. ***
|
|
FLUSH LOGS;
|
|
CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
|
INSERT INTO t3 VALUES (1,1), (3,3), (5,5), (7,7);
|
|
BEGIN;
|
|
INSERT INTO t3 VALUES (2,102);
|
|
BEGIN;
|
|
INSERT INTO t3 VALUES (4,104);
|
|
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued1 WAIT_FOR master_cont1';
|
|
SET binlog_format=statement;
|
|
INSERT INTO t3 VALUES (2, foo(12,
|
|
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued1 WAIT_FOR slave_cont1',
|
|
''));
|
|
SET debug_sync='now WAIT_FOR master_queued1';
|
|
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued2';
|
|
SET binlog_format=statement;
|
|
INSERT INTO t3 VALUES (4, foo(14,
|
|
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued2',
|
|
''));
|
|
SET debug_sync='now WAIT_FOR master_queued2';
|
|
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued3';
|
|
SET binlog_format=statement;
|
|
INSERT INTO t3 VALUES (6, foo(16,
|
|
'group_commit_waiting_for_prior SIGNAL slave_queued3',
|
|
''));
|
|
SET debug_sync='now WAIT_FOR master_queued3';
|
|
SET debug_sync='now SIGNAL master_cont1';
|
|
SELECT * FROM t3 ORDER BY a;
|
|
a b
|
|
1 1
|
|
2 12
|
|
3 3
|
|
4 14
|
|
5 5
|
|
6 16
|
|
7 7
|
|
include/show_binlog_events.inc
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000002 # Binlog_checkpoint # # master-bin.000002
|
|
master-bin.000002 # Gtid # # GTID #-#-#
|
|
master-bin.000002 # Query # # use `test`; CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB
|
|
master-bin.000002 # Gtid # # BEGIN GTID #-#-#
|
|
master-bin.000002 # Query # # use `test`; INSERT INTO t3 VALUES (1,1), (3,3), (5,5), (7,7)
|
|
master-bin.000002 # Xid # # COMMIT /* XID */
|
|
master-bin.000002 # Gtid # # BEGIN GTID #-#-# cid=#
|
|
master-bin.000002 # Query # # use `test`; INSERT INTO t3 VALUES (2, foo(12,
|
|
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued1 WAIT_FOR slave_cont1',
|
|
''))
|
|
master-bin.000002 # Xid # # COMMIT /* XID */
|
|
master-bin.000002 # Gtid # # BEGIN GTID #-#-# cid=#
|
|
master-bin.000002 # Query # # use `test`; INSERT INTO t3 VALUES (4, foo(14,
|
|
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued2',
|
|
''))
|
|
master-bin.000002 # Xid # # COMMIT /* XID */
|
|
master-bin.000002 # Gtid # # BEGIN GTID #-#-# cid=#
|
|
master-bin.000002 # Query # # use `test`; INSERT INTO t3 VALUES (6, foo(16,
|
|
'group_commit_waiting_for_prior SIGNAL slave_queued3',
|
|
''))
|
|
master-bin.000002 # Xid # # COMMIT /* XID */
|
|
SET debug_sync='now WAIT_FOR slave_queued3';
|
|
ROLLBACK;
|
|
SET debug_sync='now WAIT_FOR slave_queued1';
|
|
ROLLBACK;
|
|
SET debug_sync='now WAIT_FOR slave_queued2';
|
|
SET debug_sync='now SIGNAL slave_cont1';
|
|
SELECT * FROM t3 ORDER BY a;
|
|
a b
|
|
1 1
|
|
2 12
|
|
3 3
|
|
4 14
|
|
5 5
|
|
6 16
|
|
7 7
|
|
include/show_binlog_events.inc
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
slave-bin.000003 # Binlog_checkpoint # # slave-bin.000003
|
|
slave-bin.000003 # Gtid # # GTID #-#-#
|
|
slave-bin.000003 # Query # # use `test`; CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB
|
|
slave-bin.000003 # Gtid # # BEGIN GTID #-#-#
|
|
slave-bin.000003 # Query # # use `test`; INSERT INTO t3 VALUES (1,1), (3,3), (5,5), (7,7)
|
|
slave-bin.000003 # Xid # # COMMIT /* XID */
|
|
slave-bin.000003 # Gtid # # BEGIN GTID #-#-# cid=#
|
|
slave-bin.000003 # Query # # use `test`; INSERT INTO t3 VALUES (2, foo(12,
|
|
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued1 WAIT_FOR slave_cont1',
|
|
''))
|
|
slave-bin.000003 # Xid # # COMMIT /* XID */
|
|
slave-bin.000003 # Gtid # # BEGIN GTID #-#-# cid=#
|
|
slave-bin.000003 # Query # # use `test`; INSERT INTO t3 VALUES (4, foo(14,
|
|
'commit_after_release_LOCK_prepare_ordered SIGNAL slave_queued2',
|
|
''))
|
|
slave-bin.000003 # Xid # # COMMIT /* XID */
|
|
slave-bin.000003 # Gtid # # BEGIN GTID #-#-# cid=#
|
|
slave-bin.000003 # Query # # use `test`; INSERT INTO t3 VALUES (6, foo(16,
|
|
'group_commit_waiting_for_prior SIGNAL slave_queued3',
|
|
''))
|
|
slave-bin.000003 # Xid # # COMMIT /* XID */
|
|
*** Test STOP SLAVE in parallel mode ***
|
|
include/stop_slave.inc
|
|
SET binlog_direct_non_transactional_updates=0;
|
|
SET sql_log_bin=0;
|
|
CALL mtr.add_suppression("Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction");
|
|
SET sql_log_bin=1;
|
|
BEGIN;
|
|
INSERT INTO t2 VALUES (20);
|
|
INSERT INTO t1 VALUES (20);
|
|
INSERT INTO t2 VALUES (21);
|
|
INSERT INTO t3 VALUES (20, 20);
|
|
COMMIT;
|
|
INSERT INTO t3 VALUES(21, 21);
|
|
INSERT INTO t3 VALUES(22, 22);
|
|
SET binlog_format=@old_format;
|
|
BEGIN;
|
|
INSERT INTO t2 VALUES (21);
|
|
START SLAVE;
|
|
STOP SLAVE;
|
|
ROLLBACK;
|
|
include/wait_for_slave_to_stop.inc
|
|
SELECT * FROM t1 WHERE a >= 20 ORDER BY a;
|
|
a
|
|
20
|
|
SELECT * FROM t2 WHERE a >= 20 ORDER BY a;
|
|
a
|
|
20
|
|
21
|
|
SELECT * FROM t3 WHERE a >= 20 ORDER BY a;
|
|
a b
|
|
20 20
|
|
include/start_slave.inc
|
|
SELECT * FROM t1 WHERE a >= 20 ORDER BY a;
|
|
a
|
|
20
|
|
SELECT * FROM t2 WHERE a >= 20 ORDER BY a;
|
|
a
|
|
20
|
|
21
|
|
SELECT * FROM t3 WHERE a >= 20 ORDER BY a;
|
|
a b
|
|
20 20
|
|
21 21
|
|
22 22
|
|
include/stop_slave.inc
|
|
SET GLOBAL binlog_format=@old_format;
|
|
SET GLOBAL slave_parallel_threads=0;
|
|
SET GLOBAL slave_parallel_threads=10;
|
|
include/start_slave.inc
|
|
include/stop_slave.inc
|
|
SET GLOBAL slave_parallel_threads=@old_parallel_threads;
|
|
include/start_slave.inc
|
|
DROP function foo;
|
|
DROP TABLE t1,t2,t3;
|
|
include/rpl_end.inc
|