diff options
author | Sergei Golubchik <serg@mariadb.org> | 2022-06-29 16:58:33 +0200 |
---|---|---|
committer | Nikita Malyavin <nikitamalyavin@gmail.com> | 2022-10-17 15:24:45 +0300 |
commit | 56434b41ef784a70eacbb96b662af89d3c182f26 (patch) | |
tree | 40fb1a800c2e6f9cbc2931ce5f1ac9edb2ba50fb | |
parent | bac2c8dbc0661cda6a64733e0ca852e7e005f40a (diff) | |
download | mariadb-git-56434b41ef784a70eacbb96b662af89d3c182f26.tar.gz |
MDEV-28944 XA assertions failing in binlog_rollback and binlog_commit
-rw-r--r-- | mysql-test/main/alter_table_online.result | 19 | ||||
-rw-r--r-- | mysql-test/main/alter_table_online.test | 22 | ||||
-rw-r--r-- | sql/sql_table.cc | 2 |
3 files changed, 43 insertions, 0 deletions
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 48dc7191ece..e1db37bae75 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -12404,6 +12404,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 { |