mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-13205 InnoDB: Failing assertion: !dict_index_is_online_ddl(index) upon ALTER TABLE
dict_foreign_find_index(): Ignore incompletely created indexes. After a failed ADD UNIQUE INDEX, an incompletely created index could be left behind until the next ALTER TABLE statement.
This commit is contained in:
@ -339,6 +339,22 @@ ERROR 42000: Duplicate key name 'c2h'
|
|||||||
SET DEBUG_SYNC = 'RESET';
|
SET DEBUG_SYNC = 'RESET';
|
||||||
SET GLOBAL innodb_monitor_disable = module_ddl;
|
SET GLOBAL innodb_monitor_disable = module_ddl;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-13205 assertion !dict_index_is_online_ddl(index) upon ALTER TABLE
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (c VARCHAR(64)) ENGINE=InnoDB;
|
||||||
|
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL t1u_created WAIT_FOR dup_done';
|
||||||
|
ALTER TABLE t1 ADD UNIQUE(c);
|
||||||
|
SET DEBUG_SYNC = 'now WAIT_FOR t1u_created';
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 VALUES('bar'),('bar');
|
||||||
|
SET DEBUG_SYNC = 'now SIGNAL dup_done';
|
||||||
|
ERROR 23000: Duplicate entry 'bar' for key 'c'
|
||||||
|
SET DEBUG_SYNC = 'RESET';
|
||||||
|
CREATE TABLE t2 (c VARCHAR(64)) ENGINE=InnoDB;
|
||||||
|
ALTER TABLE t2 ADD FOREIGN KEY (c) REFERENCES t1 (c);
|
||||||
|
ERROR HY000: Can't create table `test`.`#sql-temporary` (errno: 150 "Foreign key constraint is incorrectly formed")
|
||||||
|
DROP TABLE t2,t1;
|
||||||
SET GLOBAL innodb_file_per_table = @global_innodb_file_per_table_orig;
|
SET GLOBAL innodb_file_per_table = @global_innodb_file_per_table_orig;
|
||||||
SET GLOBAL innodb_monitor_enable = default;
|
SET GLOBAL innodb_monitor_enable = default;
|
||||||
SET GLOBAL innodb_monitor_disable = default;
|
SET GLOBAL innodb_monitor_disable = default;
|
||||||
|
@ -382,8 +382,6 @@ connection default;
|
|||||||
reap;
|
reap;
|
||||||
--enable_parsing
|
--enable_parsing
|
||||||
#remove below con1 disconnect if above test case is enabled
|
#remove below con1 disconnect if above test case is enabled
|
||||||
connection con1;
|
|
||||||
disconnect con1;
|
|
||||||
connection default;
|
connection default;
|
||||||
|
|
||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
@ -399,6 +397,31 @@ SET GLOBAL innodb_monitor_disable = module_ddl;
|
|||||||
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-13205 assertion !dict_index_is_online_ddl(index) upon ALTER TABLE
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1 (c VARCHAR(64)) ENGINE=InnoDB;
|
||||||
|
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL t1u_created WAIT_FOR dup_done';
|
||||||
|
send ALTER TABLE t1 ADD UNIQUE(c);
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
SET DEBUG_SYNC = 'now WAIT_FOR t1u_created';
|
||||||
|
BEGIN;
|
||||||
|
INSERT INTO t1 VALUES('bar'),('bar');
|
||||||
|
SET DEBUG_SYNC = 'now SIGNAL dup_done';
|
||||||
|
|
||||||
|
connection default;
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
reap;
|
||||||
|
|
||||||
|
SET DEBUG_SYNC = 'RESET';
|
||||||
|
disconnect con1;
|
||||||
|
CREATE TABLE t2 (c VARCHAR(64)) ENGINE=InnoDB;
|
||||||
|
--replace_regex /#sql-[0-9a-f_]*/#sql-temporary/
|
||||||
|
--error ER_CANT_CREATE_TABLE
|
||||||
|
ALTER TABLE t2 ADD FOREIGN KEY (c) REFERENCES t1 (c);
|
||||||
|
DROP TABLE t2,t1;
|
||||||
|
|
||||||
# Check that all connections opened by test cases in this file are really
|
# Check that all connections opened by test cases in this file are really
|
||||||
# gone so execution of other tests won't be affected by their presence.
|
# gone so execution of other tests won't be affected by their presence.
|
||||||
--source include/wait_until_count_sessions.inc
|
--source include/wait_until_count_sessions.inc
|
||||||
|
@ -3364,6 +3364,7 @@ dict_foreign_find_index(
|
|||||||
if (types_idx != index
|
if (types_idx != index
|
||||||
&& !(index->type & DICT_FTS)
|
&& !(index->type & DICT_FTS)
|
||||||
&& !index->to_be_dropped
|
&& !index->to_be_dropped
|
||||||
|
&& !dict_index_is_online_ddl(index)
|
||||||
&& dict_foreign_qualify_index(
|
&& dict_foreign_qualify_index(
|
||||||
table, col_names, columns, n_cols,
|
table, col_names, columns, n_cols,
|
||||||
index, types_idx,
|
index, types_idx,
|
||||||
|
@ -3378,6 +3378,7 @@ dict_foreign_find_index(
|
|||||||
if (types_idx != index
|
if (types_idx != index
|
||||||
&& !(index->type & DICT_FTS)
|
&& !(index->type & DICT_FTS)
|
||||||
&& !index->to_be_dropped
|
&& !index->to_be_dropped
|
||||||
|
&& !dict_index_is_online_ddl(index)
|
||||||
&& dict_foreign_qualify_index(
|
&& dict_foreign_qualify_index(
|
||||||
table, col_names, columns, n_cols,
|
table, col_names, columns, n_cols,
|
||||||
index, types_idx,
|
index, types_idx,
|
||||||
|
Reference in New Issue
Block a user