From: Alexander Nozdrin Date: March 9 2011 6:31pm Subject: bzr commit into mysql-trunk branch (alexander.nozdrin:3729) Bug#11815600 List-Archive: http://lists.mysql.com/commits/132708 X-Bug: 11815600 Message-Id: <201103091832.p297hZUF009971@rcsinet13.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============6472353263396638030==" --===============6472353263396638030== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/alik/MySQL/bzr/mysql-5.6.2-m5-release/ based on revid:alexander.barkov@stripped 3729 Alexander Nozdrin 2011-03-09 Cherry-picking merge from mysql-5.5.10-release. Original revision: ############################################### revno: 3167 revision-id: jon.hauglid@stripped parent: kent.boortz@stripped committer: Jon Olav Hauglid branch nick: mysql-5.5.10-release timestamp: Wed 2011-03-09 16:06:13 +0100 message: Bug#11815600 [ERROR] INNODB COULD NOT FIND INDEX PRIMARY KEY NO 0 FOR TABLE IN ERROR LOG With the changes made by the patches for Bug#11751388 and Bug#11784056, concurrent reads are allowed while secondary indexes are created in InnoDB. This means that the metadata lock on the affected table is not upgraded to exclusive until the .FRM is updated at the end of ALTER TABLE processing. The problem was that if this lock upgrade failed for some reason (e.g. timeout), the index information in the server and inside InnoDB would be out of sync. This would happen since the add index operation already was committed inside InnoDB but the table metadata inside the server had not been updated yet. This patch fixes the problem by (for now) reverting the effects of the patches for Bug#11751388 and Bug#11784056. Concurrent reads will now again be blocked during creation of secondary indexes in InnoDB. Test case added to innodb_mysql_lock.test. ############################################### modified: mysql-test/r/innodb_mysql_lock.result mysql-test/r/innodb_mysql_sync.result mysql-test/t/innodb_mysql_lock.test mysql-test/t/innodb_mysql_sync.test storage/innobase/handler/ha_innodb.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-03-09 18:31:30 +0000 @@ -148,3 +148,25 @@ 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; +# Connection default +CREATE TABLE t1 (id INT PRIMARY KEY, value INT) ENGINE = InnoDB; +INSERT INTO t1 VALUES (1, 12345); +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 +# Connection default +SELECT * FROM t1; +id value +1 12345 +COMMIT; +DROP TABLE t1; === modified file 'mysql-test/r/innodb_mysql_sync.result' --- a/mysql-test/r/innodb_mysql_sync.result 2011-01-26 13:23:29 +0000 +++ b/mysql-test/r/innodb_mysql_sync.result 2011-03-09 18:31:30 +0000 @@ -94,64 +94,6 @@ SET DEBUG_SYNC= 'RESET'; # Bug#42230 during add index, cannot do queries on storage engines # that implement add_index # -DROP DATABASE IF EXISTS db1; -DROP TABLE IF EXISTS t1; -# Test 1: Secondary index, should not block reads (original test case). -# Connection default -CREATE DATABASE db1; -CREATE TABLE db1.t1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT) engine=innodb; -INSERT INTO db1.t1(value) VALUES (1), (2); -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; -# Sending: -ALTER TABLE db1.t1 ADD INDEX(value); -# Connection con1 -SET DEBUG_SYNC= "now WAIT_FOR manage"; -USE db1; -SELECT * FROM t1; -id value -1 1 -2 2 -SET DEBUG_SYNC= "now SIGNAL query"; -# Connection default -# Reaping: ALTER TABLE db1.t1 ADD INDEX(value) -DROP DATABASE db1; -# Test 2: Primary index (implicit), should block reads. -CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb; -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; -# Sending: -ALTER TABLE t1 ADD UNIQUE INDEX(a); -# Connection con1 -SET DEBUG_SYNC= "now WAIT_FOR manage"; -USE test; -# Sending: -SELECT * FROM t1; -# Connection con2 -# Waiting for SELECT to be blocked by the metadata lock on t1 -SET DEBUG_SYNC= "now SIGNAL query"; -# Connection default -# Reaping: ALTER TABLE t1 ADD UNIQUE INDEX(a) -# Connection con1 -# Reaping: SELECT * FROM t1 -a b -# Test 3: Primary index (explicit), should block reads. -# Connection default -ALTER TABLE t1 DROP INDEX a; -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; -# Sending: -ALTER TABLE t1 ADD PRIMARY KEY (a); -# Connection con1 -SET DEBUG_SYNC= "now WAIT_FOR manage"; -# Sending: -SELECT * FROM t1; -# Connection con2 -# Waiting for SELECT to be blocked by the metadata lock on t1 -SET DEBUG_SYNC= "now SIGNAL query"; -# Connection default -# Reaping: ALTER TABLE t1 ADD PRIMARY KEY (a) -# Connection con1 -# Reaping: SELECT * FROM t1 -a b -# Test 4: Secondary unique index, should not block reads. -# Connection default -SET DEBUG_SYNC= "RESET"; -DROP TABLE t1; +# +# DISABLED due to Bug#11815600 +# === 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-03-09 18:31:30 +0000 @@ -279,6 +279,38 @@ 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 + +--connect (con1,localhost,root) + +--echo # Connection default +connection default; +CREATE TABLE t1 (id INT PRIMARY KEY, value INT) ENGINE = InnoDB; +INSERT INTO t1 VALUES (1, 12345); +START TRANSACTION; +SELECT * FROM t1; + +--echo # Connection con1 +--connection con1 +SET lock_wait_timeout=1; +--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 'mysql-test/t/innodb_mysql_sync.test' --- a/mysql-test/t/innodb_mysql_sync.test 2011-01-26 13:23:29 +0000 +++ b/mysql-test/t/innodb_mysql_sync.test 2011-03-09 18:31:30 +0000 @@ -152,132 +152,133 @@ disconnect con1; --echo # that implement add_index --echo # ---disable_warnings -DROP DATABASE IF EXISTS db1; -DROP TABLE IF EXISTS t1; ---enable_warnings - -connect(con1,localhost,root); -connect(con2,localhost,root); - ---echo # Test 1: Secondary index, should not block reads (original test case). - ---echo # Connection default -connection default; -CREATE DATABASE db1; -CREATE TABLE db1.t1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT) engine=innodb; -INSERT INTO db1.t1(value) VALUES (1), (2); -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; ---echo # Sending: ---send ALTER TABLE db1.t1 ADD INDEX(value) - ---echo # Connection con1 -connection con1; -SET DEBUG_SYNC= "now WAIT_FOR manage"; -# Neither of these two statements should be blocked -USE db1; -SELECT * FROM t1; -SET DEBUG_SYNC= "now SIGNAL query"; - ---echo # Connection default -connection default; ---echo # Reaping: ALTER TABLE db1.t1 ADD INDEX(value) ---reap -DROP DATABASE db1; - ---echo # Test 2: Primary index (implicit), should block reads. - -CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb; -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; ---echo # Sending: ---send ALTER TABLE t1 ADD UNIQUE INDEX(a) - ---echo # Connection con1 -connection con1; -SET DEBUG_SYNC= "now WAIT_FOR manage"; -USE test; ---echo # Sending: ---send SELECT * FROM t1 - ---echo # Connection con2 -connection con2; ---echo # Waiting for SELECT to be blocked by the metadata lock on t1 -let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist - WHERE state= 'Waiting for table metadata lock' - AND info='SELECT * FROM t1'; ---source include/wait_condition.inc -SET DEBUG_SYNC= "now SIGNAL query"; - ---echo # Connection default -connection default; ---echo # Reaping: ALTER TABLE t1 ADD UNIQUE INDEX(a) ---reap - ---echo # Connection con1 -connection con1; ---echo # Reaping: SELECT * FROM t1 ---reap - ---echo # Test 3: Primary index (explicit), should block reads. - ---echo # Connection default -connection default; -ALTER TABLE t1 DROP INDEX a; -SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; ---echo # Sending: ---send ALTER TABLE t1 ADD PRIMARY KEY (a) - ---echo # Connection con1 -connection con1; -SET DEBUG_SYNC= "now WAIT_FOR manage"; ---echo # Sending: ---send SELECT * FROM t1 - ---echo # Connection con2 -connection con2; ---echo # Waiting for SELECT to be blocked by the metadata lock on t1 -let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist - WHERE state= 'Waiting for table metadata lock' - AND info='SELECT * FROM t1'; ---source include/wait_condition.inc -SET DEBUG_SYNC= "now SIGNAL query"; - ---echo # Connection default -connection default; ---echo # Reaping: ALTER TABLE t1 ADD PRIMARY KEY (a) ---reap - ---echo # Connection con1 -connection con1; ---echo # Reaping: SELECT * FROM t1 ---reap - ---echo # Test 4: Secondary unique index, should not block reads. -# This requires HA_INPLACE_ADD_UNIQUE_INDEX_NO_WRITE to be supported -# by InnoDB. Adding this flag currently introduces a regression so -# this test is disabled until the regression has been fixed. +--echo # +--echo # DISABLED due to Bug#11815600 +--echo # ---echo # Connection default -connection default; +#--disable_warnings +#DROP DATABASE IF EXISTS db1; +#DROP TABLE IF EXISTS t1; +#--enable_warnings +# +#connect(con1,localhost,root); +#connect(con2,localhost,root); +# +#--echo # Test 1: Secondary index, should not block reads (original test case). +# +#--echo # Connection default +#connection default; +#CREATE DATABASE db1; +#CREATE TABLE db1.t1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, value INT) engine=innodb; +#INSERT INTO db1.t1(value) VALUES (1), (2); +#SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; +#--echo # Sending: +#--send ALTER TABLE db1.t1 ADD INDEX(value) +# +#--echo # Connection con1 +#connection con1; +#SET DEBUG_SYNC= "now WAIT_FOR manage"; +# # Neither of these two statements should be blocked +#USE db1; +#SELECT * FROM t1; +#SET DEBUG_SYNC= "now SIGNAL query"; +# +#--echo # Connection default +#connection default; +#--echo # Reaping: ALTER TABLE db1.t1 ADD INDEX(value) +#--reap +#DROP DATABASE db1; +# +#--echo # Test 2: Primary index (implicit), should block reads. +# +#CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb; +#SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; +#--echo # Sending: +#--send ALTER TABLE t1 ADD UNIQUE INDEX(a) +# +#--echo # Connection con1 +#connection con1; +#SET DEBUG_SYNC= "now WAIT_FOR manage"; +#USE test; +#--echo # Sending: +#--send SELECT * FROM t1 +# +#--echo # Connection con2 +#connection con2; +#--echo # Waiting for SELECT to be blocked by the metadata lock on t1 +#let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist +# WHERE state= 'Waiting for table metadata lock' +# AND info='SELECT * FROM t1'; +#--source include/wait_condition.inc +#SET DEBUG_SYNC= "now SIGNAL query"; +# +#--echo # Connection default +#connection default; +#--echo # Reaping: ALTER TABLE t1 ADD UNIQUE INDEX(a) +#--reap +# +#--echo # Connection con1 +#connection con1; +#--echo # Reaping: SELECT * FROM t1 +#--reap +# +#--echo # Test 3: Primary index (explicit), should block reads. +# +#--echo # Connection default +#connection default; +#ALTER TABLE t1 DROP INDEX a; +#SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; +#--echo # Sending: +#--send ALTER TABLE t1 ADD PRIMARY KEY (a) +# +#--echo # Connection con1 +#connection con1; +#SET DEBUG_SYNC= "now WAIT_FOR manage"; +#--echo # Sending: +#--send SELECT * FROM t1 +# +#--echo # Connection con2 +#connection con2; +#--echo # Waiting for SELECT to be blocked by the metadata lock on t1 +#let $wait_condition= SELECT COUNT(*)= 1 FROM information_schema.processlist +# WHERE state= 'Waiting for table metadata lock' +# AND info='SELECT * FROM t1'; +#--source include/wait_condition.inc +#SET DEBUG_SYNC= "now SIGNAL query"; +# +#--echo # Connection default +#connection default; +#--echo # Reaping: ALTER TABLE t1 ADD PRIMARY KEY (a) +#--reap +# +#--echo # Connection con1 +#connection con1; +#--echo # Reaping: SELECT * FROM t1 +#--reap +# +#--echo # Test 4: Secondary unique index, should not block reads. +# +#--echo # Connection default +#connection default; #SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; #--echo # Sending: #--send ALTER TABLE t1 ADD UNIQUE (b) - +# #--echo # Connection con1 #connection con1; #SET DEBUG_SYNC= "now WAIT_FOR manage"; #SELECT * FROM t1; #SET DEBUG_SYNC= "now SIGNAL query"; - +# #--echo # Connection default #connection default; #--echo # Reaping: ALTER TABLE t1 ADD UNIQUE (b) #--reap - -disconnect con1; -disconnect con2; -SET DEBUG_SYNC= "RESET"; -DROP TABLE t1; +# +#disconnect con1; +#disconnect con2; +#SET DEBUG_SYNC= "RESET"; +#DROP TABLE t1; # Check that all connections opened by test cases in this file are really === modified file 'storage/innobase/handler/ha_innodb.cc' --- a/storage/innobase/handler/ha_innodb.cc 2011-03-01 14:47:01 +0000 +++ b/storage/innobase/handler/ha_innodb.cc 2011-03-09 18:31:30 +0000 @@ -2827,7 +2827,6 @@ innobase_alter_table_flags( uint flags) { return(HA_INPLACE_ADD_INDEX_NO_READ_WRITE - | HA_INPLACE_ADD_INDEX_NO_WRITE | HA_INPLACE_DROP_INDEX_NO_READ_WRITE | HA_INPLACE_ADD_UNIQUE_INDEX_NO_READ_WRITE | HA_INPLACE_DROP_UNIQUE_INDEX_NO_READ_WRITE --===============6472353263396638030== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/alexander.nozdrin@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: alexander.nozdrin@stripped\ # 0drmlsq3hhdpol80 # target_branch: file:///home/alik/MySQL/bzr/mysql-5.6.2-m5-release/ # testament_sha1: 5bce77191a44fb62d8794ebfe93eece4fa40e166 # timestamp: 2011-03-09 21:31:36 +0300 # source_branch: file:///home/alik/MySQL/bzr/mysql-5.5.10-release/ # base_revision_id: alexander.barkov@stripped\ # pqqvdidh4s5p51r8 # # Begin bundle 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 MWsqxif/i7kinChINrybE4A= --===============6472353263396638030==--