Commit 5e32755e authored by Jon Olav Hauglid's avatar Jon Olav Hauglid

Bug #11784056 ENABLE CONCURRENT READS WHILE CREATING

              NON-PRIMARY UNIQUE INDEX USING INNODB

This patch adds the HA_INPLACE_ADD_UNIQUE_INDEX_NO_WRITE
capability flag to InnoDB, indicating that concurrent reads
can be allowed while non-primary unique indexes are created.

This is an follow-up to Bug #11751388 which enabled concurrent
reads when creating non-primary non-unique indexes.

Test case added to innodb_mysql_sync.test.
parent bafe2403
...@@ -153,5 +153,15 @@ SET DEBUG_SYNC= "now SIGNAL query"; ...@@ -153,5 +153,15 @@ SET DEBUG_SYNC= "now SIGNAL query";
a b a b
# Test 4: Secondary unique index, should not block reads. # Test 4: Secondary unique index, should not block reads.
# Connection default # Connection default
SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query";
# Sending:
ALTER TABLE t1 ADD UNIQUE (b);
# Connection con1
SET DEBUG_SYNC= "now WAIT_FOR manage";
SELECT * FROM t1;
a b
SET DEBUG_SYNC= "now SIGNAL query";
# Connection default
# Reaping: ALTER TABLE t1 ADD UNIQUE (b)
SET DEBUG_SYNC= "RESET"; SET DEBUG_SYNC= "RESET";
DROP TABLE t1; DROP TABLE t1;
...@@ -253,26 +253,23 @@ connection con1; ...@@ -253,26 +253,23 @@ connection con1;
--reap --reap
--echo # Test 4: Secondary unique index, should not block reads. --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 # Connection default --echo # Connection default
connection default; connection default;
#SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query"; SET DEBUG_SYNC= "alter_table_manage_keys SIGNAL manage WAIT_FOR query";
#--echo # Sending: --echo # Sending:
#--send ALTER TABLE t1 ADD UNIQUE (b) --send ALTER TABLE t1 ADD UNIQUE (b)
#--echo # Connection con1 --echo # Connection con1
#connection con1; connection con1;
#SET DEBUG_SYNC= "now WAIT_FOR manage"; SET DEBUG_SYNC= "now WAIT_FOR manage";
#SELECT * FROM t1; SELECT * FROM t1;
#SET DEBUG_SYNC= "now SIGNAL query"; SET DEBUG_SYNC= "now SIGNAL query";
#--echo # Connection default --echo # Connection default
#connection default; connection default;
#--echo # Reaping: ALTER TABLE t1 ADD UNIQUE (b) --echo # Reaping: ALTER TABLE t1 ADD UNIQUE (b)
#--reap --reap
disconnect con1; disconnect con1;
disconnect con2; disconnect con2;
......
...@@ -2597,6 +2597,7 @@ innobase_alter_table_flags( ...@@ -2597,6 +2597,7 @@ innobase_alter_table_flags(
| HA_INPLACE_ADD_INDEX_NO_WRITE | HA_INPLACE_ADD_INDEX_NO_WRITE
| HA_INPLACE_DROP_INDEX_NO_READ_WRITE | HA_INPLACE_DROP_INDEX_NO_READ_WRITE
| HA_INPLACE_ADD_UNIQUE_INDEX_NO_READ_WRITE | HA_INPLACE_ADD_UNIQUE_INDEX_NO_READ_WRITE
| HA_INPLACE_ADD_UNIQUE_INDEX_NO_WRITE
| HA_INPLACE_DROP_UNIQUE_INDEX_NO_READ_WRITE | HA_INPLACE_DROP_UNIQUE_INDEX_NO_READ_WRITE
| HA_INPLACE_ADD_PK_INDEX_NO_READ_WRITE); | HA_INPLACE_ADD_PK_INDEX_NO_READ_WRITE);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment