Skip to content

Commit fac2624

Browse files
authored
Merge pull request #5385 from dlenev/ps-8.0-9144-9214
Merge fixes for PS-9144 and PS-9214 into 8.0 release tree.
2 parents cfcd788 + e331f9f commit fac2624

File tree

4 files changed

+268
-76
lines changed

4 files changed

+268
-76
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#
2+
# Test for PS-9144 : Missing rows after ALGORITHM=INPLACE ALTER under
3+
# same workload as PS-9092.
4+
#
5+
CREATE TABLE t1 (pk CHAR(5) PRIMARY KEY);
6+
INSERT INTO t1 VALUES ('aaaaa'), ('bbbbb'), ('bbbcc'), ('ccccc'), ('ddddd'), ('eeeee');
7+
set global innodb_purge_stop_now=ON;
8+
DELETE FROM t1 WHERE pk = 'bbbcc';
9+
connect con1, localhost, root,,;
10+
SET DEBUG='+d,ddl_buf_add_two';
11+
SET DEBUG_SYNC='ddl_bulk_inserter_latches_released SIGNAL latches_released WAIT_FOR go';
12+
# Send ALTER TABLE INPLACE which rebuilds table.
13+
ALTER TABLE t1 ENGINE=InnoDB, ALGORITHM=INPLACE;
14+
connection default;
15+
SET DEBUG_SYNC='now WAIT_FOR latches_released';
16+
SET GLOBAL innodb_purge_run_now=ON;
17+
SET DEBUG_SYNC='now SIGNAL go';
18+
connection con1;
19+
# Reap ALTER TABLE
20+
# Before the fix row 'ddddd' was missing from the table after ALTER.
21+
SELECT * FROM t1;
22+
pk
23+
aaaaa
24+
bbbbb
25+
ccccc
26+
ddddd
27+
eeeee
28+
SET DEBUG='-d,ddl_buf_add_two';
29+
disconnect con1;
30+
connection default;
31+
# Cleanup.
32+
SET DEBUG_SYNC= 'RESET';
33+
DROP TABLE t1;
34+
#
35+
# Test for PS-9214 : Alter table online results in "duplicate key"
36+
# error on the primary key (only index).
37+
#
38+
CREATE TABLE t1 (pk CHAR(5) PRIMARY KEY);
39+
INSERT INTO t1 VALUES ('aaaaa'), ('bbbbb'), ('ccccc'), ('ddddd'), ('eeeee');
40+
connect con1, localhost, root,,;
41+
SET DEBUG='+d,ddl_buf_add_two';
42+
SET DEBUG_SYNC='ddl_bulk_inserter_latches_released SIGNAL latches_released WAIT_FOR go';
43+
# Send ALTER TABLE INPLACE which rebuilds table.
44+
ALTER TABLE t1 ENGINE=InnoDB, ALGORITHM=INPLACE;
45+
connection default;
46+
SET DEBUG_SYNC='now WAIT_FOR latches_released';
47+
INSERT INTO t1 VALUES ('ccaaa');
48+
SET DEBUG_SYNC='now SIGNAL go';
49+
connection con1;
50+
# Reap ALTER TABLE
51+
# Before fix it failed with duplicate key error.
52+
SET DEBUG='-d,ddl_buf_add_two';
53+
disconnect con1;
54+
connection default;
55+
# Cleanup.
56+
SET DEBUG_SYNC= 'RESET';
57+
DROP TABLE t1;
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
# Tests in this file use both debug-only facilities as well as debug sync point.
2+
--source include/have_debug.inc
3+
--source include/have_debug_sync.inc
4+
--enable_connect_log
5+
6+
--echo #
7+
--echo # Test for PS-9144 : Missing rows after ALGORITHM=INPLACE ALTER under
8+
--echo # same workload as PS-9092.
9+
--echo #
10+
CREATE TABLE t1 (pk CHAR(5) PRIMARY KEY);
11+
INSERT INTO t1 VALUES ('aaaaa'), ('bbbbb'), ('bbbcc'), ('ccccc'), ('ddddd'), ('eeeee');
12+
13+
set global innodb_purge_stop_now=ON;
14+
DELETE FROM t1 WHERE pk = 'bbbcc';
15+
16+
--connect (con1, localhost, root,,)
17+
SET DEBUG='+d,ddl_buf_add_two';
18+
SET DEBUG_SYNC='ddl_bulk_inserter_latches_released SIGNAL latches_released WAIT_FOR go';
19+
--echo # Send ALTER TABLE INPLACE which rebuilds table.
20+
--send ALTER TABLE t1 ENGINE=InnoDB, ALGORITHM=INPLACE
21+
22+
--connection default
23+
SET DEBUG_SYNC='now WAIT_FOR latches_released';
24+
SET GLOBAL innodb_purge_run_now=ON;
25+
--source include/wait_innodb_all_purged.inc
26+
SET DEBUG_SYNC='now SIGNAL go';
27+
28+
--connection con1
29+
--echo # Reap ALTER TABLE
30+
--reap
31+
32+
--echo # Before the fix row 'ddddd' was missing from the table after ALTER.
33+
SELECT * FROM t1;
34+
35+
SET DEBUG='-d,ddl_buf_add_two';
36+
37+
--disconnect con1
38+
--source include/wait_until_disconnected.inc
39+
40+
--connection default
41+
--echo # Cleanup.
42+
SET DEBUG_SYNC= 'RESET';
43+
DROP TABLE t1;
44+
45+
--echo #
46+
--echo # Test for PS-9214 : Alter table online results in "duplicate key"
47+
--echo # error on the primary key (only index).
48+
--echo #
49+
CREATE TABLE t1 (pk CHAR(5) PRIMARY KEY);
50+
INSERT INTO t1 VALUES ('aaaaa'), ('bbbbb'), ('ccccc'), ('ddddd'), ('eeeee');
51+
52+
--connect (con1, localhost, root,,)
53+
SET DEBUG='+d,ddl_buf_add_two';
54+
SET DEBUG_SYNC='ddl_bulk_inserter_latches_released SIGNAL latches_released WAIT_FOR go';
55+
--echo # Send ALTER TABLE INPLACE which rebuilds table.
56+
--send ALTER TABLE t1 ENGINE=InnoDB, ALGORITHM=INPLACE
57+
58+
--connection default
59+
SET DEBUG_SYNC='now WAIT_FOR latches_released';
60+
INSERT INTO t1 VALUES ('ccaaa');
61+
SET DEBUG_SYNC='now SIGNAL go';
62+
63+
--connection con1
64+
--echo # Reap ALTER TABLE
65+
--echo # Before fix it failed with duplicate key error.
66+
--reap
67+
68+
SET DEBUG='-d,ddl_buf_add_two';
69+
70+
--disconnect con1
71+
--source include/wait_until_disconnected.inc
72+
73+
--connection default
74+
--echo # Cleanup.
75+
SET DEBUG_SYNC= 'RESET';
76+
DROP TABLE t1;
77+
78+
--disable_connect_log

storage/innobase/ddl/ddl0par-scan.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ dberr_t Parallel_cursor::scan(Builders &builders) noexcept {
237237
thread_ctx->get_state() != Parallel_reader::State::THREAD) {
238238
thread_ctx->savepoint();
239239
latches_released = true;
240+
DEBUG_SYNC_C("ddl_bulk_inserter_latches_released");
240241
}
241242
return DB_SUCCESS;
242243
});

0 commit comments

Comments
 (0)