~ubuntu-branches/ubuntu/trusty/mysql-5.6/trusty

« back to all changes in this revision

Viewing changes to mysql-test/t/innodb_mysql_sync.test

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-02-12 11:54:27 UTC
  • Revision ID: package-import@ubuntu.com-20140212115427-oq6tfsqxl1wuwehi
Tags: upstream-5.6.15
ImportĀ upstreamĀ versionĀ 5.6.15

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# Test file for InnoDB tests that require the debug sync facility
 
3
#
 
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
 
9
 
 
10
 
 
11
--echo #
 
12
--echo # Bug 42074 concurrent optimize table and 
 
13
--echo # alter table = Assertion failed: thd->is_error()
 
14
--echo #
 
15
 
 
16
--disable_warnings
 
17
DROP TABLE IF EXISTS t1;
 
18
--enable_warnings
 
19
 
 
20
--echo # Create InnoDB table
 
21
CREATE TABLE t1 (id INT) engine=innodb;
 
22
connect (con2, localhost, root);
 
23
 
 
24
--echo # Connection 1
 
25
--echo # Start optimizing table
 
26
connection default;
 
27
SET DEBUG_SYNC='ha_admin_try_alter SIGNAL optimize_started WAIT_FOR table_altered';
 
28
--send OPTIMIZE TABLE t1
 
29
 
 
30
--echo # Connection 2
 
31
--echo # Change table to engine=memory
 
32
connection con2;
 
33
SET DEBUG_SYNC='now WAIT_FOR optimize_started';
 
34
ALTER TABLE t1 engine=memory;
 
35
SET DEBUG_SYNC='now SIGNAL table_altered';
 
36
 
 
37
--echo # Connection 1
 
38
--echo # Complete optimization
 
39
connection default;
 
40
--reap
 
41
 
 
42
disconnect con2;
 
43
DROP TABLE t1;
 
44
SET DEBUG_SYNC='RESET';
 
45
 
 
46
 
 
47
--echo #
 
48
--echo # Bug#47459 Assertion in Diagnostics_area::set_eof_status on
 
49
--echo #           OPTIMIZE TABLE
 
50
--echo #
 
51
 
 
52
--disable_warnings
 
53
DROP TABLE IF EXISTS t1;
 
54
--enable_warnings
 
55
 
 
56
connect (con1, localhost, root);
 
57
connection default;
 
58
 
 
59
CREATE TABLE t1(a INT) ENGINE= InnoDB;
 
60
 
 
61
--echo # Connection con1
 
62
connection con1;
 
63
SET DEBUG_SYNC= "ha_admin_open_ltable SIGNAL opening WAIT_FOR dropped";
 
64
--echo # Sending:
 
65
--send OPTIMIZE TABLE t1
 
66
 
 
67
--echo # Connection default
 
68
connection default;
 
69
SET DEBUG_SYNC= "now WAIT_FOR opening";
 
70
DROP TABLE t1;
 
71
SET DEBUG_SYNC= "now SIGNAL dropped";
 
72
 
 
73
--echo # Connection con1
 
74
connection con1;
 
75
--echo # Reaping: OPTIMIZE TABLE t1
 
76
--reap
 
77
 
 
78
--echo # Connection default
 
79
connection default;
 
80
disconnect con1;
 
81
SET DEBUG_SYNC= "RESET";
 
82
 
 
83
 
 
84
--echo #
 
85
--echo # Bug#53757 assert in mysql_truncate_by_delete
 
86
--echo #
 
87
 
 
88
--disable_warnings
 
89
DROP TABLE IF EXISTS t1, t2;
 
90
--enable_warnings
 
91
 
 
92
CREATE TABLE t1(a INT) Engine=InnoDB;
 
93
CREATE TABLE t2(id INT);
 
94
INSERT INTO t1 VALUES (1), (2);
 
95
 
 
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)
 
100
--send TRUNCATE t1
 
101
 
 
102
connection default;
 
103
SET DEBUG_SYNC= "now WAIT_FOR opening";
 
104
SELECT ((@id := id) - id) FROM t2; 
 
105
KILL @id;
 
106
SET DEBUG_SYNC= "now SIGNAL killed";
 
107
DROP TABLE t1, t2;
 
108
disconnect con1;
 
109
--source include/wait_until_count_sessions.inc
 
110
SET DEBUG_SYNC= "RESET";
 
111
 
 
112
 
 
113
--echo #
 
114
--echo # Bug#58933 Assertion `thd- >is_error()' fails on shutdown with ongoing
 
115
--echo #           OPTIMIZE TABLE
 
116
--echo #
 
117
 
 
118
--disable_warnings
 
119
DROP TABLE IF EXISTS t1;
 
120
--enable_warnings
 
121
 
 
122
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
 
123
INSERT INTO t1 VALUES (1), (2);
 
124
 
 
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';
 
129
--echo # Sending:
 
130
--send OPTIMIZE TABLE t1
 
131
 
 
132
--echo # Connection default
 
133
connection default;
 
134
SET DEBUG_SYNC= 'now WAIT_FOR waiting';
 
135
--replace_result $ID ID
 
136
eval KILL QUERY $ID;
 
137
SET DEBUG_SYNC= 'now SIGNAL killed';
 
138
 
 
139
--echo # Connection con1
 
140
connection con1;
 
141
--echo # Reaping: OPTIMIZE TABLE t1
 
142
--reap
 
143
 
 
144
--echo # Connection default
 
145
connection default;
 
146
DROP TABLE t1;
 
147
SET DEBUG_SYNC= 'RESET';
 
148
disconnect con1;
 
149
 
 
150
 
 
151
--echo #
 
152
--echo # Bug#42230 during add index, cannot do queries on storage engines
 
153
--echo #           that implement add_index
 
154
--echo #
 
155
 
 
156
--disable_warnings
 
157
DROP DATABASE IF EXISTS db1;
 
158
DROP TABLE IF EXISTS t1;
 
159
--enable_warnings
 
160
 
 
161
connect(con1,localhost,root);
 
162
connect(con2,localhost,root);
 
163
 
 
164
--echo # Test 1: Secondary index, should not block reads (original test case).
 
165
 
 
166
--echo # Connection default
 
167
connection default;
 
168
CREATE DATABASE db1;
 
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_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
 
172
--echo # Sending:
 
173
--send ALTER TABLE db1.t1 ADD INDEX(value)
 
174
 
 
175
--echo # Connection con1
 
176
connection con1;
 
177
SET DEBUG_SYNC= "now WAIT_FOR manage";
 
178
# Neither of these two statements should be blocked
 
179
USE db1;
 
180
SELECT * FROM t1;
 
181
SET DEBUG_SYNC= "now SIGNAL query";
 
182
 
 
183
--echo # Connection default
 
184
connection default;
 
185
--echo # Reaping: ALTER TABLE db1.t1 ADD INDEX(value)
 
186
--reap
 
187
DROP DATABASE db1;
 
188
 
 
189
--echo # Test 2: Primary index (implicit), should block writes.
 
190
 
 
191
CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb;
 
192
SET DEBUG_SYNC= "alter_table_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
 
193
--echo # Sending:
 
194
--send ALTER TABLE t1 ADD UNIQUE INDEX(a), LOCK=SHARED
 
195
 
 
196
--echo # Connection con1
 
197
connection con1;
 
198
SET DEBUG_SYNC= "now WAIT_FOR manage";
 
199
USE test;
 
200
SELECT * FROM t1;
 
201
--echo # Sending:
 
202
--send UPDATE t1 SET a=NULL
 
203
 
 
204
--echo # Connection con2
 
205
connection con2;
 
206
--echo # Waiting for SELECT to be blocked by the metadata lock on t1
 
207
let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist
 
208
  WHERE state= 'Waiting for table metadata lock'
 
209
  AND info='UPDATE t1 SET a=NULL';
 
210
--source include/wait_condition.inc
 
211
SET DEBUG_SYNC= "now SIGNAL query";
 
212
 
 
213
--echo # Connection default
 
214
connection default;
 
215
--echo # Reaping: ALTER TABLE t1 ADD UNIQUE INDEX(a)
 
216
--reap
 
217
 
 
218
--echo # Connection con1
 
219
connection con1;
 
220
--echo # Reaping: UPDATE t1 SET a=NULL
 
221
--reap
 
222
 
 
223
--echo # Test 3: Primary index (explicit), should block writes.
 
224
 
 
225
--echo # Connection default
 
226
connection default;
 
227
ALTER TABLE t1 DROP INDEX a;
 
228
SET DEBUG_SYNC= "alter_table_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
 
229
--echo # Sending:
 
230
--send ALTER TABLE t1 ADD PRIMARY KEY (a), LOCK=SHARED
 
231
 
 
232
--echo # Connection con1
 
233
connection con1;
 
234
SET DEBUG_SYNC= "now WAIT_FOR manage";
 
235
SELECT * FROM t1;
 
236
--echo # Sending:
 
237
--send UPDATE t1 SET a=NULL
 
238
 
 
239
--echo # Connection con2
 
240
connection con2;
 
241
--echo # Waiting for SELECT to be blocked by the metadata lock on t1
 
242
let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist
 
243
  WHERE state= 'Waiting for table metadata lock'
 
244
  AND info='UPDATE t1 SET a=NULL';
 
245
--source include/wait_condition.inc
 
246
SET DEBUG_SYNC= "now SIGNAL query";
 
247
 
 
248
--echo # Connection default
 
249
connection default;
 
250
--echo # Reaping: ALTER TABLE t1 ADD PRIMARY KEY (a)
 
251
--reap
 
252
 
 
253
--echo # Connection con1
 
254
connection con1;
 
255
--echo # Reaping: UPDATE t1 SET a=NULL
 
256
--reap
 
257
 
 
258
--echo # Test 4: Secondary unique index, should not block reads.
 
259
 
 
260
--echo # Connection default
 
261
connection default;
 
262
SET DEBUG_SYNC= "alter_table_inplace_after_lock_downgrade SIGNAL manage WAIT_FOR query";
 
263
--echo # Sending:
 
264
--send ALTER TABLE t1 ADD UNIQUE (b)
 
265
 
 
266
--echo # Connection con1
 
267
connection con1;
 
268
SET DEBUG_SYNC= "now WAIT_FOR manage";
 
269
SELECT * FROM t1;
 
270
SET DEBUG_SYNC= "now SIGNAL query";
 
271
 
 
272
--echo # Connection default
 
273
connection default;
 
274
--echo # Reaping: ALTER TABLE t1 ADD UNIQUE (b)
 
275
--reap
 
276
 
 
277
disconnect con1;
 
278
disconnect con2;
 
279
SET DEBUG_SYNC= "RESET";
 
280
DROP TABLE t1;
 
281
 
 
282
 
 
283
--echo #
 
284
--echo # Bug#11853126 RE-ENABLE CONCURRENT READS WHILE CREATING SECONDARY INDEX
 
285
--echo #              IN INNODB
 
286
--echo #
 
287
 
 
288
--disable_warnings
 
289
DROP TABLE IF EXISTS t1;
 
290
--enable_warnings
 
291
 
 
292
CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb;
 
293
INSERT INTO t1 VALUES (1, 12345), (2, 23456);
 
294
 
 
295
--echo # Connection con1
 
296
--connect (con1,localhost,root)
 
297
SET SESSION debug= "+d,alter_table_rollback_new_index";
 
298
--error ER_UNKNOWN_ERROR
 
299
ALTER TABLE t1 ADD PRIMARY KEY(a);
 
300
SELECT * FROM t1;
 
301
 
 
302
--echo # Connection default
 
303
--connection default
 
304
SELECT * FROM t1;
 
305
DROP TABLE t1;
 
306
disconnect con1;
 
307
 
 
308
 
 
309
--echo #
 
310
--echo # Bug#13417754 ASSERT IN ROW_DROP_DATABASE_FOR_MYSQL DURING DROP SCHEMA
 
311
--echo #
 
312
 
 
313
--disable_warnings
 
314
DROP TABLE IF EXISTS t1;
 
315
DROP DATABASE IF EXISTS db1;
 
316
--enable_warnings
 
317
 
 
318
CREATE TABLE t1(a int) engine=InnoDB;
 
319
CREATE DATABASE db1;
 
320
 
 
321
connect(con1, localhost, root);
 
322
connect(con2, localhost, root);
 
323
 
 
324
--echo # Connection con1
 
325
connection con1;
 
326
SET DEBUG_SYNC= 'after_innobase_rename_table SIGNAL locked WAIT_FOR continue';
 
327
--echo # Sending:
 
328
--send ALTER TABLE t1 RENAME db1.t1
 
329
 
 
330
--echo # Connection con2
 
331
connection con2;
 
332
SET DEBUG_SYNC= 'now WAIT_FOR locked';
 
333
--echo # DROP DATABASE db1 should now be blocked by ALTER TABLE
 
334
--echo # Sending:
 
335
--send DROP DATABASE db1
 
336
 
 
337
--echo # Connection default
 
338
connection default;
 
339
--echo # Check that DROP DATABASE is blocked by IX lock on db1
 
340
let $wait_condition=
 
341
  SELECT COUNT(*) = 1 FROM information_schema.processlist
 
342
  WHERE state = "Waiting for schema metadata lock" and
 
343
        info = "DROP DATABASE db1";
 
344
--source include/wait_condition.inc
 
345
--echo # Resume ALTER TABLE
 
346
SET DEBUG_SYNC= 'now SIGNAL continue';
 
347
 
 
348
--echo # Connection con1
 
349
connection con1;
 
350
--echo # Reaping: ALTER TABLE t1 RENAME db1.t1;
 
351
--reap
 
352
 
 
353
--echo # Connection con2
 
354
connection con2;
 
355
--echo # Reaping: DROP DATABASE db1
 
356
--reap
 
357
 
 
358
--echo # Connection default;
 
359
connection default;
 
360
SET DEBUG_SYNC= 'RESET';
 
361
disconnect con1;
 
362
disconnect con2;
 
363
 
 
364
 
 
365
--echo #
 
366
--echo # WL#5534 Online ALTER, Phase 1
 
367
--echo #
 
368
 
 
369
--echo # Multi thread tests.
 
370
--echo # See alter_table.test for single thread tests.
 
371
 
 
372
--disable_warnings
 
373
DROP TABLE IF EXISTS t1;
 
374
--enable_warnings
 
375
 
 
376
CREATE TABLE t1(a INT PRIMARY KEY, b INT) engine=InnoDB;
 
377
INSERT INTO t1 VALUES (1,1), (2,2);
 
378
SET DEBUG_SYNC= 'RESET';
 
379
connect (con1, localhost, root);
 
380
SET SESSION lock_wait_timeout= 1;
 
381
 
 
382
--echo #
 
383
--echo # 1: In-place + writes blocked.
 
384
--echo #
 
385
 
 
386
--echo # Connection default
 
387
--connection default
 
388
SET DEBUG_SYNC= 'alter_opened_table SIGNAL opened WAIT_FOR continue1';
 
389
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_upgrade SIGNAL upgraded WAIT_FOR continue2';
 
390
SET DEBUG_SYNC= 'alter_table_inplace_before_commit SIGNAL beforecommit WAIT_FOR continue3';
 
391
SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL binlog WAIT_FOR continue4';
 
392
--echo # Sending:
 
393
--send ALTER TABLE t1 ADD INDEX i1(b), ALGORITHM= INPLACE, LOCK= SHARED
 
394
 
 
395
--echo # Connection con1;
 
396
--connection con1
 
397
SET DEBUG_SYNC= 'now WAIT_FOR opened';
 
398
--echo # At this point, neither reads nor writes should be blocked.
 
399
SELECT * FROM t1;
 
400
INSERT INTO t1 VALUES (3,3);
 
401
 
 
402
SET DEBUG_SYNC= 'now SIGNAL continue1';
 
403
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
 
404
--echo # Now both reads and writes should be blocked
 
405
--error ER_LOCK_WAIT_TIMEOUT
 
406
SELECT * FROM t1;
 
407
--error ER_LOCK_WAIT_TIMEOUT
 
408
INSERT INTO t1 VALUES (4,4);
 
409
 
 
410
SET DEBUG_SYNC= 'now SIGNAL continue2';
 
411
SET DEBUG_SYNC= 'now WAIT_FOR beforecommit';
 
412
--echo # Still both reads and writes should be blocked.
 
413
--error ER_LOCK_WAIT_TIMEOUT
 
414
SELECT * FROM t1;
 
415
--error ER_LOCK_WAIT_TIMEOUT
 
416
INSERT INTO t1 VALUES (5,5);
 
417
 
 
418
SET DEBUG_SYNC= 'now SIGNAL continue3';
 
419
SET DEBUG_SYNC= 'now WAIT_FOR binlog';
 
420
--echo # Same here.
 
421
--error ER_LOCK_WAIT_TIMEOUT
 
422
SELECT * FROM t1;
 
423
--error ER_LOCK_WAIT_TIMEOUT
 
424
INSERT INTO t1 VALUES (6,6);
 
425
 
 
426
SET DEBUG_SYNC= 'now SIGNAL continue4';
 
427
--echo # Connection default
 
428
--connection default
 
429
--echo # Reaping ALTER TABLE ...
 
430
--reap
 
431
SET DEBUG_SYNC= 'RESET';
 
432
DELETE FROM t1 WHERE a= 3;
 
433
 
 
434
--echo #
 
435
--echo # 2: Copy + writes blocked.
 
436
--echo #
 
437
 
 
438
SET DEBUG_SYNC= 'alter_opened_table SIGNAL opened WAIT_FOR continue1';
 
439
SET DEBUG_SYNC= 'alter_table_copy_after_lock_upgrade SIGNAL upgraded WAIT_FOR continue2';
 
440
SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL binlog WAIT_FOR continue3';
 
441
--echo # Sending:
 
442
--send ALTER TABLE t1 ADD INDEX i2(b), ALGORITHM= COPY, LOCK= SHARED
 
443
 
 
444
--echo # Connection con1;
 
445
--connection con1
 
446
SET DEBUG_SYNC= 'now WAIT_FOR opened';
 
447
--echo # At this point, neither reads nor writes should be blocked.
 
448
SELECT * FROM t1;
 
449
INSERT INTO t1 VALUES (3,3);
 
450
 
 
451
SET DEBUG_SYNC= 'now SIGNAL continue1';
 
452
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
 
453
--echo # Now writes should be blocked, reads still allowed.
 
454
SELECT * FROM t1;
 
455
--error ER_LOCK_WAIT_TIMEOUT
 
456
INSERT INTO t1 VALUES (4,4);
 
457
 
 
458
SET DEBUG_SYNC= 'now SIGNAL continue2';
 
459
SET DEBUG_SYNC= 'now WAIT_FOR binlog';
 
460
--echo # Now both reads and writes should be blocked.
 
461
--error ER_LOCK_WAIT_TIMEOUT
 
462
SELECT * FROM t1 limit 1;
 
463
--error ER_LOCK_WAIT_TIMEOUT
 
464
INSERT INTO t1 VALUES (5,5);
 
465
 
 
466
SET DEBUG_SYNC= 'now SIGNAL continue3';
 
467
--echo # Connection default
 
468
--connection default
 
469
--echo # Reaping ALTER TABLE ...
 
470
--reap
 
471
SET DEBUG_SYNC= 'RESET';
 
472
DELETE FROM t1 WHERE a= 3;
 
473
 
 
474
--echo #
 
475
--echo # 3: In-place + writes allowed.
 
476
--echo #
 
477
 
 
478
--echo # TODO: Enable this test once WL#5526 is pushed
 
479
--disable_parsing
 
480
 
 
481
--echo # Connection default
 
482
--connection default
 
483
SET DEBUG_SYNC= 'alter_opened_table SIGNAL opened WAIT_FOR continue1';
 
484
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_upgrade SIGNAL upgraded WAIT_FOR continue2';
 
485
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_downgrade SIGNAL downgraded WAIT_FOR continue3';
 
486
SET DEBUG_SYNC= 'alter_table_inplace_before_commit SIGNAL beforecommit WAIT_FOR continue4';
 
487
SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL binlog WAIT_FOR continue5';
 
488
--echo # Sending:
 
489
--send ALTER TABLE t1 ADD INDEX i3(b), ALGORITHM= INPLACE, LOCK= NONE
 
490
 
 
491
--echo # Connection con1;
 
492
--connection con1
 
493
SET DEBUG_SYNC= 'now WAIT_FOR opened';
 
494
--echo # At this point, neither reads nor writes should be blocked.
 
495
SELECT * FROM t1;
 
496
INSERT INTO t1 VALUES (3,3);
 
497
 
 
498
SET DEBUG_SYNC= 'now SIGNAL continue1';
 
499
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
 
500
--echo # Now writes should be blocked, reads still allowed.
 
501
SELECT * FROM t1;
 
502
--error ER_LOCK_WAIT_TIMEOUT
 
503
INSERT INTO t1 VALUES (4,4);
 
504
 
 
505
SET DEBUG_SYNC= 'now SIGNAL continue2';
 
506
SET DEBUG_SYNC= 'now WAIT_FOR downgraded';
 
507
--echo # Now writes should be allowed again.
 
508
SELECT * FROM t1;
 
509
INSERT INTO t1 VALUES (5,5);
 
510
 
 
511
SET DEBUG_SYNC= 'now SIGNAL continue3';
 
512
SET DEBUG_SYNC= 'now WAIT_FOR beforecommit';
 
513
--echo # Now both reads and writes should be blocked.
 
514
--error ER_LOCK_WAIT_TIMEOUT
 
515
SELECT * FROM t1;
 
516
--error ER_LOCK_WAIT_TIMEOUT
 
517
INSERT INTO t1 VALUES (6,6);
 
518
 
 
519
SET DEBUG_SYNC= 'now SIGNAL continue4';
 
520
SET DEBUG_SYNC= 'now WAIT_FOR binlog';
 
521
--echo # Same here.
 
522
--error ER_LOCK_WAIT_TIMEOUT
 
523
SELECT * FROM t1;
 
524
--error ER_LOCK_WAIT_TIMEOUT
 
525
INSERT INTO t1 VALUES (7,7);
 
526
 
 
527
SET DEBUG_SYNC= 'now SIGNAL continue5';
 
528
--echo # Connection default
 
529
--connection default
 
530
--echo # Reaping ALTER TABLE ...
 
531
--reap
 
532
SET DEBUG_SYNC= 'RESET';
 
533
DELETE FROM t1 WHERE a= 3 OR a= 4;
 
534
 
 
535
--echo # TODO: Enable this test once WL#5526 is pushed
 
536
--enable_parsing
 
537
 
 
538
--echo #
 
539
--echo # 4: In-place + reads and writes blocked.
 
540
--echo #
 
541
 
 
542
--echo # Connection default
 
543
--connection default
 
544
SET DEBUG_SYNC= 'alter_opened_table SIGNAL opened WAIT_FOR continue1';
 
545
SET DEBUG_SYNC= 'alter_table_inplace_after_lock_upgrade SIGNAL upgraded WAIT_FOR continue2';
 
546
SET DEBUG_SYNC= 'alter_table_inplace_before_commit SIGNAL beforecommit WAIT_FOR continue3';
 
547
SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL binlog WAIT_FOR continue4';
 
548
--echo # Sending:
 
549
--send ALTER TABLE t1 ADD INDEX i4(b), ALGORITHM= INPLACE, LOCK= EXCLUSIVE
 
550
 
 
551
--echo # Connection con1;
 
552
--connection con1
 
553
SET DEBUG_SYNC= 'now WAIT_FOR opened';
 
554
--echo # At this point, neither reads nor writes should be blocked.
 
555
SELECT * FROM t1;
 
556
INSERT INTO t1 VALUES (3,3);
 
557
 
 
558
SET DEBUG_SYNC= 'now SIGNAL continue1';
 
559
SET DEBUG_SYNC= 'now WAIT_FOR upgraded';
 
560
--echo # Now both reads and writes should be blocked.
 
561
--error ER_LOCK_WAIT_TIMEOUT
 
562
SELECT * FROM t1;
 
563
--error ER_LOCK_WAIT_TIMEOUT
 
564
INSERT INTO t1 VALUES (4,4);
 
565
 
 
566
SET DEBUG_SYNC= 'now SIGNAL continue2';
 
567
SET DEBUG_SYNC= 'now WAIT_FOR beforecommit';
 
568
--echo # Same here.
 
569
--error ER_LOCK_WAIT_TIMEOUT
 
570
SELECT * FROM t1;
 
571
--error ER_LOCK_WAIT_TIMEOUT
 
572
INSERT INTO t1 VALUES (5,5);
 
573
 
 
574
SET DEBUG_SYNC= 'now SIGNAL continue3';
 
575
SET DEBUG_SYNC= 'now WAIT_FOR binlog';
 
576
--echo # Same here.
 
577
--error ER_LOCK_WAIT_TIMEOUT
 
578
SELECT * FROM t1;
 
579
--error ER_LOCK_WAIT_TIMEOUT
 
580
INSERT INTO t1 VALUES (6,6);
 
581
 
 
582
SET DEBUG_SYNC= 'now SIGNAL continue4';
 
583
--echo # Connection default
 
584
--connection default
 
585
--echo # Reaping ALTER TABLE ...
 
586
--reap
 
587
SET DEBUG_SYNC= 'RESET';
 
588
 
 
589
--connection default
 
590
--disconnect con1
 
591
DROP TABLE t1;
 
592
SET DEBUG_SYNC= 'RESET';
 
593
 
 
594
 
 
595
# Check that all connections opened by test cases in this file are really
 
596
# gone so execution of other tests won't be affected by their presence.
 
597
--source include/wait_until_count_sessions.inc