diff options
author | Aleksey Midenkov <midenok@gmail.com> | 2022-10-17 03:15:19 +0300 |
---|---|---|
committer | Aleksey Midenkov <midenok@gmail.com> | 2022-10-17 03:15:19 +0300 |
commit | 1c6ed3e590a78b8c8b65efdcc0f93865b078512f (patch) | |
tree | 742c977ea0de977d604b0e86bcfde242cb56385b | |
parent | 93acf5a8a6a5116e1afcb1468f4d77d1d9fa1ac3 (diff) | |
download | mariadb-git-1c6ed3e590a78b8c8b65efdcc0f93865b078512f.tar.gz |
-rw-r--r-- | mysql-test/suite/atomic/create_replace_broken.result | 312 | ||||
-rw-r--r-- | mysql-test/suite/atomic/create_replace_broken.test | 20 | ||||
-rw-r--r-- | sql/sql_table.cc | 58 |
3 files changed, 323 insertions, 67 deletions
diff --git a/mysql-test/suite/atomic/create_replace_broken.result b/mysql-test/suite/atomic/create_replace_broken.result index c83bb8df981..acf4f26f09a 100644 --- a/mysql-test/suite/atomic/create_replace_broken.result +++ b/mysql-test/suite/atomic/create_replace_broken.result @@ -20,8 +20,67 @@ a INSERT t1 set @s= 1 BEFORE tr DELETE t1 begin end BEFORE # CRASH POINT: ddl_log_replace_broken_2 t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_replace_broken_3 +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_replace_broken_4 +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_replace_broken_5 +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_create_before_binlog +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_create_after_prepare_eof +Warnings: +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +# No crash! +t1.DATA1 t1.DATA2 t1.frm +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE t1 (new int) show create table t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -29,10 +88,11 @@ t1 CREATE TABLE `t1` ( ) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci Level Code Message Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation -# CRASH POINT: ddl_log_drop_before_delete_table +# CRASH POINT: ddl_log_create_after_binlog t1.DATA1 t1.DATA2 t1.frm +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE t1 (new int) show create table t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -40,10 +100,11 @@ t1 CREATE TABLE `t1` ( ) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci Level Code Message Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation -# CRASH POINT: ddl_log_drop_after_delete_table +# CRASH POINT: ddl_log_create_log_complete t1.DATA1 t1.DATA2 t1.frm +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE t1 (new int) show create table t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -51,10 +112,11 @@ t1 CREATE TABLE `t1` ( ) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci Level Code Message Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation -# CRASH POINT: ddl_log_drop_before_drop_trigger +# CRASH POINT: ddl_log_create_log_complete2 t1.DATA1 t1.DATA2 t1.frm +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE t1 (new int) show create table t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -62,10 +124,11 @@ t1 CREATE TABLE `t1` ( ) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci Level Code Message Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation -# CRASH POINT: ddl_log_drop_before_drop_trigger2 +# CRASH POINT: ddl_log_create_log_complete3 t1.DATA1 t1.DATA2 t1.frm +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE t1 (new int) show create table t1; Table Create Table t1 CREATE TABLE `t1` ( @@ -73,60 +136,175 @@ t1 CREATE TABLE `t1` ( ) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci Level Code Message Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation -# CRASH POINT: ddl_log_drop_after_drop_trigger +# QUERY: CREATE OR REPLACE TABLE t1 LIKE const_table +# CRASH POINT: ddl_log_replace_broken_1 +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_replace_broken_2 +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_replace_broken_3 +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_replace_broken_4 +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_replace_broken_5 +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_create_before_binlog +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_create_after_prepare_eof +Warnings: +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +# No crash! t1.DATA1 t1.DATA2 t1.frm +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE t1 LIKE const_table show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `new` int(11) DEFAULT NULL + `new` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL ) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci Level Code Message Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation -# CRASH POINT: ddl_log_drop_before_binlog -Warnings: -Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") -Error 6 Error on delete of './test/t1.MYI' (Errcode: 2 "No such file or directory") -# No crash! +# CRASH POINT: ddl_log_create_after_binlog t1.DATA1 t1.DATA2 t1.frm -master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE t1 (new int) +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE t1 LIKE const_table show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `new` int(11) DEFAULT NULL + `new` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL ) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci Level Code Message Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation -# CRASH POINT: ddl_log_drop_after_binlog -Warnings: -Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") -Error 6 Error on delete of './test/t1.MYI' (Errcode: 2 "No such file or directory") -# No crash! +# CRASH POINT: ddl_log_create_log_complete t1.DATA1 t1.DATA2 t1.frm -master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE t1 (new int) +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE t1 LIKE const_table show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `new` int(11) DEFAULT NULL + `new` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL ) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci Level Code Message Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation -# CRASH POINT: ddl_log_replace_broken_3 +# CRASH POINT: ddl_log_create_log_complete2 t1.DATA1 t1.DATA2 t1.frm +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE t1 LIKE const_table show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `new` int(11) DEFAULT NULL + `new` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +Level Code Message +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +# CRASH POINT: ddl_log_create_log_complete3 +t1.DATA1 +t1.DATA2 +t1.frm +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE t1 LIKE const_table +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `new` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL ) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci Level Code Message Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +# QUERY: CREATE OR REPLACE TABLE t1 SELECT * from const_table +# CRASH POINT: ddl_log_replace_broken_1 +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_replace_broken_2 +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_replace_broken_3 +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE # CRASH POINT: ddl_log_replace_broken_4 t1.DATA1 t1.TRG @@ -138,27 +316,109 @@ Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation a INSERT t1 set @s= 1 BEFORE tr DELETE t1 begin end BEFORE -# CRASH POINT: ddl_log_create_after_save_backup +# CRASH POINT: ddl_log_replace_broken_5 +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_create_before_binlog +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_create_after_prepare_eof +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_create_after_binlog +t1.DATA1 +t1.TRG +t1.frm +tr.TRN +show create table t1; +Level Code Message +Error 1017 Can't find file: './test/t1.MYI' (errno: 2 "No such file or directory") +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +a INSERT t1 set @s= 1 BEFORE +tr DELETE t1 begin end BEFORE +# CRASH POINT: ddl_log_create_log_complete t1.DATA1 t1.DATA2 t1.frm +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE `t1` ( + `new` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL +) +master-bin.000001 # Annotate_rows # # CREATE OR REPLACE TABLE t1 SELECT * from const_table show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `new` int(11) DEFAULT NULL + `new` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL ) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci Level Code Message +new b +1 1 +2 2 Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation -# CRASH POINT: ddl_log_create_after_install_new +# CRASH POINT: ddl_log_create_log_complete2 t1.DATA1 t1.DATA2 t1.frm +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE `t1` ( + `new` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL +) +master-bin.000001 # Annotate_rows # # CREATE OR REPLACE TABLE t1 SELECT * from const_table show create table t1; Table Create Table t1 CREATE TABLE `t1` ( - `new` int(11) DEFAULT NULL + `new` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL +) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci +Level Code Message +new b +1 1 +2 2 +Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation +# CRASH POINT: ddl_log_create_log_complete3 +t1.DATA1 +t1.DATA2 +t1.frm +master-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE `t1` ( + `new` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL +) +master-bin.000001 # Annotate_rows # # CREATE OR REPLACE TABLE t1 SELECT * from const_table +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `new` int(11) DEFAULT NULL, + `b` int(11) DEFAULT NULL ) ENGINE=ENGINE DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci Level Code Message +new b +1 1 +2 2 Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation Warnings: Note 1051 Unknown table 'test.t1' diff --git a/mysql-test/suite/atomic/create_replace_broken.test b/mysql-test/suite/atomic/create_replace_broken.test index 8abefa24730..278ef687db2 100644 --- a/mysql-test/suite/atomic/create_replace_broken.test +++ b/mysql-test/suite/atomic/create_replace_broken.test @@ -19,20 +19,18 @@ let $default_engine=MyISAM; let $MYSQLD_DATADIR= `SELECT @@datadir`; -let $crash_count=13; +let $crash_count= 11; let $crash_points='ddl_log_replace_broken_1', 'ddl_log_replace_broken_2', - 'ddl_log_drop_before_delete_table', - 'ddl_log_drop_after_delete_table', - 'ddl_log_drop_before_drop_trigger', - 'ddl_log_drop_before_drop_trigger2', - 'ddl_log_drop_after_drop_trigger', - 'ddl_log_drop_before_binlog', - 'ddl_log_drop_after_binlog', 'ddl_log_replace_broken_3', 'ddl_log_replace_broken_4', - 'ddl_log_create_after_save_backup', - 'ddl_log_create_after_install_new'; + 'ddl_log_replace_broken_5', + 'ddl_log_create_before_binlog', + 'ddl_log_create_after_prepare_eof', + 'ddl_log_create_after_binlog', + 'ddl_log_create_log_complete', + 'ddl_log_create_log_complete2', + 'ddl_log_create_log_complete3'; #let $crash_count=1; #let $crash_points='ddl_log_replace_broken_2'; @@ -44,7 +42,7 @@ let $statements='CREATE OR REPLACE TABLE t1 (new int) EXTRA_OPTION', 'CREATE OR REPLACE TABLE t1 LIKE const_table', 'CREATE OR REPLACE TABLE t1 EXTRA_OPTION SELECT * from const_table'; -let $statement_count=1; +#let $statement_count=1; #let $statements='CREATE OR REPLACE TABLE t1 EXTRA_OPTION SELECT * from const_table'; --disable_query_log diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 2bc5cb89e1f..8038ddae604 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -1681,8 +1681,7 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, else res= ddl_log_drop_table(ddl_log_state, hton, &cpath, &db, &table_name, 0); - if (res || ddl_log_commit_atomic_block(ddl_log_state, - ddl_log_state->drop_init_entry->entry_pos)) + if (res) { error= -1; goto err; @@ -1768,9 +1767,7 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, */ ddl_log_disable_entry(ddl_log_state); if (ddl_log_drop_table(ddl_log_state, 0, &cpath, &db, - &table_name, 0) || - ddl_log_commit_atomic_block(ddl_log_state, - ddl_log_state->drop_init_entry->entry_pos)) + &table_name, 0)) { error= -1; goto err; @@ -4426,8 +4423,6 @@ bool HA_CREATE_INFO::finalize_atomic_replace(THD *thd, TABLE_LIST *orig_table) char path[FN_REFLEN + 1]; cpath.str= path; bool locked_tables_decremented= false; - bool backed_old= true; - DDL_LOG_MEMORY_ENTRY *restore_backup; DBUG_ASSERT(is_atomic_replace()); @@ -4461,7 +4456,6 @@ bool HA_CREATE_INFO::finalize_atomic_replace(THD *thd, TABLE_LIST *orig_table) DDL_RENAME_PHASE_TRIGGER, DDL_LOG_FLAG_FROM_IS_TMP)) return true; - restore_backup= ddl_log_state_create->main_entry; debug_crash_here("ddl_log_create_after_log_rename_backup"); @@ -4499,15 +4493,20 @@ bool HA_CREATE_INFO::finalize_atomic_replace(THD *thd, TABLE_LIST *orig_table) if (rename_table_and_triggers(thd, ¶m, NULL, orig_table, &backup_name.db, false, &dummy)) { - debug_crash_here("ddl_log_replace_broken_1"); thd->pop_internal_handler(); + + debug_crash_here("ddl_log_replace_broken_1"); + /* We don't need restore from backup entry anymore, disabling it */ + ddl_log_update_phase(ddl_log_state_create, DDL_LOG_FINAL_PHASE); + debug_crash_here("ddl_log_replace_broken_2"); + /* Something is wrong with the old table! But C-O-R is almost done, so we finish it anyway by dropping the old table and applying new table. */ - ddl_log_start_atomic_block(ddl_log_state_create); - if (ddl_log_rename_table(ddl_log_state_create, db_type, + ddl_log_start_atomic_block(ddl_log_state_rm); + if (ddl_log_rename_table(ddl_log_state_rm, db_type, &db, &table_name, &tmp_name.db, &tmp_name.table_name, DDL_RENAME_PHASE_TRIGGER, @@ -4518,30 +4517,30 @@ bool HA_CREATE_INFO::finalize_atomic_replace(THD *thd, TABLE_LIST *orig_table) return true; } - debug_crash_here("ddl_log_replace_broken_4"); - - TABLE_LIST table_list; - table_list.init_one_table(&db, &table_name, 0, TL_WRITE); + debug_crash_here("ddl_log_replace_broken_3"); + cpath.length= build_table_filename(path, sizeof(path) - 1, db.str, + table_name.str, "", 0); - enum_locked_tables_mode ltm_save= thd->locked_tables_mode; - thd->locked_tables_mode= LTM_NONE; - if (mysql_rm_table_no_locks(thd, &table_list, &thd->db, ddl_log_state_create, - 0, 0, 0, 0, 1, 1)) + if (ddl_log_drop_table_init(ddl_log_state_rm, &db, &empty_clex_str) || + ddl_log_drop_table(ddl_log_state_rm, old_hton, &cpath, + &db, &table_name, 0)) { - thd->locked_tables_mode= ltm_save; if (locked_tables_decremented) thd->locked_tables_list.add_back_last_deleted_lock(pos_in_locked_tables); return true; } - debug_crash_here("ddl_log_replace_broken_2"); - /* We don't need restore from backup entry anymore, disabling it */ - ddl_log_state_create->main_entry= restore_backup; - ddl_log_update_phase(ddl_log_state_create, DDL_LOG_FINAL_PHASE); - debug_crash_here("ddl_log_replace_broken_3"); + debug_crash_here("ddl_log_replace_broken_4"); + if (ddl_log_commit_atomic_block(ddl_log_state_rm, + ddl_log_state_rm->drop_init_entry->entry_pos)) + { + if (locked_tables_decremented) + thd->locked_tables_list.add_back_last_deleted_lock(pos_in_locked_tables); + return true; + } - thd->locked_tables_mode= ltm_save; - backed_old= false; + debug_crash_here("ddl_log_replace_broken_5"); + return false; } else thd->pop_internal_handler(); @@ -4558,9 +4557,8 @@ bool HA_CREATE_INFO::finalize_atomic_replace(THD *thd, TABLE_LIST *orig_table) param.lock_triggers= false; ulonglong option_bits_save= thd->variables.option_bits; thd->variables.option_bits&= ~OPTION_NO_FOREIGN_KEY_CHECKS; - if ((backed_old && - ddl_log_create_table(ddl_log_state_create, param.from_table_hton, - &cpath, &db, &table_name, false)) || + if (ddl_log_create_table(ddl_log_state_create, param.from_table_hton, + &cpath, &db, &table_name, false) || rename_table_and_triggers(thd, ¶m, NULL, &tmp_name, &db, false, &dummy)) { |