From 3f619478f796eddbba6e39502fe941b285dd97b1 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 20:00:34 +0200 Subject: Adding upstream version 1:10.11.6. Signed-off-by: Daniel Baumann --- mysql-test/main/mdl.test | 137 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 mysql-test/main/mdl.test (limited to 'mysql-test/main/mdl.test') diff --git a/mysql-test/main/mdl.test b/mysql-test/main/mdl.test new file mode 100644 index 00000000..65d02d77 --- /dev/null +++ b/mysql-test/main/mdl.test @@ -0,0 +1,137 @@ +--source include/have_metadata_lock_info.inc +--source include/have_innodb.inc + +--echo # +--echo # MDEV-12882 - Assertion `mdl_ticket->m_type == MDL_SHARED_UPGRADABLE || +--echo # mdl_ticket->m_type == MDL_SHARED_NO_WRITE || +--echo # mdl_ticket->m_type == MDL_SHARED_NO_READ_WRITE || +--echo # mdl_ticket->m_type == MDL_SHARED_READ' +--echo # failed in MDL_context::upgrade_shared_lock +--echo # +--disable_service_connection +CREATE TABLE t1(a INT) ENGINE=InnoDB; +CREATE TABLE t3(a INT) ENGINE=myisam; +LOCK TABLES t1 WRITE CONCURRENT, t1 AS t2 READ; +SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info +WHERE TABLE_NAME NOT LIKE 'innodb_%_stats'; +UNLOCK TABLES; +LOCK TABLES t1 AS t2 READ, t1 WRITE CONCURRENT; +SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info +WHERE TABLE_NAME NOT LIKE 'innodb_%_stats'; +UNLOCK TABLES; +LOCK TABLES t1 WRITE CONCURRENT, t3 WRITE; +SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info +WHERE TABLE_NAME NOT LIKE 'innodb_%_stats'; +UNLOCK TABLES; +LOCK TABLES t3 WRITE, t1 WRITE CONCURRENT; +SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info +WHERE TABLE_NAME NOT LIKE 'innodb_%_stats'; +UNLOCK TABLES; +LOCK TABLES t1 WRITE, mysql.user WRITE; +SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info +WHERE TABLE_NAME NOT LIKE 'innodb_%_stats'; +UNLOCK TABLES; +--error ER_CANT_LOCK_LOG_TABLE +LOCK TABLES mysql.general_log WRITE; +# The following may work in embedded server +--error 0,ER_DBACCESS_DENIED_ERROR +LOCK TABLES t1 WRITE,information_schema.tables READ; +UNLOCK TABLES; +DROP TABLE t1,t3; + +--echo # +--echo # Check MDL locks taken for different kind of tables by open +--echo # + +CREATE TABLE t1(a INT) ENGINE=InnoDB; +CREATE TABLE t3(a INT) ENGINE=myisam; +connect(purge_control,localhost,root,,); +START TRANSACTION WITH CONSISTENT SNAPSHOT; +connect (locker,localhost,root,,); +connection default; + +FLUSH TABLES WITH READ LOCK; +connection locker; +--send insert into t1 values (1) +connection default; +# Wait till above update gets blocked on a user lock. +let $wait_condition= + select count(*) > 0 from information_schema.processlist + where state = "Waiting for backup lock"; +--source include/wait_condition.inc +connection default; +SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info +WHERE TABLE_NAME NOT LIKE 'innodb_%_stats'; +unlock tables; +connection locker; +--reap +unlock tables; +connection default; + +FLUSH TABLES WITH READ LOCK; +connection locker; +--send insert into t3 values (2) +connection default; +# Wait till above update gets blocked on a user lock. +let $wait_condition= + select count(*) > 0 from information_schema.processlist + where state = "Waiting for backup lock"; +--source include/wait_condition.inc +connection default; +SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info +WHERE TABLE_NAME NOT LIKE 'innodb_%_stats'; +unlock tables; +connection locker; +--reap +unlock tables; +disconnect purge_control; +connection default; + +disconnect locker; +DROP TABLE t1,t3; +--enable_service_connection + +--echo # +--echo # MDEV-28820 MyISAM wrong server status flags +--echo # +--disable_view_protocol +# MyISAM alone doesn't start a transaction or takes transactional MDL +create table t1 (a int); +set autocommit=0; +select @@in_transaction; +select * from t1; +select @@in_transaction; +connect foo,localhost,root; +drop table t1; +connection default; +set autocommit=1; + +# MyISAM in a transaction (started by InnoDB) takes transactional MDL all right +create table t1 (a int); +create table t2 (b int) engine=innodb; +set autocommit=0; +select @@in_transaction; +select * from t2; +select @@in_transaction; +select * from t1; +connection foo; +send drop table t1; +connection default; +let $wait_condition= + select count(*) > 0 from information_schema.processlist + where state = "Waiting for table metadata lock"; +--source include/wait_condition.inc +select * from t1; +commit; + +connection foo; +reap; +disconnect foo; +connection default; +set autocommit=default; +drop table t2; +--enable_view_protocol + +--echo # +--echo # End of 10.4 tests +--echo # -- cgit v1.2.3