Bug #6633 | InnoDB crashes when converting table from MyISAM to InnoDB | ||
---|---|---|---|
Submitted: | 15 Nov 2004 11:41 | Modified: | 30 Nov 2004 16:24 |
Reporter: | jocelyn fournier (Silver Quality Contributor) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: InnoDB storage engine | Severity: | S1 (Critical) |
Version: | 4.1.8 bktree | OS: | Linux (Linux) |
Assigned to: | Marko Mäkelä | CPU Architecture: | Any |
[15 Nov 2004 11:41]
jocelyn fournier
[15 Nov 2004 13:06]
Marko Mäkelä
Hi Jocelyn, Many thanks for your report. The bugs are most likely caused by my patch to ALTER TABLE, so that it would commit the inserts to the temporary table after every 10,000 rows. The logic only accounts for the case when the table already is in InnoDB format, and I didn't test the conversion from MyISAM to InnoDB. My bad.
[15 Nov 2004 13:13]
jocelyn fournier
Hi Marko, So the second bug is probably not related to the first one ? (since for the second crash, the table was already in InnoDB format). Thanks ! Jocelyn
[15 Nov 2004 13:41]
Heikki Tuuri
Marko, only put fprintf(stderr, ...) instead of ut_a(...), if the error is not absolutely fatal. We cannot test all types of ALTER TABLE, and what is MySQL's lock behavior in them. Regards, Heikki
[15 Nov 2004 14:26]
Marko Mäkelä
Jocelyn, Both assertion failures are related to my ALTER TABLE modification. I've now committed a fix to the assertion failure in ha_innodb.cc. Next, I'll try to reproduce the second failure with your test case.
[15 Nov 2004 15:01]
Marko Mäkelä
Jocelyn, I was able to reproduce the assertion failure with your test data in lock_get_ix_table(), even after my fix to ha_innodb.cc applied. I'll make another patch tomorrow.
[26 Nov 2004 23:22]
Marko Mäkelä
Jocelyn, I'm sorry for the delay; I had to work on other things. I've now pushed a fix that corrects both problems exposed by your test case. ALTER TABLE from other engine to InnoDB caused an assertion failure. Also, ALTER TABLE or OPTIMIZE TABLE will no longer attempt to commit after every 10,000 rows if the table is originally in InnoDB format, and there are other locks than a single IX or IS lock on it. This means that the intermediate commits are disabled for tables containing an auto_increment field.
[30 Nov 2004 16:24]
Marko Mäkelä
Thank you for your bug report. This issue has been committed to our source repository of that product and will be incorporated into the next release. If necessary, you can access the source repository and build the latest available version, including the bugfix, yourself. More information about accessing the source trees is available at http://www.mysql.com/doc/en/Installing_source_tree.html Additional info: I made a better fix that allows intermediate commits for tables containing auto_increment columns, and pushed it to the 4.1 tree.
[16 Jan 2009 9:41]
Marko Mäkelä
See also Bug #42152.