Browse Source
MDEV-25334 FTWRL/Backup blocks DDL on temporary tables with binlog enabled, assertion fails in Diagnostics_area::set_error_status
MDEV-25334 FTWRL/Backup blocks DDL on temporary tables with binlog enabled, assertion fails in Diagnostics_area::set_error_status
Fixed by adding a MDL_BACKUP_COMMIT lock before altering temporary tables whose creation was logged to binary log (in which case the ALTER TABLE must also be logged)pull/1801/head
3 changed files with 107 additions and 3 deletions
-
40mysql-test/main/backup_lock_binlog.result
-
49mysql-test/main/backup_lock_binlog.test
-
21sql/sql_table.cc
@ -0,0 +1,40 @@ |
|||
# |
|||
# MDEV-25334 FTWRL/Backup blocks DDL on temporary tables with binlog |
|||
# enabled assertion fails in Diagnostics_area::set_error_status |
|||
# |
|||
select @@binlog_format; |
|||
@@binlog_format |
|||
MIXED |
|||
connect con1,localhost,root,,; |
|||
connection default; |
|||
# |
|||
# Test 1 |
|||
# |
|||
CREATE TEMPORARY TABLE tmp (a INT); |
|||
connection con1; |
|||
FLUSH TABLES WITH READ LOCK; |
|||
connection default; |
|||
SET lock_wait_timeout= 1; |
|||
ALTER TABLE tmp; |
|||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction |
|||
connection con1; |
|||
unlock tables; |
|||
connection default; |
|||
drop table tmp; |
|||
# |
|||
# Test 2 (In statement format to ensure temporary table gets logged) |
|||
# |
|||
set @@binlog_format=statement; |
|||
CREATE TEMPORARY TABLE tmp (a INT); |
|||
connection con1; |
|||
BACKUP STAGE START; |
|||
BACKUP STAGE BLOCK_COMMIT; |
|||
connection default; |
|||
SET lock_wait_timeout= 1; |
|||
ALTER TABLE tmp; |
|||
ERROR HY000: Lock wait timeout exceeded; try restarting transaction |
|||
connection con1; |
|||
BACKUP STAGE end; |
|||
connection default; |
|||
drop table tmp; |
|||
disconnect con1; |
|||
@ -0,0 +1,49 @@ |
|||
--source include/have_binlog_format_mixed_or_statement.inc |
|||
|
|||
# |
|||
# Tests involving locks and binlog |
|||
# |
|||
|
|||
--echo # |
|||
--echo # MDEV-25334 FTWRL/Backup blocks DDL on temporary tables with binlog |
|||
--echo # enabled assertion fails in Diagnostics_area::set_error_status |
|||
--echo # |
|||
|
|||
select @@binlog_format; |
|||
--connect (con1,localhost,root,,) |
|||
connection default; |
|||
|
|||
--echo # |
|||
--echo # Test 1 |
|||
--echo # |
|||
|
|||
CREATE TEMPORARY TABLE tmp (a INT); |
|||
--connection con1 |
|||
FLUSH TABLES WITH READ LOCK; |
|||
--connection default |
|||
SET lock_wait_timeout= 1; |
|||
--error ER_LOCK_WAIT_TIMEOUT |
|||
ALTER TABLE tmp; |
|||
--connection con1 |
|||
unlock tables; |
|||
--connection default |
|||
drop table tmp; |
|||
|
|||
--echo # |
|||
--echo # Test 2 (In statement format to ensure temporary table gets logged) |
|||
--echo # |
|||
|
|||
set @@binlog_format=statement; |
|||
CREATE TEMPORARY TABLE tmp (a INT); |
|||
--connection con1 |
|||
BACKUP STAGE START; |
|||
BACKUP STAGE BLOCK_COMMIT; |
|||
--connection default |
|||
SET lock_wait_timeout= 1; |
|||
--error ER_LOCK_WAIT_TIMEOUT |
|||
ALTER TABLE tmp; |
|||
--connection con1 |
|||
BACKUP STAGE end; |
|||
--connection default |
|||
drop table tmp; |
|||
--disconnect con1 |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue