File: rpl_parallel_temp_query.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (204 lines) | stat: -rw-r--r-- 4,345 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
#
# WL#5569 MTS
#
# The test verifies correctness of Query events parallelization.
#

--source include/not_group_replication_plugin.inc
--source include/have_binlog_format_statement.inc
--source include/master-slave.inc

call mtr.add_suppression('Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.');

let $temp_tables= 16;
let $workers= 4;

connection slave;

flush status; # to nullify Replica_open_temp_tables

# restart in Parallel
source include/stop_slave.inc;
set @save.replica_parallel_workers= @@global.replica_parallel_workers;
eval set @@global.replica_parallel_workers= $workers;

source include/start_slave.inc;

# Two connections each create 2 db:s a regular table and a set of temp tables.
# The temp tables contribute content to the regular tables.
# In the end there must be consistent data on both sides.

connection master;

let $n= `select round($workers/2)`;
let $n1= `select $n`;
while ($n)
{
  eval create database d$n1;
  eval use d$n1;
  eval create table d$n1.t1 (a int auto_increment primary key, b int) engine=innodb;
  let $i= $temp_tables;

--disable_query_log
  while($i)
  {
    let $temp_rows= `select round(rand()*$temp_tables) + 1`;
    let $k= $temp_rows;
    # create makes a table in explicit db
    eval create temporary table d$n1.tt_$i (a int auto_increment primary key);
    while($k)
    {
	eval insert into tt_$i values (null);
	dec $k;
    }
    dec $i;
  }
--enable_query_log

  let $j= `select floor(rand()*$temp_tables) + 1`;
--replace_regex /tt_.*/tt_##/
  eval insert into d$n1.t1 (b) select count(*) from tt_$j;
  dec $n;
  dec $n1;
}

connection master1;

let $n= `select round($workers/2)`;
let $n1= `select 2*$n`;
while ($n)
{
  eval create database d$n1;
  eval use d$n1;
  eval create table d$n1.t1 (a int auto_increment primary key, b int) engine=innodb;
  let $i= $temp_tables;

--disable_query_log
  while($i)
  {
    let $temp_rows= `select round(rand()*$temp_tables) + 1`;
    let $k= $temp_rows;
    # create makes a table in the default db
    eval create temporary table tt_$i (a int auto_increment primary key);
    while($k)
    {
	eval insert into tt_$i values (null);
	dec $k;
    }
    dec $i;
  }
--enable_query_log

  let $j= `select floor(rand()*$temp_tables) + 1`;
--replace_regex /tt_.*/tt_##/
  eval insert into d$n1.t1 (b) select count(*) from tt_$j;
  dec $n;
  dec $n1;
}

--source include/sync_slave_sql_with_master.inc

if (`select variable_value - $workers*$temp_tables as must_be_zero from performance_schema.global_status where variable_name like 'Replica_open_temp_tables'`)
{
   --let $actual_temps= `select variable_value from performance_schema.global_status where variable_name like 'Replica_open_temp_tables'`
   --let $exected= `select  $workers*$temp_tables`
   --echo *** Wrong value of Replica_open_temp_tables: got $actual_temps, expected $expected ***
   --die
}

#
# Consistency check
#

let $n = $workers;
while($n)
{
  let $diff_tables=master:d$n.t1, slave:d$n.t1;
  source include/diff_tables.inc;

  dec $n;
}

#
# cleanup
#
# All temp tables are removed explicitly.
#

connection master;
let $n= `select round($workers/2)`;
let $n1= `select $n`;
while($n)
{
  eval use d$n1;
  let $i= $temp_tables;

--disable_query_log
  while($i)
  {
    eval drop temporary table tt_$i;
    dec $i;
  }
--enable_query_log
  dec $n;
  dec $n1;
}

let $n= `select round($workers/2)`;
let $n1= `select $n`;
while ($n)
{
  eval drop database d$n1;
  dec $n;
  dec $n1;
}

connection master1;

let $n= `select round($workers/2)`;
let $n1= `select 2*$n`;
while ($n)
{
  eval use d$n1;
  let $i= $temp_tables;
--disable_query_log
  while($i)
  {
    eval drop temporary table tt_$i;
    dec $i;
  }
--enable_query_log
  dec $n;
  dec $n1;
}

--source include/sync_slave_sql_with_master.inc
#connection slave;

connection master1;
disconnect master1;

#
# Clean-up
#

connection master;

let $n= `select round($workers/2)`;
let $n1= `select 2*$n`;
while ($n)
{
  eval drop database d$n1;
  dec $n;
  dec $n1;
}

--source include/sync_slave_sql_with_master.inc
source include/stop_slave.inc;

--disable_warnings
set @@global.replica_parallel_workers= @save.replica_parallel_workers;
--enable_warnings
CHANGE REPLICATION SOURCE TO SOURCE_AUTO_POSITION= 0;
--let $rpl_only_running_threads= 1
--source include/rpl_end.inc