mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
cff7f022d8
with open HANDLER This patch changes the code for table renames to not drop metadata locks. Since table renames are done as a part of ALTER DATABASE ... UPGRADE, dropping metadata locks in the middle of execution can result in wrong binlog order since it means that no locks are held when the binlog is written to. The RENAME TABLE statement is unafffected since it auto commits and therefore already drops metadata locks at the end of execution. This patch also reverts the regression test for Bug#48940 back to its original version. The test was temporarily changed due to the issue mentioned above.
95 lines
2.4 KiB
Text
95 lines
2.4 KiB
Text
drop database if exists mysqltest1;
|
|
create schema foo;
|
|
show create schema foo;
|
|
Database Create Database
|
|
foo CREATE DATABASE `foo` /*!40100 DEFAULT CHARACTER SET latin1 */
|
|
show schemas;
|
|
Database
|
|
information_schema
|
|
foo
|
|
mtr
|
|
mysql
|
|
performance_schema
|
|
test
|
|
drop schema foo;
|
|
#
|
|
# Bug #48940 MDL deadlocks against mysql_rm_db
|
|
#
|
|
DROP SCHEMA IF EXISTS schema1;
|
|
# Connection default
|
|
CREATE SCHEMA schema1;
|
|
CREATE TABLE schema1.t1 (a INT);
|
|
SET autocommit= FALSE;
|
|
INSERT INTO schema1.t1 VALUES (1);
|
|
# Connection 2
|
|
DROP SCHEMA schema1;
|
|
# Connection default
|
|
ALTER SCHEMA schema1 DEFAULT CHARACTER SET utf8;
|
|
Got one of the listed errors
|
|
SET autocommit= TRUE;
|
|
# Connection 2
|
|
# Connection default
|
|
#
|
|
# Bug #49988 MDL deadlocks with mysql_create_db, reload_acl_and_cache
|
|
#
|
|
DROP SCHEMA IF EXISTS schema1;
|
|
# Connection default
|
|
CREATE SCHEMA schema1;
|
|
CREATE TABLE schema1.t1 (id INT);
|
|
LOCK TABLE schema1.t1 WRITE;
|
|
# Connection con2
|
|
DROP SCHEMA schema1;
|
|
# Connection default
|
|
# CREATE SCHEMA used to give a deadlock.
|
|
# Now we prohibit CREATE SCHEMA in LOCK TABLES mode.
|
|
CREATE SCHEMA IF NOT EXISTS schema1;
|
|
ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
|
|
# UNLOCK TABLES so DROP SCHEMA can continue.
|
|
UNLOCK TABLES;
|
|
# Connection con2
|
|
# Connection default
|
|
#
|
|
# Bug#54360 Deadlock DROP/ALTER/CREATE DATABASE with open HANDLER
|
|
#
|
|
CREATE DATABASE db1;
|
|
CREATE TABLE db1.t1 (a INT);
|
|
INSERT INTO db1.t1 VALUES (1), (2);
|
|
# Connection con1
|
|
HANDLER db1.t1 OPEN;
|
|
# Connection default
|
|
# Sending:
|
|
DROP DATABASE db1;
|
|
# Connection con2
|
|
# Connection con1
|
|
CREATE DATABASE db2;
|
|
ALTER DATABASE db2 DEFAULT CHARACTER SET utf8;
|
|
DROP DATABASE db2;
|
|
HANDLER t1 CLOSE;
|
|
# Connection default
|
|
# Reaping: DROP DATABASE db1
|
|
#
|
|
# Tests for increased CREATE/ALTER/DROP DATABASE concurrency with
|
|
# database name locks.
|
|
#
|
|
DROP DATABASE IF EXISTS db1;
|
|
DROP DATABASE IF EXISTS db2;
|
|
# Connection default
|
|
CREATE DATABASE db1;
|
|
CREATE TABLE db1.t1 (id INT);
|
|
START TRANSACTION;
|
|
INSERT INTO db1.t1 VALUES (1);
|
|
# Connection 2
|
|
# DROP DATABASE should block due to the active transaction
|
|
# Sending:
|
|
DROP DATABASE db1;
|
|
# Connection 3
|
|
# But it should still be possible to CREATE/ALTER/DROP other databases.
|
|
CREATE DATABASE db2;
|
|
ALTER DATABASE db2 DEFAULT CHARACTER SET utf8;
|
|
DROP DATABASE db2;
|
|
# Connection default
|
|
# End the transaction so DROP DATABASE db1 can continue
|
|
COMMIT;
|
|
# Connection 2
|
|
# Reaping: DROP DATABASE db1
|
|
# Connection default;
|