summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Midenkov <midenok@gmail.com>2022-10-17 03:15:19 +0300
committerAleksey Midenkov <midenok@gmail.com>2022-10-17 03:15:19 +0300
commit1c6ed3e590a78b8c8b65efdcc0f93865b078512f (patch)
tree742c977ea0de977d604b0e86bcfde242cb56385b
parent93acf5a8a6a5116e1afcb1468f4d77d1d9fa1ac3 (diff)
downloadmariadb-git-MDEV-29770/rm_table_variation.tar.gz
-rw-r--r--mysql-test/suite/atomic/create_replace_broken.result312
-rw-r--r--mysql-test/suite/atomic/create_replace_broken.test20
-rw-r--r--sql/sql_table.cc58
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, &param, 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, &param, NULL, &tmp_name, &db, false,
&dummy))
{