2
# Test file for InnoDB tests that require the debug sync facility
4
--source include/have_innodb.inc
5
--source include/have_debug.inc
6
--source include/have_debug_sync.inc
7
# Save the initial number of concurrent sessions.
8
--source include/count_sessions.inc
12
--echo # Bug 42074 concurrent optimize table and
13
--echo # alter table = Assertion failed: thd->is_error()
17
DROP TABLE IF EXISTS t1;
20
--echo # Create InnoDB table
21
CREATE TABLE t1 (id INT) engine=innodb;
22
connect (con2, localhost, root);
25
--echo # Start optimizing table
27
SET DEBUG_SYNC='ha_admin_try_alter SIGNAL optimize_started WAIT_FOR table_altered';
28
--send OPTIMIZE TABLE t1
31
--echo # Change table to engine=memory
33
SET DEBUG_SYNC='now WAIT_FOR optimize_started';
34
ALTER TABLE t1 engine=memory;
35
SET DEBUG_SYNC='now SIGNAL table_altered';
38
--echo # Complete optimization
44
SET DEBUG_SYNC='RESET';
48
--echo # Bug#47459 Assertion in Diagnostics_area::set_eof_status on
49
--echo # OPTIMIZE TABLE
53
DROP TABLE IF EXISTS t1;
56
connect (con1, localhost, root);
59
CREATE TABLE t1(a INT) ENGINE= InnoDB;
61
--echo # Connection con1
63
SET DEBUG_SYNC= "ha_admin_open_ltable SIGNAL opening WAIT_FOR dropped";
65
--send OPTIMIZE TABLE t1
67
--echo # Connection default
69
SET DEBUG_SYNC= "now WAIT_FOR opening";
71
SET DEBUG_SYNC= "now SIGNAL dropped";
73
--echo # Connection con1
75
--echo # Reaping: OPTIMIZE TABLE t1
78
--echo # Connection default
81
SET DEBUG_SYNC= "RESET";
85
--echo # Bug#53757 assert in mysql_truncate_by_delete
89
DROP TABLE IF EXISTS t1, t2;
92
CREATE TABLE t1(a INT) Engine=InnoDB;
93
CREATE TABLE t2(id INT);
94
INSERT INTO t1 VALUES (1), (2);
96
connect (con1, localhost, root);
97
INSERT INTO t2 VALUES(connection_id());
98
SET DEBUG_SYNC= "open_and_process_table SIGNAL opening WAIT_FOR killed";
99
--echo # Sending: (not reaped since connection is killed later)
103
SET DEBUG_SYNC= "now WAIT_FOR opening";
104
SELECT ((@id := id) - id) FROM t2;
106
SET DEBUG_SYNC= "now SIGNAL killed";
109
--source include/wait_until_count_sessions.inc
110
SET DEBUG_SYNC= "RESET";
114
--echo # Bug#58933 Assertion `thd- >is_error()' fails on shutdown with ongoing
115
--echo # OPTIMIZE TABLE
119
DROP TABLE IF EXISTS t1;
122
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
123
INSERT INTO t1 VALUES (1), (2);
125
--echo # Connection con1
126
connect (con1,localhost,root);
127
let $ID= `SELECT connection_id()`;
128
SET DEBUG_SYNC= 'ha_admin_open_ltable SIGNAL waiting WAIT_FOR killed';
130
--send OPTIMIZE TABLE t1
132
--echo # Connection default
134
SET DEBUG_SYNC= 'now WAIT_FOR waiting';
135
--replace_result $ID ID
137
SET DEBUG_SYNC= 'now SIGNAL killed';
139
--echo # Connection con1
141
--echo # Reaping: OPTIMIZE TABLE t1
144
--echo # Connection default
147
SET DEBUG_SYNC= 'RESET';
152
--echo # Bug#42230 during add index, cannot do queries on storage engines
153
--echo # that implement add_index
157
DROP DATABASE IF EXISTS db1;
158
DROP TABLE IF EXISTS t1;
161
connect(con1,localhost,root);
162
connect(con2,localhost,root);
164
--echo # Test 1: Secondary index, should not block reads (original test case).
166
--echo # Connection default
169
CREATE TABLE db1.t1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT) engine=innodb;
170
INSERT INTO db1.t1(value) VALUES (1), (2);
171
SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query";
173
--send ALTER TABLE db1.t1 ADD INDEX(value)
175
--echo # Connection con1
177
SET DEBUG_SYNC= "now WAIT_FOR manage";
178
# Neither of these two statements should be blocked
181
SET DEBUG_SYNC= "now SIGNAL query";
183
--echo # Connection default
185
--echo # Reaping: ALTER TABLE db1.t1 ADD INDEX(value)
189
--echo # Test 2: Primary index (implicit), should block reads.
191
CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb;
192
SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query";
194
--send ALTER TABLE t1 ADD UNIQUE INDEX(a)
196
--echo # Connection con1
198
SET DEBUG_SYNC= "now WAIT_FOR manage";
201
--send SELECT * FROM t1
203
--echo # Connection con2
205
--echo # Waiting for SELECT to be blocked by the metadata lock on t1
206
let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist
207
WHERE state= 'Waiting for table metadata lock'
208
AND info='SELECT * FROM t1';
209
--source include/wait_condition.inc
210
SET DEBUG_SYNC= "now SIGNAL query";
212
--echo # Connection default
214
--echo # Reaping: ALTER TABLE t1 ADD UNIQUE INDEX(a)
217
--echo # Connection con1
219
--echo # Reaping: SELECT * FROM t1
222
--echo # Test 3: Primary index (explicit), should block reads.
224
--echo # Connection default
226
ALTER TABLE t1 DROP INDEX a;
227
SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query";
229
--send ALTER TABLE t1 ADD PRIMARY KEY (a)
231
--echo # Connection con1
233
SET DEBUG_SYNC= "now WAIT_FOR manage";
235
--send SELECT * FROM t1
237
--echo # Connection con2
239
--echo # Waiting for SELECT to be blocked by the metadata lock on t1
240
let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist
241
WHERE state= 'Waiting for table metadata lock'
242
AND info='SELECT * FROM t1';
243
--source include/wait_condition.inc
244
SET DEBUG_SYNC= "now SIGNAL query";
246
--echo # Connection default
248
--echo # Reaping: ALTER TABLE t1 ADD PRIMARY KEY (a)
251
--echo # Connection con1
253
--echo # Reaping: SELECT * FROM t1
256
--echo # Test 4: Secondary unique index, should not block reads.
258
--echo # Connection default
260
SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query";
262
--send ALTER TABLE t1 ADD UNIQUE (b)
264
--echo # Connection con1
266
SET DEBUG_SYNC= "now WAIT_FOR manage";
268
SET DEBUG_SYNC= "now SIGNAL query";
270
--echo # Connection default
272
--echo # Reaping: ALTER TABLE t1 ADD UNIQUE (b)
277
SET DEBUG_SYNC= "RESET";
282
--echo # Bug#11853126 RE-ENABLE CONCURRENT READS WHILE CREATING SECONDARY INDEX
287
DROP TABLE IF EXISTS t1;
290
CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb;
291
INSERT INTO t1 VALUES (1, 12345), (2, 23456);
293
--echo # Connection con1
294
--connect (con1,localhost,root)
295
SET SESSION debug_dbug= "+d,alter_table_rollback_new_index";
296
--error ER_UNKNOWN_ERROR
297
ALTER TABLE t1 ADD PRIMARY KEY(a);
300
--echo # Connection default
307
# Check that all connections opened by test cases in this file are really
308
# gone so execution of other tests won't be affected by their presence.
309
--source include/wait_until_count_sessions.inc