mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-17859 Operating system errors in file operations after failed CREATE
This is a regression due to MDEV-17816. When creating a table fails, we must roll back the dictionary transaction. Because the rollback may rename tables, and because InnoDB lacks proper undo logging for CREATE operations, we must drop the incompletely created table before rolling back the transaction, which could include a RENAME operation. But, we must not blindly drop the table by name; after all, the operation could have failed because another table by the same name already existed. create_table_info_t::m_drop_before_rollback: A flag that is set if the table needs to be dropped before transaction rollback. create_table_info_t::create_table(): Remove some duplicated error handling. ha_innobase::create(): On error, only drop the table if it was actually created.
This commit is contained in:
@ -27,3 +27,18 @@ SHOW TABLE STATUS;
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 InnoDB # Compressed # # # # # # 1 # # NULL latin1_swedish_ci NULL key_block_size=4
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# MDEV-17859 Operating system errors in file operations
|
||||
# after failed CREATE
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
call mtr.add_suppression("InnoDB: (Operating system )?[Ee]rror number");
|
||||
call mtr.add_suppression("InnoDB: Cannot create file '.*t1\\.ibd");
|
||||
FLUSH TABLES;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
ERROR HY000: Tablespace for table '`test`.`t1`' exists. Please DISCARD the tablespace before IMPORT
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
DROP TABLE t1;
|
||||
|
Reference in New Issue
Block a user