Bug #18559 | log tables cannot change engine, and gets deadlocked when dropping w/ log on | ||
---|---|---|---|
Submitted: | 27 Mar 2006 22:02 | Modified: | 10 Aug 2006 16:30 |
Reporter: | Tobias Asplund | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Logging | Severity: | S3 (Non-critical) |
Version: | 5.1.7/5.1.8BK | OS: | FreeBSD (FreeBSD/Linux Suse) |
Assigned to: | Petr Chardin | CPU Architecture: | Any |
[27 Mar 2006 22:02]
Tobias Asplund
[28 Mar 2006 15:28]
Valeriy Kravchuk
Thank you for a problem report. Please, specify the exact version (or ChangeSet) used. Why do you think there is a deadlock?
[28 Mar 2006 17:12]
Tobias Asplund
Sorry, could have been more clear. The mysql thread hangs until you kill it, displaying the output in the mysqladmin processlist command until killed.
[28 Mar 2006 17:41]
MySQL Verification Team
Thank you for the bug report.
[28 Jul 2006 14:06]
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/9708
[29 Jul 2006 21:13]
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/9777 ChangeSet@1.2254, 2006-07-30 01:09:23+04:00, petr@mysql.com +12 -0 Fix Bug #18559 "log tables cannot change engine, and gets deadlocked when dropping w/ log on" Log tables rely on concurrent insert machinery to add data. This means that log tables are always opened and locked by special (artificial) logger threads. Because of this, the thread which tries to drop a log table starts to wait for the table to be unlocked. Which will happen only if the log table is disabled. Alike situation happens if one tries to alter a log table. However in addition to the problem above, alter table calls check_if_locking_is_allowed() routine for the engine. The routine does not allow alter for the log tables. So, alter doesn't start waiting forever for logs to be disabled, but returns with an error. Another problem is that not all engines could be used for the log tables. That's because they need concurrent insert. In this patch we: (1) Explicitly disallow to drop/alter a log table if it is currently used by the logger. (2) Update MyISAM to support log tables (3) Allow to drop log tables/alter log tables if log is disabled At the same time we (4) Disallow to alter log tables to unsupported engine (after this patch CSV and MyISAM are alowed)
[30 Jul 2006 1:56]
Tobias Asplund
Just want to make sure that if MyISAM is used, so that a crashed MyISAM general log table will not prevent the server from working (just like out of disk for the general log will not stop the server).
[3 Aug 2006 17:32]
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/10021 ChangeSet@1.2254, 2006-08-03 21:28:15+04:00, petr@mysql.com +14 -0 Fix Bug #18559 "log tables cannot change engine, and gets deadlocked when dropping w/ log on" Log tables rely on concurrent insert machinery to add data. This means that log tables are always opened and locked by special (artificial) logger threads. Because of this, the thread which tries to drop a log table starts to wait for the table to be unlocked. Which will happen only if the log table is disabled. Alike situation happens if one tries to alter a log table. However in addition to the problem above, alter table calls check_if_locking_is_allowed() routine for the engine. The routine does not allow alter for the log tables. So, alter doesn't start waiting forever for logs to be disabled, but returns with an error. Another problem is that not all engines could be used for the log tables. That's because they need concurrent insert. In this patch we: (1) Explicitly disallow to drop/alter a log table if it is currently used by the logger. (2) Update MyISAM to support log tables (3) Allow to drop log tables/alter log tables if log is disabled At the same time we (4) Disallow to alter log tables to unsupported engine (after this patch CSV and MyISAM are alowed) Recommit with review fixes.
[10 Aug 2006 10:18]
Tomash Brechko
Pushed to 5.1.12.
[10 Aug 2006 16:30]
Paul DuBois
The section on the log tables has been updated to say this: By default, the log tables use the CSV storage engine that writes data in comma-separated values format. For those users who have access to the .CSV files that contain log table data, the files are easy to import into other programs such as spreadsheets that can process CSV input. Beginning with MySQL 5.1.2, the log tables can be altered to use the MyISAM storage engine. You cannot use ALTER TABLE to alter a log table that is in use. The log must be disabled first. No engines other than CSV or MyISAM are legal for the log tables. The use of DROP TABLE for log tables is similarly restricted: It cannot be used to drop a log table that is in use. The log must be disabled first. Also noted the bugfix and behavior changes in the 5.1.12 changelog.
[10 Aug 2006 16:37]
Paul DuBois
Previous comment should say: Beginning with MySQL 5.1.12, ...
[15 Sep 2006 9:20]
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/11999 ChangeSet@1.2307, 2006-09-15 13:07:23+04:00, petr@mysql.com +8 -0 Post-review fixes for Bug #18559 "log tables cannot change engine, and gets deadlocked when dropping w/ log on": 1) Add more generic error messages 2) Add new handlerton flag for engines, which support log tables 3) Remove (log-tables related) mutex lock in myisam to improve performance