Bug #39602 Backup: deadlock between backup and myisam
| Submitted: | 23 Sep 2008 15:28 | Modified: | 15 Nov 2008 1:31 |
|---|---|---|---|
| Reporter: | Jørgen Løland | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Backup | Severity: | S3 (Non-critical) |
| Version: | mysql-6.0-backup | OS: | Linux (Ubuntu x86/64) |
| Assigned to: | Jørgen Løland | CPU Architecture: | Any |
[23 Sep 2008 15:28]
Jørgen Løland
[23 Sep 2008 15:31]
Jørgen Løland
This bug blocks testing of bug#32465
[23 Sep 2008 15:34]
Jørgen Løland
The above test script will hang on either of the reap commands (whichever is called first).
[24 Sep 2008 1:27]
MySQL Verification Team
Thank you for the bug report.
[25 Sep 2008 12:59]
Jørgen Løland
There is a deadlock between these threads. This is what happens:
The delete thread:
------------------
Blocked waiting for write lock here:
#0 wait_for_lock (wait=0x975de90, data=0x97ba318, in_wait_list=0 '\0')
at thr_lock.c:461
#1 0x08991bfe in thr_lock (data=0x97ba318, owner=0x9761624,
lock_type=TL_WRITE) at thr_lock.c:749
#2 0x08992574 in thr_multi_lock (data=0x97992a4, count=1, owner=0x9761624)
at thr_lock.c:1007
#3 0x08329071 in mysql_lock_tables (thd=0x9760e08, tables=0x977bf30, count=1,
flags=0, need_reopen=0xae4f6967) at lock.cc:307
#4 0x0838f06b in lock_tables (thd=0x9760e08, tables=0x977b910, count=1,
flags=0, need_reopen=0xae4f6967) at sql_base.cc:4417
#5 0x08396150 in open_and_lock_tables_derived (thd=0x9760e08,
tables=0x977b910, derived=true, flags=0) at sql_base.cc:4122
#6 0x0835031c in open_and_lock_tables (thd=0x9760e08, tables=0x977b910)
at ../../sql/mysql_priv.h:1610
#7 0x083f615a in mysql_delete (thd=0x9760e08, table_list=0x977b910,
conds=0x977be40, order=0x976241c, limit=18446744073709551615, options=0,
The backup thread:
------------------
Blocked waiting for global read lock here:
#0 lock_global_read_lock (thd=0x9744dd0) at lock.cc:1139
#1 0x08a3ef89 in backup::block_commits (thd=0x9744dd0, tables=0x0)
at data_backup.cc:378
#2 0x08a3f6d3 in backup::write_table_data (thd=0x9744dd0, info=@0x978ca80,
s=@0x97697f8) at data_backup.cc:590
#3 0x08a3825b in Backup_restore_ctx::do_backup (this=0xae527cb0)
at kernel.cc:914
#4 0x08a3876e in execute_backup_command (thd=0x9744dd0, lex=0x9746004,
backupdir=0xae5281f8) at kernel.cc:202
#5 0x08344fbc in mysql_execute_command (thd=0x9744dd0) at sql_parse.cc:2204
#6 0x0834d43f in mysql_parse (thd=0x9744dd0,
inBuf=0x975ede8 "BACKUP DATABASE bup_commit_blocker TO \"bup_commit_blocker.bak\"", length=62, found_semicolon=0xae528bf8) at sql_parse.cc:5578
[2 Oct 2008 9:13]
Jørgen Løland
This is what causes the deadlock:
T1
T2
start BACKUP
do the init phase
lock table t1 in prepare() call (for myisam driver)
start DML which updates t1
call wait_if_global_read_lock() => protect_against_global_read_lock++
try to lock table t1
HANGS waiting for t1 lock
try to get global read lock with global_read_lock()
HANGS waiting for protect_against_global_read_lock to become 0
[24 Oct 2008 13:15]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/57006 2717 Jorgen Loland 2008-10-24 Bug#39602 - Backup: deadlock between backup and myisam Backup code sets table locks in MyISAM and default drivers before blocking DMLs in the commit blocker. DML operations do this in reverse order. A deadlock could therefore occur. The patch moves the commit blocker before the table locks are set, thereby removing the potential for a deadlock. This is a temporary solution. WL#4610 is about implementing a refined commit blocker without this problem.
[27 Oct 2008 9:27]
Rafal Somla
Good to push.
[29 Oct 2008 12:03]
Øystein Grøvlen
Patch approved since tests will be added as part of BUG#32465.
[29 Oct 2008 12:08]
Jørgen Løland
Tests will be included in bug#32465 as part of a complete commit blocker test refactoring
[29 Oct 2008 12:14]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/57300 2721 Jorgen Loland 2008-10-29 Bug#39602 - Backup: deadlock between backup and myisam Backup code sets table locks in MyISAM and default drivers before blocking DMLs in the commit blocker. DML operations do this in reverse order. A deadlock could therefore occur. The patch moves the commit blocker before the table locks are set, thereby removing the potential for a deadlock. This is a temporary solution. WL#4610 is about implementing a refined commit blocker without this problem.
[14 Nov 2008 14:49]
Bugs System
Pushed into 6.0.9-alpha (revid:jorgen.loland@sun.com-20081029121633-ss9cfrr7muiesxbn) (version source revid:jorgen.loland@sun.com-20081114134411-xypyf8wyjc2nm3ly) (pib:5)
[15 Nov 2008 1:31]
Paul DuBois
Noted in 6.0.9 changelog. Concurrent execution of BACKUP DATABASE and DML operations on MyISAM tables could produce a deadlock.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.047 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.