From: Jon Olav Hauglid Date: April 4 2011 11:08am Subject: bzr commit into mysql-5.5 branch (jon.hauglid:3420) Bug#11853126 List-Archive: http://lists.mysql.com/commits/134610 X-Bug: 11853126 Message-Id: <201104041108.p34B8DGo024022@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2534522322034557976==" --===============2534522322034557976== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-5.5-bug11853126/ based on revid:vasil.dimov@stripped 3420 Jon Olav Hauglid 2011-04-04 Bug#11853126 RE-ENABLE CONCURRENT READS WHILE CREATING SECONDARY INDEX IN INNODB The patches for Bug#11751388 and Bug#11784056 enabled concurrent reads while creating secondary indexes in InnoDB. However, they introduced a regression. This regression occured if ALTER TABLE failed after the index had been added, for example during the lock upgrade needed to update .FRM. If this happened, InnoDB and the server got out of sync with regards to which indexes actually existed. Therefore the patch for Bug#11815600 again disabled concurrent reads. This patch re-enables concurrent reads. The original regression is fixed by dropping the recently added index if ALTER TABLE fails after the index has been added inside InnoDB. An instance of the table is then opened in order to rebuild the InnoDB index translation table. Test case added to innodb_mysql_lock.test. modified: mysql-test/r/innodb_mysql_lock.result mysql-test/t/innodb_mysql_lock.test sql/sql_table.cc === modified file 'mysql-test/r/innodb_mysql_lock.result' --- a/mysql-test/r/innodb_mysql_lock.result 2010-06-26 20:23:28 +0000 +++ b/mysql-test/r/innodb_mysql_lock.result 2011-04-04 11:07:59 +0000 @@ -148,3 +148,27 @@ COMMIT; # Connection default DROP TABLE t1, t2; DROP VIEW v1; +# +# Bug#11815600 [ERROR] INNODB COULD NOT FIND INDEX PRIMARY +# KEY NO 0 FOR TABLE IN ERROR LOG +# +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (id INT PRIMARY KEY, value INT) ENGINE = InnoDB; +INSERT INTO t1 VALUES (1, 12345); +# Connection default +START TRANSACTION; +SELECT * FROM t1; +id value +1 12345 +# Connection con1 +SET lock_wait_timeout=1; +ALTER TABLE t1 ADD INDEX idx(value); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +ALTER TABLE t1 ADD INDEX idx(value); +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +# Connection default +SELECT * FROM t1; +id value +1 12345 +COMMIT; +DROP TABLE t1; === modified file 'mysql-test/t/innodb_mysql_lock.test' --- a/mysql-test/t/innodb_mysql_lock.test 2010-08-06 11:29:37 +0000 +++ b/mysql-test/t/innodb_mysql_lock.test 2011-04-04 11:07:59 +0000 @@ -279,6 +279,44 @@ disconnect con2; disconnect con3; +--echo # +--echo # Bug#11815600 [ERROR] INNODB COULD NOT FIND INDEX PRIMARY +--echo # KEY NO 0 FOR TABLE IN ERROR LOG +--echo # + +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings + +CREATE TABLE t1 (id INT PRIMARY KEY, value INT) ENGINE = InnoDB; +INSERT INTO t1 VALUES (1, 12345); + +--connect (con1,localhost,root) + +--echo # Connection default +connection default; +START TRANSACTION; +SELECT * FROM t1; + +--echo # Connection con1 +--connection con1 +SET lock_wait_timeout=1; +# Test with two timeouts, as the first version of this patch +# only worked with one timeout. +--error ER_LOCK_WAIT_TIMEOUT +ALTER TABLE t1 ADD INDEX idx(value); +--error ER_LOCK_WAIT_TIMEOUT +ALTER TABLE t1 ADD INDEX idx(value); + +--echo # Connection default +--connection default +SELECT * FROM t1; +COMMIT; + +DROP TABLE t1; +disconnect con1; + + # Check that all connections opened by test cases in this file are really # gone so execution of other tests won't be affected by their presence. --source include/wait_until_count_sessions.inc === modified file 'sql/sql_table.cc' --- a/sql/sql_table.cc 2011-03-25 14:03:44 +0000 +++ b/sql/sql_table.cc 2011-04-04 11:07:59 +0000 @@ -6591,7 +6591,29 @@ bool mysql_alter_table(THD *thd,char *ne my_casedn_str(files_charset_info, old_name); if (wait_while_table_is_used(thd, table, HA_EXTRA_PREPARE_FOR_RENAME)) + { + // If lock upgrade fails, we must drop any indexes recently added. + if (index_add_count) + { + /* + Temporarily set table-key_info to include information about the + indexes added above that we now need to drop. + */ + KEY *save_key_info= table->key_info; + table->key_info= key_info_buffer; + if ((error= table->file->prepare_drop_index(table, index_add_buffer, + index_add_count))) + table->file->print_error(error, MYF(0)); + else if ((error= table->file->final_drop_index(table))) + table->file->print_error(error, MYF(0)); + table->key_info= save_key_info; + // Reopen the table to rebuild the index translation table. + Open_table_context ot_ctx(thd, MYSQL_OPEN_REOPEN); + DBUG_ASSERT(!open_table(thd, table_list, thd->mem_root, &ot_ctx)); + table_list->table->m_needs_reopen= true; + } goto err_new_table_cleanup; + } close_all_tables_for_name(thd, table->s, --===============2534522322034557976== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-5.5-bug11853126/ # testament_sha1: 8e4cb7e32fd3447b7ad82418421dd0717cd8b55b # timestamp: 2011-04-04 13:08:02 +0200 # base_revision_id: vasil.dimov@stripped\ # hzpg39ur5685o25r # # Begin bundle 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 --===============2534522322034557976==--