mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	SECONDARY INDEX IN INNODB This is a follow-up patch. This patch moves part of the new test coverage to a test file that is only run on debug builds since it used debug- only features and therefore broke the test case on release builds.
		
			
				
	
	
		
			310 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			310 lines
		
	
	
		
			7.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #
 | |
| # Test file for InnoDB tests that require the debug sync facility
 | |
| #
 | |
| --source include/have_innodb.inc
 | |
| --source include/have_debug.inc
 | |
| --source include/have_debug_sync.inc
 | |
| # Save the initial number of concurrent sessions.
 | |
| --source include/count_sessions.inc
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # Bug 42074 concurrent optimize table and 
 | |
| --echo # alter table = Assertion failed: thd->is_error()
 | |
| --echo #
 | |
| 
 | |
| --disable_warnings
 | |
| DROP TABLE IF EXISTS t1;
 | |
| --enable_warnings
 | |
| 
 | |
| --echo # Create InnoDB table
 | |
| CREATE TABLE t1 (id INT) engine=innodb;
 | |
| connect (con2, localhost, root);
 | |
| 
 | |
| --echo # Connection 1
 | |
| --echo # Start optimizing table
 | |
| connection default;
 | |
| SET DEBUG_SYNC='ha_admin_try_alter SIGNAL optimize_started WAIT_FOR table_altered';
 | |
| --send OPTIMIZE TABLE t1
 | |
| 
 | |
| --echo # Connection 2
 | |
| --echo # Change table to engine=memory
 | |
| connection con2;
 | |
| SET DEBUG_SYNC='now WAIT_FOR optimize_started';
 | |
| ALTER TABLE t1 engine=memory;
 | |
| SET DEBUG_SYNC='now SIGNAL table_altered';
 | |
| 
 | |
| --echo # Connection 1
 | |
| --echo # Complete optimization
 | |
| connection default;
 | |
| --reap
 | |
| 
 | |
| disconnect con2;
 | |
| DROP TABLE t1;
 | |
| SET DEBUG_SYNC='RESET';
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # Bug#47459 Assertion in Diagnostics_area::set_eof_status on
 | |
| --echo #           OPTIMIZE TABLE
 | |
| --echo #
 | |
| 
 | |
| --disable_warnings
 | |
| DROP TABLE IF EXISTS t1;
 | |
| --enable_warnings
 | |
| 
 | |
| connect (con1, localhost, root);
 | |
| connection default;
 | |
| 
 | |
| CREATE TABLE t1(a INT) ENGINE= InnoDB;
 | |
| 
 | |
| --echo # Connection con1
 | |
| connection con1;
 | |
| SET DEBUG_SYNC= "ha_admin_open_ltable SIGNAL opening WAIT_FOR dropped";
 | |
| --echo # Sending:
 | |
| --send OPTIMIZE TABLE t1
 | |
| 
 | |
| --echo # Connection default
 | |
| connection default;
 | |
| SET DEBUG_SYNC= "now WAIT_FOR opening";
 | |
| DROP TABLE t1;
 | |
| SET DEBUG_SYNC= "now SIGNAL dropped";
 | |
| 
 | |
| --echo # Connection con1
 | |
| connection con1;
 | |
| --echo # Reaping: OPTIMIZE TABLE t1
 | |
| --reap
 | |
| 
 | |
| --echo # Connection default
 | |
| connection default;
 | |
| disconnect con1;
 | |
| SET DEBUG_SYNC= "RESET";
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # Bug#53757 assert in mysql_truncate_by_delete
 | |
| --echo #
 | |
| 
 | |
| --disable_warnings
 | |
| DROP TABLE IF EXISTS t1, t2;
 | |
| --enable_warnings
 | |
| 
 | |
| CREATE TABLE t1(a INT) Engine=InnoDB;
 | |
| CREATE TABLE t2(id INT);
 | |
| INSERT INTO t1 VALUES (1), (2);
 | |
| 
 | |
| connect (con1, localhost, root);
 | |
| INSERT INTO t2 VALUES(connection_id());
 | |
| SET DEBUG_SYNC= "open_and_process_table SIGNAL opening WAIT_FOR killed";
 | |
| --echo # Sending: (not reaped since connection is killed later)
 | |
| --send TRUNCATE t1
 | |
| 
 | |
| connection default;
 | |
| SET DEBUG_SYNC= "now WAIT_FOR opening";
 | |
| SELECT ((@id := id) - id) FROM t2; 
 | |
| KILL @id;
 | |
| SET DEBUG_SYNC= "now SIGNAL killed";
 | |
| DROP TABLE t1, t2;
 | |
| disconnect con1;
 | |
| --source include/wait_until_count_sessions.inc
 | |
| SET DEBUG_SYNC= "RESET";
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # Bug#58933 Assertion `thd- >is_error()' fails on shutdown with ongoing
 | |
| --echo #           OPTIMIZE TABLE
 | |
| --echo #
 | |
| 
 | |
| --disable_warnings
 | |
| DROP TABLE IF EXISTS t1;
 | |
| --enable_warnings
 | |
| 
 | |
| CREATE TABLE t1 (a INT) ENGINE=InnoDB;
 | |
| INSERT INTO t1 VALUES (1), (2);
 | |
| 
 | |
| --echo # Connection con1
 | |
| connect (con1,localhost,root);
 | |
| let $ID= `SELECT connection_id()`;
 | |
| SET DEBUG_SYNC= 'ha_admin_open_ltable SIGNAL waiting WAIT_FOR killed';
 | |
| --echo # Sending:
 | |
| --send OPTIMIZE TABLE t1
 | |
| 
 | |
| --echo # Connection default
 | |
| connection default;
 | |
| SET DEBUG_SYNC= 'now WAIT_FOR waiting';
 | |
| --replace_result $ID ID
 | |
| eval KILL QUERY $ID;
 | |
| SET DEBUG_SYNC= 'now SIGNAL killed';
 | |
| 
 | |
| --echo # Connection con1
 | |
| connection con1;
 | |
| --echo # Reaping: OPTIMIZE TABLE t1
 | |
| --reap
 | |
| 
 | |
| --echo # Connection default
 | |
| connection default;
 | |
| DROP TABLE t1;
 | |
| SET DEBUG_SYNC= 'RESET';
 | |
| disconnect con1;
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # Bug#42230 during add index, cannot do queries on storage engines
 | |
| --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.
 | |
| 
 | |
| --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;
 | |
| 
 | |
| 
 | |
| --echo #
 | |
| --echo # Bug#11853126 RE-ENABLE CONCURRENT READS WHILE CREATING SECONDARY INDEX
 | |
| --echo #              IN INNODB
 | |
| --echo #
 | |
| 
 | |
| --disable_warnings
 | |
| DROP TABLE IF EXISTS t1;
 | |
| --enable_warnings
 | |
| 
 | |
| CREATE TABLE t1(a INT NOT NULL, b INT NOT NULL) engine=innodb;
 | |
| INSERT INTO t1 VALUES (1, 12345), (2, 23456);
 | |
| 
 | |
| --echo # Connection con1
 | |
| --connect (con1,localhost,root)
 | |
| SET SESSION debug= "+d,alter_table_rollback_new_index";
 | |
| --error ER_UNKNOWN_ERROR
 | |
| ALTER TABLE t1 ADD PRIMARY KEY(a);
 | |
| SELECT * FROM t1;
 | |
| 
 | |
| --echo # Connection default
 | |
| --connection default
 | |
| SELECT * FROM t1;
 | |
| 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
 |