Skip to content

Commit 2af1591

Browse files
committed
MDEV-25292 Disable atomic replace for slave-generated or-replace
Also fixes wrong rollback of ddl_log_state_rm in case of non-atomic replace. There is no backup to remove in that case.
1 parent 34398a2 commit 2af1591

File tree

4 files changed

+10
-4
lines changed

4 files changed

+10
-4
lines changed

mysql-test/suite/rpl/r/create_or_replace_mix.result

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ slave-bin.000001 # Query # # use `test`; create table t4 (server_2_to_be_delete
150150
slave-bin.000001 # Gtid # # GTID #-#-#
151151
slave-bin.000001 # Query # # use `test`; create table t1 (new_table int)
152152
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
153-
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t2` (
153+
slave-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE `t2` (
154154
`a` int(11) DEFAULT NULL
155155
)
156156
slave-bin.000001 # Annotate_rows # # create table t2 select * from t9

mysql-test/suite/rpl/r/create_or_replace_statement.result

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ slave-bin.000001 # Query # # use `test`; create table t4 (server_2_to_be_delete
150150
slave-bin.000001 # Gtid # # GTID #-#-#
151151
slave-bin.000001 # Query # # use `test`; create table t1 (new_table int)
152152
slave-bin.000001 # Gtid # # BEGIN GTID #-#-#
153-
slave-bin.000001 # Query # # use `test`; CREATE TABLE `t2` (
153+
slave-bin.000001 # Query # # use `test`; CREATE OR REPLACE TABLE `t2` (
154154
`a` int(11) DEFAULT NULL
155155
)
156156
slave-bin.000001 # Annotate_rows # # create table t2 select * from t9

sql/handler.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2466,7 +2466,8 @@ struct Table_specification_st: public HA_CREATE_INFO,
24662466
}
24672467
bool is_atomic_replace() const
24682468
{
2469-
return or_replace() && is_atomic_replace_usable();
2469+
return or_replace() && !or_replace_slave_generated() &&
2470+
is_atomic_replace_usable();
24702471
}
24712472
};
24722473

sql/sql_table.cc

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4398,6 +4398,8 @@ bool HA_CREATE_INFO::finalize_atomic_replace(THD *thd, TABLE_LIST *orig_table)
43984398
char path[FN_REFLEN + 1];
43994399
cpath.str= path;
44004400

4401+
DBUG_ASSERT(is_atomic_replace());
4402+
44014403
debug_crash_here("ddl_log_create_before_install_new");
44024404
if (old_hton)
44034405
{
@@ -4498,7 +4500,10 @@ void HA_CREATE_INFO::finalize_ddl(THD *thd, bool roll_back)
44984500
debug_crash_here("ddl_log_create_log_complete");
44994501
ddl_log_complete(ddl_log_state_create);
45004502
debug_crash_here("ddl_log_create_log_complete2");
4501-
(void) ddl_log_revert(thd, ddl_log_state_rm);
4503+
if (is_atomic_replace())
4504+
(void) ddl_log_revert(thd, ddl_log_state_rm);
4505+
else
4506+
ddl_log_complete(ddl_log_state_rm);
45024507
debug_crash_here("ddl_log_create_log_complete3");
45034508
}
45044509
}

0 commit comments

Comments
 (0)