diff --git a/mysql-test/main/alter_table_online.result b/mysql-test/main/alter_table_online.result index 5015b4cb5b7..903fa86de94 100644 --- a/mysql-test/main/alter_table_online.result +++ b/mysql-test/main/alter_table_online.result @@ -54,3 +54,22 @@ c c2 stamp 5 5 0000-00-00 00:00:00 drop table t; set sql_mode=default; +# +# MDEV-28944 XA assertions failing in binlog_rollback and binlog_commit +# +CREATE TABLE t (a INT) ENGINE=MyISAM; +INSERT INTO t VALUES (1); +connect con1,localhost,root,,test; +XA START 'xid'; +SELECT * FROM t; +a +1 +connection default; +ALTER TABLE t NOWAIT ADD KEY (a); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +connection con1; +UPDATE t SET a = 2; +XA END 'xid'; +XA COMMIT 'xid' ONE PHASE; +DROP TABLE t; +disconnect con1; diff --git a/mysql-test/main/alter_table_online.test b/mysql-test/main/alter_table_online.test index a9e20fa05f6..92710f46cbf 100644 --- a/mysql-test/main/alter_table_online.test +++ b/mysql-test/main/alter_table_online.test @@ -33,3 +33,25 @@ alter table t modify c date; select * from t; drop table t; set sql_mode=default; + +--echo # +--echo # MDEV-28944 XA assertions failing in binlog_rollback and binlog_commit +--echo # +CREATE TABLE t (a INT) ENGINE=MyISAM; +INSERT INTO t VALUES (1); + +--connect (con1,localhost,root,,test) +XA START 'xid'; +SELECT * FROM t; + +--connection default +--error ER_LOCK_WAIT_TIMEOUT +ALTER TABLE t NOWAIT ADD KEY (a); + +--connection con1 +UPDATE t SET a = 2; +XA END 'xid'; +XA COMMIT 'xid' ONE PHASE; + +DROP TABLE t; +--disconnect con1 diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 7e9663b5656..80ceebfe277 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -12011,6 +12011,8 @@ copy_data_between_tables(THD *thd, TABLE *from, TABLE *to, thd_progress_next_stage(thd); error= online_alter_read_from_binlog(thd, &rgi, binlog); } + if (error) + from->s->tdc->flush_unused(1); // to free the binlog } else if (online) // error was on copy stage {