mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	This is a partial port of my patch in MySQL 8.0. In MySQL 8.0, all InnoDB references to DBUG_OFF were replaced with UNIV_DEBUG. We will not do that in MariaDB. InnoDB used two independent compile-time flags that distinguish debug and non-debug builds, which is confusing. Also, make ut_ad() and alias of DBUG_ASSERT().
		
			
				
	
	
		
			113 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			113 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| # Test for bug #12400341: INNODB CAN LEAVE ORPHAN IBD FILES AROUND
 | |
| 
 | |
| -- source include/have_debug.inc
 | |
| -- source include/have_innodb.inc
 | |
| -- source include/have_innodb_16k.inc
 | |
| 
 | |
| # Don't test under valgrind, undo slots of the previous test might exist still
 | |
| # and cause unstable result.
 | |
| --source include/not_valgrind.inc
 | |
| # undo slots of the previous test might exist still
 | |
| --source include/not_windows.inc
 | |
| 
 | |
| call mtr.add_suppression("InnoDB: Warning: cannot find a free slot for an undo log. Do you have too*");
 | |
| call mtr.add_suppression("\\[Warning\\] InnoDB: Cannot find a free slot for an undo log. Do you have too");
 | |
| 
 | |
| --disable_query_log
 | |
| set @old_innodb_trx_rseg_n_slots_debug = @@innodb_trx_rseg_n_slots_debug;
 | |
| set global innodb_trx_rseg_n_slots_debug = 32;
 | |
| --enable_query_log
 | |
| 
 | |
| set @old_innodb_undo_logs = @@innodb_undo_logs;
 | |
| set global innodb_undo_logs=1;
 | |
| 
 | |
| show variables like "max_connections";
 | |
| show variables like "innodb_thread_concurrency";
 | |
| show variables like "innodb_file_per_table";
 | |
| 
 | |
| --disable_warnings
 | |
| drop database if exists mysqltest;
 | |
| --enable_warnings
 | |
| 
 | |
| create database mysqltest;
 | |
| CREATE TABLE mysqltest.transtable (id int unsigned NOT NULL PRIMARY KEY, val int DEFAULT 0) ENGINE=InnoDB;
 | |
| 
 | |
| --disable_query_log
 | |
| #
 | |
| # Insert in 1 transaction which needs over 1 page undo record to avoid the insert_undo cached,
 | |
| # because the cached insert_undo can be reused at "CREATE TABLE" statement later.
 | |
| #
 | |
| START TRANSACTION;
 | |
| let $c = 1024;
 | |
| while ($c)
 | |
| {
 | |
|   eval INSERT INTO mysqltest.transtable (id) VALUES ($c);
 | |
|   dec $c;
 | |
| }
 | |
| COMMIT;
 | |
| 
 | |
| let $c = 32;
 | |
| while ($c)
 | |
| {
 | |
|   # if failed at here, it might be shortage of file descriptors limit.
 | |
|   connect (con$c,localhost,root,,);
 | |
|   dec $c;
 | |
| }
 | |
| --enable_query_log
 | |
| 
 | |
| select count(*) from information_schema.processlist where command != 'Daemon';
 | |
| 
 | |
| #
 | |
| # fill the all undo slots
 | |
| #
 | |
| --disable_query_log
 | |
| let $c = 32;
 | |
| while ($c)
 | |
| {
 | |
|   connection con$c;
 | |
|   START TRANSACTION;
 | |
|   eval UPDATE mysqltest.transtable SET val = 1 WHERE id = 33 - $c;
 | |
|   dec $c;
 | |
| }
 | |
| --enable_query_log
 | |
| 
 | |
| connection default;
 | |
| 
 | |
| --error ER_CANT_CREATE_TABLE
 | |
| CREATE TABLE mysqltest.testtable (id int unsigned not null primary key) ENGINE=InnoDB;
 | |
| 
 | |
| select count(*) from information_schema.processlist where command != 'Daemon';
 | |
| 
 | |
| --disable_query_log
 | |
| let $c = 32;
 | |
| while ($c)
 | |
| {
 | |
|   connection con$c;
 | |
|   ROLLBACK;
 | |
|   dec $c;
 | |
| }
 | |
| --enable_query_log
 | |
| 
 | |
| connection default;
 | |
| select count(*) from information_schema.processlist where command != 'Daemon';
 | |
| 
 | |
| --disable_query_log
 | |
| let $c = 32;
 | |
| while ($c)
 | |
| {
 | |
|   disconnect con$c;
 | |
|   dec $c;
 | |
| }
 | |
| --enable_query_log
 | |
| 
 | |
| #
 | |
| # If the isolated .ibd file remained, the drop database should fail.
 | |
| #
 | |
| drop database mysqltest;
 | |
| 
 | |
| set global innodb_undo_logs = @old_innodb_undo_logs;
 | |
| 
 | |
| --disable_query_log
 | |
| set global innodb_trx_rseg_n_slots_debug = @old_innodb_trx_rseg_n_slots_debug;
 | |
| --enable_query_log
 |