1# Test the markings on GTID events (ddl, waited, trans,
2# @@skip_parallel_replication) that are used to control parallel
3# replication on the slave.
4
5--source include/have_innodb.inc
6
7RESET MASTER;
8--source include/wait_for_binlog_checkpoint.inc
9
10CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
11--let $binlog_pos1=query_get_value(SHOW MASTER STATUS, Position, 1)
12/* GTID */ INSERT INTO t1 VALUES (1,0);
13/* GTID */ BEGIN;
14/* GTID */ INSERT INTO t1 VALUES (2,0);
15/* GTID */ ALTER TABLE t1 ADD c INT;
16/* GTID */ INSERT INTO t1 VALUES (3,0,0);
17/* GTID */ COMMIT;
18/* GTID */ BEGIN;
19/* GTID */ UPDATE t1 SET b=1, c=1 WHERE a=2;
20/* GTID */ CREATE TEMPORARY TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
21/* GTID */ INSERT INTO t2 VALUES (4,10), (5,20);
22/* GTID */ INSERT INTO t1 SELECT a, 2, b FROM t2;
23/* GTID */ DROP TEMPORARY TABLE t2;
24/* GTID */ INSERT INTO t1 VALUES (6, 3, 0);
25/* GTID */ COMMIT;
26/* GTID */ CREATE TEMPORARY TABLE t3 (a INT PRIMARY KEY) ENGINE=InnoDB;
27/* GTID */ BEGIN;
28/* GTID */ DELETE FROM t1 WHERE a=5;
29/* GTID */ INSERT INTO t3 VALUES (7);
30/* GTID */ INSERT INTO t1 SELECT a, 4, 0 FROM t3;
31/* GTID */ UPDATE t1 SET c=1 WHERE a=7;
32/* GTID */ DROP TEMPORARY TABLE t3;
33/* GTID */ COMMIT;
34/* GTID */ CREATE TEMPORARY TABLE t4 (a INT PRIMARY KEY) ENGINE=InnoDB;
35/* GTID */ BEGIN;
36/* GTID */ INSERT INTO t1 VALUES (8, 5, 0);
37/* GTID */ ALTER TABLE t4 ADD b INT;
38/* GTID */ INSERT INTO t1 VALUES (9, 5, 1);
39/* GTID */ COMMIT;
40connect (tmp_con,localhost,root,,);
41/* GTID */ INSERT INTO t1 VALUES (10, 6, 0);
42/* GTID */ BEGIN;
43/* GTID */ CREATE TEMPORARY TABLE t5 (a INT PRIMARY KEY) ENGINE=InnoDB;
44/* GTID */ INSERT INTO t1 VALUES (11, 7, 0);
45/* GTID */ COMMIT;
46--let $before_drop_pos=query_get_value(SHOW MASTER STATUS, Position, 1)
47disconnect tmp_con;
48connection default;
49
50# We need to wait for the implicit DROP TEMPORARY TABLE to be logged after
51# tmp_con disconnect, otherwise we get sporadic test failures.
52# MDEV-20091: DROP TEMPORARY TABLE IF EXISTS statements will be written to
53# binlog only if the corresponding temporary table exists. In row based
54# replication temporary tables are not replicated hence their corresponding
55# DROP TEMPORARY TABLE statement will be not be written to binary log upon
56# session closure.
57
58if (!`SELECT @@BINLOG_FORMAT = 'ROW'`) {
59--let $wait_condition= SELECT variable_value > $before_drop_pos FROM information_schema.global_status WHERE variable_name = 'binlog_snapshot_position'
60--source include/wait_condition.inc
61}
62--let $binlog_pos2=query_get_value(SHOW MASTER STATUS, Position, 1)
63
64--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
65FLUSH LOGS;
66
67--let $MYSQLD_DATADIR= `select @@datadir`
68--let $file= $MYSQLTEST_VARDIR/tmp/binlog_parallel_replication_marks.out
69--let OUTPUT_FILE=$file
70exec $MYSQL_BINLOG --start_position=$binlog_pos1 --stop_position=$binlog_pos2 $MYSQLD_DATADIR/$binlog_file > $file;
71
72perl;
73my $file= $ENV{'OUTPUT_FILE'};
74open F, "<", $file
75  or die "Unable to open file '$file': $!\n";
76while (<F>) {
77  s/^#\d+ +\d+:\d+:\d+ /# /;
78  s/GTID \d+-\d+-\d+/GTID #-#-#/;
79  s/end_log_pos \d+/end_log_pos #/;
80  s/table id \d+/table id #/;
81  s/mapped to number \d+/mapped to number #/;
82  s/CRC32 0x[0-9a-f]+/CRC32 0x########/;
83  print if /\b(GTID|START TRANSACTION|COMMIT|Table_map|Write_rows|Update_rows|Delete_rows|generated by server|40005 TEMPORARY)\b/;
84}
85close F;
86EOF
87
88DROP TABLE t1;
89