mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
merge
This commit is contained in:
@ -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;
|
||||
|
@ -94,74 +94,7 @@ 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= "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";
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# DISABLED due to Bug#11815600
|
||||
#
|
||||
|
||||
|
@ -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
|
||||
|
@ -152,129 +152,133 @@ disconnect con1;
|
||||
--echo # that implement add_index
|
||||
--echo #
|
||||
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS db1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
--echo #
|
||||
--echo # DISABLED due to Bug#11815600
|
||||
--echo #
|
||||
|
||||
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;
|
||||
#--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;
|
||||
|
||||
|
||||
# Check that all connections opened by test cases in this file are really
|
||||
|
@ -2594,7 +2594,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_ADD_UNIQUE_INDEX_NO_WRITE
|
||||
|
Reference in New Issue
Block a user