1
0
mirror of https://github.com/MariaDB/server.git synced 2026-01-06 05:22:24 +03:00

MDEV-27006 Assertion `!lock_trx_has_sys_table_locks(trx)' failed in dberr_t row_discard_tablespace_for_mysql(dict_table_t*, trx_t*)

- InnoDB import operation fails when it tries to unlock data
dictionary lock before releasing the lock on system tables.
This commit is contained in:
Thirunarayanan Balathandayuthapani
2021-11-09 18:08:12 +05:30
parent ba4f8e317d
commit 3989d3800d
3 changed files with 18 additions and 3 deletions

View File

@@ -10,3 +10,11 @@ ALTER TABLE imp_t1 IMPORT TABLESPACE;
ERROR HY000: Schema mismatch (ROW_FORMAT mismatch)
DROP TABLE imp_t1, t1;
SET GLOBAL innodb_checksum_algorithm=@save_innodb_checksum_algorithm;
#
# MDEV-27006 Assertion `!lock_trx_has_sys_table_locks(trx)' --echo # failed in dberr_t row_discard_tablespace_for_mysql
# (dict_table_t*, trx_t*)
CREATE TABLE t1 (c INT KEY) ENGINE=INNODB;
CREATE TABLE t2 (c INT KEY,FOREIGN KEY(c) REFERENCES t1 (c)) ENGINE=INNODB;
ALTER TABLE t1 DISCARD TABLESPACE;
ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails
DROP TABLE t2, t1;

View File

@@ -18,3 +18,12 @@ DROP TABLE imp_t1, t1;
--remove_file $datadir/test/imp_t1.ibd
SET GLOBAL innodb_checksum_algorithm=@save_innodb_checksum_algorithm;
--echo #
--echo # MDEV-27006 Assertion `!lock_trx_has_sys_table_locks(trx)' --echo # failed in dberr_t row_discard_tablespace_for_mysql
--echo # (dict_table_t*, trx_t*)
CREATE TABLE t1 (c INT KEY) ENGINE=INNODB;
CREATE TABLE t2 (c INT KEY,FOREIGN KEY(c) REFERENCES t1 (c)) ENGINE=INNODB;
--error ER_ROW_IS_REFERENCED_2
ALTER TABLE t1 DISCARD TABLESPACE;
DROP TABLE t2, t1;

View File

@@ -2495,6 +2495,7 @@ rollback:
fts_optimize_add_table(table);
}
trx->rollback();
row_mysql_unlock_data_dictionary(trx);
return err;
}
}
@@ -2508,10 +2509,7 @@ rollback:
err= row_discard_tablespace_foreign_key_checks(trx, table);
if (err != DB_SUCCESS)
{
row_mysql_unlock_data_dictionary(trx);
goto rollback;
}
/* Note: The following cannot be rolled back. Rollback would see the
UPDATE of SYS_INDEXES.TABLE_ID as two operations: DELETE and INSERT.