File: gr_garbage_collect_sequence_number.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 (225 lines) | stat: -rw-r--r-- 7,420 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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
################################################################################
# This test proves that sequence number gap is not generated when certification
# garbage collector runs.
#
# Test:
# 0. The test requires two servers: M1 and M2.
# 1. Add debug point to reduce certifier broadcast time to 1 second.
#    Bootstrap M1 and join M2.
# 2. Insert 5 rows.
#    Wait for garbage collector to run for every insert.
# 3. Assert sequence numbers and last_committed are correct.
#    Verify no gaps in sequence number.
# 4. Run 5 DDLs.
#    Wait for garbage collector to run for every statement.
# 5. Assert sequence numbers and last_committed are correct.
#    Verify no gaps in sequence number.
# 6. Stop the group.
# 7. Add debug point to disable certification info garbage collection.
#    Bootstrap M1 and join M2.
# 8. Insert 10 rows.
# 9. Run 5 DDLs.
# 10. Cleanup.
################################################################################

--source include/have_debug.inc
--source include/have_debug_sync.inc
--source include/have_group_replication_plugin.inc
--let $rpl_skip_group_replication_start= 1
--let $rpl_group_replication_single_primary_mode=1
--source include/group_replication.inc

--echo #################################################################
--echo # 1. Add debug point to reduce certifier broadcast time to 1 second.
--echo #    Bootstrap M1 and join M2.

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

SET @@GLOBAL.DEBUG= '+d,group_replication_certifier_broadcast_thread_short_period';

--source include/start_and_bootstrap_group_replication.inc

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

SET @@GLOBAL.DEBUG= '+d,group_replication_certifier_broadcast_thread_short_period';
SET @@GLOBAL.DEBUG= '+d,group_replication_certifier_garbage_collection_ran';

--source include/start_group_replication.inc

--echo #################################################################
--echo # 2. Insert 5 rows.
--echo #    Wait for garbage collector to run for every insert.

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

CREATE TABLE t1(c1 INT PRIMARY KEY);

--let $i=1
while($i < 6)
{
  --let $rpl_connection_name= server2
  --source include/rpl_connection.inc

  SET DEBUG_SYNC= "now WAIT_FOR signal.group_replication_certifier_garbage_collection_finished";

  --let $rpl_connection_name= server1
  --source include/rpl_connection.inc

  --eval INSERT INTO t1 VALUES ($i)
  --inc $i
}
--source include/rpl_sync.inc

--echo #################################################################
--echo # 3. Assert sequence numbers and last_committed are correct.
--echo #    Verify no gaps in sequence number.

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

--let $binlog_file= server-relay-log-group_replication_applier.000002
--let $logical_timestamps= 0 0;1 2;2 3;3 4;4 5;5 6;6 7
--source include/assert_logical_timestamps.inc

--echo #################################################################
--echo # 4. Run 5 DDLs.
--echo #    Wait for garbage collector to run for every statement.

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--let $i=1
while($i < 6)
{
  --let $rpl_connection_name= server2
  --source include/rpl_connection.inc

  SET DEBUG_SYNC= "now WAIT_FOR signal.group_replication_certifier_garbage_collection_finished";

  --let $rpl_connection_name= server1
  --source include/rpl_connection.inc

  --eval CREATE TABLE tt$i(c1 INT PRIMARY KEY)
  --inc $i
}
--source include/rpl_sync.inc

--echo #################################################################
--echo # 5. Assert sequence numbers and last_committed are correct.
--echo #    Verify no gaps in sequence number.

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

--let $binlog_file= server-relay-log-group_replication_applier.000002
--let $logical_timestamps= 0 0;1 2;2 3;3 4;4 5;5 6;6 7;7 8;8 9;9 10;10 11;11 12
--source include/assert_logical_timestamps.inc

--echo #################################################################
--echo # 6. Stop the group.

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

--source include/stop_group_replication.inc
SET @@GLOBAL.DEBUG= '-d,group_replication_certifier_garbage_collection_ran';
SET @@GLOBAL.DEBUG= '-d,group_replication_certifier_broadcast_thread_short_period';
SET DEBUG_SYNC= 'RESET';

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--source include/stop_group_replication.inc
SET @@GLOBAL.DEBUG= '-d,group_replication_certifier_broadcast_thread_short_period';


--echo #################################################################
--echo # 7. Add debug point to disable certification info garbage collection.
--echo #    Bootstrap M1 and join M2.

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

SET @@GLOBAL.DEBUG= '+d,group_replication_do_not_clear_certification_database';
SET @@GLOBAL.DEBUG= '+d,group_replication_certifier_broadcast_thread_big_period';
--source include/start_and_bootstrap_group_replication.inc

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

SET @@GLOBAL.DEBUG= '+d,group_replication_do_not_clear_certification_database';
SET @@GLOBAL.DEBUG= '+d,group_replication_certifier_broadcast_thread_big_period';
--source include/start_group_replication.inc

--echo #################################################################
--echo # 8. Insert 10 rows.

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--let $i=6
while($i < 16)
{
  --let $rpl_connection_name= server1
  --source include/rpl_connection.inc

  --eval INSERT INTO test.t1 VALUES ($i)
  --inc $i
}
--source include/rpl_sync.inc

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

--let $binlog_file= server-relay-log-group_replication_applier.000003
--let $logical_timestamps= 0 0;1 2;1 3;1 4;1 5;1 6;1 7;1 8;1 9;1 10;1 11
--source include/assert_logical_timestamps.inc

--echo #################################################################
--echo # 9. Run 5 DDLs.

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--let $i=1
while($i < 6)
{
  --eval DROP TABLE tt$i
  --inc $i
}
--source include/rpl_sync.inc

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

--let $binlog_file= server-relay-log-group_replication_applier.000003
--let $logical_timestamps= 0 0;1 2;1 3;1 4;1 5;1 6;1 7;1 8;1 9;1 10;1 11;11 12;12 13;13 14;14 15;15 16
--source include/assert_logical_timestamps.inc

--echo #################################################################
--echo # 10. Cleanup.

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

DROP TABLE t1;
--source include/rpl_sync.inc

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

--source include/stop_group_replication.inc
SET @@GLOBAL.DEBUG= '-d,group_replication_do_not_clear_certification_database';
SET @@GLOBAL.DEBUG= '-d,group_replication_certifier_broadcast_thread_big_period';

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--source include/stop_group_replication.inc
SET @@GLOBAL.DEBUG= '-d,group_replication_do_not_clear_certification_database';
SET @@GLOBAL.DEBUG= '-d,group_replication_certifier_broadcast_thread_big_period';

--source include/group_replication_end.inc