Bug #46160 | ha_innobase::check_if_incompatible_data may be wrong when used for 5.1.36 | ||
---|---|---|---|
Submitted: | 14 Jul 2009 5:59 | Modified: | 30 Sep 2009 19:59 |
Reporter: | Yasufumi Kinoshita | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: InnoDB Plugin storage engine | Severity: | S3 (Non-critical) |
Version: | 5.1.36 + 1.0.3 | OS: | Any |
Assigned to: | Vasil Dimov | CPU Architecture: | Any |
Tags: | Contribution |
[14 Jul 2009 5:59]
Yasufumi Kinoshita
[14 Jul 2009 9:24]
Sveta Smirnova
Thank you for the report. Verified as described.
[14 Jul 2009 9:32]
Sveta Smirnova
Failed tests in my case are: main.innodb main.innodb_mysql main.innodb_bug42101-nonzero main.innodb-semi-consistent main.innodb_bug21704 main.innodb_bug42101
[15 Jul 2009 12:24]
Vasil Dimov
Yasufumi, The tests do not fail for me with the latest version of the plugin that is not published yet, Marko committed this change recently: ------------------------------------------------------------------------ r5392 | marko | 2009-06-22 14:58:20 +0300 (Mon, 22 Jun 2009) | 4 lines Changed paths: M /branches/zip/handler/ha_innodb.cc branches/zip: ha_innobase::check_if_incompatible_data(): When ROW_FORMAT=DEFAULT, do not compare to get_row_type(). Without this change, fast index creation will be disabled in recent versions of MySQL 5.1. ------------------------------------------------------------------------ --- cut --- Index: handler/ha_innodb.cc =================================================================== --- handler/ha_innodb.cc (revision 5391) +++ handler/ha_innodb.cc (revision 5392) @@ -9183,14 +9183,15 @@ ha_innobase::check_if_incompatible_data( info->auto_increment_value != 0) { return(COMPATIBLE_DATA_NO); } /* Check that row format didn't change */ - if ((info->used_fields & HA_CREATE_USED_ROW_FORMAT) && - get_row_type() != info->row_type) { + if ((info->used_fields & HA_CREATE_USED_ROW_FORMAT) + && info->row_type != ROW_TYPE_DEFAULT + && info->row_type != get_row_type()) { return(COMPATIBLE_DATA_NO); } /* Specifying KEY_BLOCK_SIZE requests a rebuild of the table. */ if (info->used_fields & HA_CREATE_USED_KEY_BLOCK_SIZE) { --- cut ---
[15 Jul 2009 13:14]
Vasil Dimov
Yasufumi, I think your patch is unnecessary restrictive, please verify my analysis: If the newly specified row format (info->row_type) is ROW_TYPE_DEFAULT, then your patch will check whether the current format (get_row_type()) is ROW_TYPE_COMPACT and will return COMPATIBLE_DATA_NO if it is not. I think this is unnecessary and COMPATIBLE_DATA_YES should be returned in this case because if info->row_type==ROW_TYPE_DEFAULT this means that no ROW_FORMAT= has been specified in the SQL and so the format remains whatever it has been and the new and the old table definitions are compatible. What do you think?
[29 Sep 2009 10:21]
Vasil Dimov
This has been fixed in r5392 and has been released in InnoDB Plugin 1.0.4.
[30 Sep 2009 19:59]
Paul DuBois
Noted in 5.4.2 changelog. For InnoDB tables, an unnecessary table rebuild for ALTER TABLE could sometimes occur if ROW_FORMAT was specified.