[MDEV-12620] set lock_wait_timeout = 1;flush tables with read lock; lock not released after timeout Created: 2017-04-28  Updated: 2017-06-16  Resolved: 2017-06-16

Status: Closed
Project: MariaDB Server
Component/s: Locking
Affects Version/s: 10.0.13, 10.0, 10.1, 10.1.22, 10.2.5, 10.2
Fix Version/s: 10.1.25, 10.2.7, 10.3.1

Type: Bug Priority: Critical
Reporter: Richard Stracke Assignee: Sergey Vojtovich
Resolution: Fixed Votes: 0
Labels: None
Environment:

probably all, tested on Centos 6 and Ubuntu Xenial.



 Description   

Reproducing:

Prepare:

Drop table if exists t;
CREATE TABLE `t` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1 ;

Session 1:

set autocommit = 0;
insert into t values(1);
select sleep(10) from t;

Session 2 (execute before sleep(10) is finshed)

set lock_wait_timeout = 1;flush tables with read lock;

Checked with metadata plugin:

MariaDB [(none)]> select *                
    -> from information_schema.METADATA_LOCK_INFO;
Select thread_id,lock_mode,lock_type
 from information_schema.METADATA_LOCK_INFO;
+-----------+------------+------------------+
| thread_id | lock_mode  | lock_type        |
+-----------+------------+------------------+
|         7 | MDL_SHARED | Global read lock |
|         7 | MDL_SHARED | Commit lock      |
|         6 | MDL_SHARED_WRITE | Table metadata lock      |
+-----------+------------+------------------+

Even if the metadatalock from the uncommited transaction from session 1 will be released with abort session 1, commit lock and global read lock still exists.



 Comments   
Comment by Arnaud Adant [ 2017-05-09 ]

Also occurs in MySQL 5.7.18 btw.

Comment by Sergey Vojtovich [ 2017-06-16 ]

serg, please review fix for this bug.

Generated at Thu Feb 08 07:59:08 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.