Bug #46602 | FLUSH TABLES WITH READ LOCK deadlocks against concurrent CREATE VIEW | ||
---|---|---|---|
Submitted: | 7 Aug 2009 14:08 | Modified: | 10 Nov 2009 13:20 |
Reporter: | Matthias Leich | Email Updates: | |
Status: | Can't repeat | Impact on me: | |
Category: | MySQL Server: Locking | Severity: | S3 (Non-critical) |
Version: | 5.4 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | deadlock, flush |
[7 Aug 2009 14:08]
Matthias Leich
[7 Aug 2009 15:14]
Matthias Leich
Non final grammars: Test grammar: ------------- database_name: ; ddl: CREATE ALGORITHM = UNDEFINED VIEW . { $view_table_name_n = "t1_" . $view_piece . $prng->int(0,$name_space_width) . $normal_piece ; $view_table_name = $view_table_name_n } { $view_table_item_n = $database_name . " . " . $view_table_name_n ; $view_table_item = $view_table_item_n ; return undef } AS SELECT _field_list FROM A; query: CREATE ALGORITHM = UNDEFINED VIEW . { $view_table_name_n = "t1_" . $view_piece . $prng->int(0,$name_space_width) . $normal_piece ; $view_table_name = $view_table_name_n } { $view_table_item_n = $database_name . " . " . $view_table_name_n ; $view_table_item = $view_table_item_n ; return undef } AS SELECT _field_list FROM A | FLUSH TABLES WITH READ LOCK; Object creation grammar: ------------------------ $tables = { rows => [0, 1, 10 ] }; $fields = { types => [ 'int', 'char', 'enum', 'set' ], indexes => [undef, 'key' ], null => [undef, 'not null'], default => [undef, 'default null'], sign => [undef, 'unsigned'], charsets => ['utf8', 'latin1'] }; $data = { numbers => [ 'digit', 'null', undef ], strings => [ 'letter', 'english' ], blobs => [ 'data' ], temporals => ['date', 'year', 'null', undef ] } The grammars above look very ugly and I am trying to simplify them, but till now all attempts caused that the deadlock disappeared.
[21 Oct 2009 17:32]
Matthias Leich
The problem was: 1. Two or more sessions run a random mixup of - FLUSH TABLES WITH READ LOCK and - CREATE VIEW ... (high likelihood that this VIEW already exists) 2. They end up after some time with deadlock. Some sessions are waiting for - release of readlock or - Flushing tables' All other sessions observe the PROCESSLIST or are inactive. The deadlock will not disappear if you remove these sessions. Such a deadlock is a bug. I rechecked today on mysql-6.0-codebase-bugfixing revno: 3654 2009-10-15 and was unable to reproduce the problem. So I assume that some of the various fixes of other locking related bugs removed the problem.