mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	Contains also
MDEV-10547: Test multi_update_innodb fails with InnoDB 5.7
	The failure happened because 5.7 has changed the signature of
	the bool handler::primary_key_is_clustered() const
	virtual function ("const" was added). InnoDB was using the old
	signature which caused the function not to be used.
MDEV-10550: Parallel replication lock waits/deadlock handling does not work with InnoDB 5.7
	Fixed mutexing problem on lock_trx_handle_wait. Note that
	rpl_parallel and rpl_optimistic_parallel tests still
	fail.
MDEV-10156 : Group commit tests fail on 10.2 InnoDB (branch bb-10.2-jan)
  Reason: incorrect merge
MDEV-10550: Parallel replication can't sync with master in InnoDB 5.7 (branch bb-10.2-jan)
  Reason: incorrect merge
		
	
		
			
				
	
	
		
			452 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			452 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
 | 
						|
####################################################################
 | 
						|
# TC to check truncate table statement atomicity for single        #
 | 
						|
# tablespace                                                       #
 | 
						|
# Sceanrio covered:                                                #
 | 
						|
# 1. Debug points added for worklog                                #
 | 
						|
# 2. Table with  differnt row types                                #
 | 
						|
# 3. Transactional statement.                                      #
 | 
						|
####################################################################
 | 
						|
 | 
						|
 | 
						|
--source include/have_innodb.inc
 | 
						|
--source include/have_debug.inc
 | 
						|
--source include/big_test.inc
 | 
						|
--source include/have_innodb_16k.inc
 | 
						|
 | 
						|
# Valgrind would result in a "long semaphore wait" inside InnoDB
 | 
						|
--source include/not_valgrind.inc
 | 
						|
# Embedded server does not support crashing
 | 
						|
--source include/not_embedded.inc
 | 
						|
# Avoid CrashReporter popup on Mac
 | 
						|
--source include/not_crashrep.inc
 | 
						|
 | 
						|
#-----------------------------------------------------------------------
 | 
						|
--disable_query_log
 | 
						|
let $MYSQL_DATA_DIR= `select @@datadir`;
 | 
						|
let $data_directory = data directory='$MYSQL_TMP_DIR/alt_dir';
 | 
						|
let $innodb_file_per_table_orig=`select @@innodb_file_per_table`;
 | 
						|
 | 
						|
call mtr.add_suppression("InnoDB.*table did not exist in the InnoDB data dictionary.*");
 | 
						|
call mtr.add_suppression("InnoDB: A page in the doublewrite buffer is not within space bounds.*");
 | 
						|
call mtr.add_suppression("InnoDB: Cannot create file.*");
 | 
						|
call mtr.add_suppression("InnoDB: Error number 17 means 'File exists'.*");
 | 
						|
call mtr.add_suppression("InnoDB: A page in the doublewrite buffer is not within space bounds");
 | 
						|
call mtr.add_suppression("InnoDB: Error: table .* does not exist in the InnoDB internal");
 | 
						|
--enable_query_log
 | 
						|
 | 
						|
#-----------------------------------------------------------------------
 | 
						|
set global innodb_file_per_table=on;
 | 
						|
--echo # Verify that 'TRUNCATE TABLE' statement works fine and the size
 | 
						|
--echo # of .ibd file is equal to the initial size after truncation.
 | 
						|
 | 
						|
#-----------------------------------------------------------------------
 | 
						|
drop table if exists t1,t2,t3,t4,t6;
 | 
						|
let $cnt = 6;
 | 
						|
while ($cnt) {
 | 
						|
 | 
						|
	# table with basic data type + primary ,secondary,composite,prefix index
 | 
						|
	create table t1(c1 int not null,
 | 
						|
			c2 int not null,
 | 
						|
			c3 char(255) not null,
 | 
						|
			c4 text(500) not null,
 | 
						|
			c5 blob(500) not null,
 | 
						|
			c6 varchar(500) not null,
 | 
						|
			c7 varchar(500) not null,
 | 
						|
			c8 datetime,
 | 
						|
			c9 decimal(5,3),
 | 
						|
			primary key (c1),
 | 
						|
			index (c3,c4(50),c5(50)),
 | 
						|
			index (c2))
 | 
						|
		engine=innodb row_format=redundant;
 | 
						|
 | 
						|
 | 
						|
	create table t2(c1 int not null,
 | 
						|
			c2 int not null,
 | 
						|
			c3 char(255) not null,
 | 
						|
			c4 text(500) not null,
 | 
						|
			c5 blob(500) not null,
 | 
						|
			c6 varchar(500) not null,
 | 
						|
			c7 varchar(500) not null,
 | 
						|
			c8 datetime,
 | 
						|
			c9 decimal(5,3),
 | 
						|
			primary key (c1),
 | 
						|
			index (c3,c4(50),c5(50)),
 | 
						|
			index (c2))
 | 
						|
		engine=innodb row_format=compact;
 | 
						|
 | 
						|
 | 
						|
	# with row type , key block size = 4K
 | 
						|
	create table t3(c1 int not null,
 | 
						|
			c2 int not null,
 | 
						|
			c3 char(255) not null,
 | 
						|
			c4 text(500) not null,
 | 
						|
			c5 blob(500) not null,
 | 
						|
			c6 varchar(500) not null,
 | 
						|
			c7 varchar(500) not null,
 | 
						|
			c8 datetime,
 | 
						|
			c9 decimal(5,3),
 | 
						|
			primary key (c1),
 | 
						|
			index (c3,c4(50),c5(50)),
 | 
						|
			index (c2))
 | 
						|
		engine=innodb row_format=compressed key_block_size=4;
 | 
						|
 | 
						|
 | 
						|
	create table t4(c1 int not null,
 | 
						|
			c2 int not null,
 | 
						|
			c3 char(255) not null,
 | 
						|
			c4 text(500) not null,
 | 
						|
			c5 blob(500) not null,
 | 
						|
			c6 varchar(500) not null,
 | 
						|
			c7 varchar(500) not null,
 | 
						|
			c8 datetime,
 | 
						|
			c9 decimal(5,3),
 | 
						|
			primary key (c1),
 | 
						|
			index (c3,c4(50),c5(50)),
 | 
						|
			index (c2))
 | 
						|
		engine=innodb row_format=dynamic;
 | 
						|
 | 
						|
 | 
						|
	create temporary table t5(c1 int not null,
 | 
						|
				  c2 int not null,
 | 
						|
				  c3 char(255) not null,
 | 
						|
				  c4 text(500) not null,
 | 
						|
				  c5 blob(500) not null,
 | 
						|
				  c6 varchar(500) not null,
 | 
						|
				  c7 varchar(500) not null,
 | 
						|
				  c8 datetime,
 | 
						|
				  c9 decimal(5,3),
 | 
						|
				  primary key (c1),
 | 
						|
				  index (c3,c4(50),c5(50)),
 | 
						|
				  index (c2))
 | 
						|
		engine=innodb;
 | 
						|
 | 
						|
	create table t6 ( a int ) engine = innodb;
 | 
						|
	insert into t6 values (50),(100),(150);
 | 
						|
 | 
						|
	--disable_query_log
 | 
						|
	--disable_result_log
 | 
						|
	let $n=5;
 | 
						|
 | 
						|
	# load created tables.
 | 
						|
	while ($n)
 | 
						|
	{
 | 
						|
		start transaction;
 | 
						|
 | 
						|
		eval insert ignore into t1 values(
 | 
						|
			$n, $n,
 | 
						|
			repeat(concat(' tc3_',$n), 42),
 | 
						|
			repeat(concat(' tc4_',$n), 300),
 | 
						|
			repeat(concat(' tc5_',$n), 300),
 | 
						|
			repeat(concat(' tc6_',$n), 300),
 | 
						|
			repeat(concat(' tc7_',$n), 300),
 | 
						|
			now(), (100.55+$n));
 | 
						|
 | 
						|
		eval insert ignore into t2 values(
 | 
						|
			$n, $n,
 | 
						|
			repeat(concat(' tc3_',$n), 42),
 | 
						|
			repeat(concat(' tc4_',$n), 300),
 | 
						|
			repeat(concat(' tc5_',$n), 300),
 | 
						|
			repeat(concat(' tc6_',$n), 300),
 | 
						|
			repeat(concat(' tc7_',$n), 300),
 | 
						|
			now(), (100.55+$n));
 | 
						|
 | 
						|
		eval insert ignore into t3 values(
 | 
						|
			$n, $n,
 | 
						|
			repeat(concat(' tc3_',$n), 42),
 | 
						|
			repeat(concat(' tc4_',$n), 300),
 | 
						|
			repeat(concat(' tc5_',$n), 300),
 | 
						|
			repeat(concat(' tc6_',$n), 300),
 | 
						|
			repeat(concat(' tc7_',$n), 300),
 | 
						|
			now(), (100.55+$n));
 | 
						|
 | 
						|
		eval insert ignore into t4 values(
 | 
						|
			$n, $n,
 | 
						|
			repeat(concat(' tc3_',$n), 42),
 | 
						|
			repeat(concat(' tc4_',$n), 300),
 | 
						|
			repeat(concat(' tc5_',$n), 300),
 | 
						|
			repeat(concat(' tc6_',$n), 300),
 | 
						|
			repeat(concat(' tc7_',$n), 300),
 | 
						|
			now(), (100.55+$n));
 | 
						|
 | 
						|
		eval insert ignore into t5 values(
 | 
						|
			$n, $n,
 | 
						|
			repeat(concat(' tc3_',$n), 42),
 | 
						|
			repeat(concat(' tc4_',$n), 300),
 | 
						|
			repeat(concat(' tc5_',$n), 300),
 | 
						|
			repeat(concat(' tc6_',$n), 300),
 | 
						|
			repeat(concat(' tc7_',$n), 300),
 | 
						|
			now(), (100.55+$n));
 | 
						|
 | 
						|
		if ($n <= 3)
 | 
						|
		{
 | 
						|
			commit;
 | 
						|
		}
 | 
						|
 | 
						|
		if ($n > 3)
 | 
						|
		{
 | 
						|
			rollback;
 | 
						|
		}
 | 
						|
 | 
						|
		dec $n;
 | 
						|
	}
 | 
						|
 | 
						|
	# validate loading of the tables.
 | 
						|
	--enable_result_log
 | 
						|
	--enable_query_log
 | 
						|
	select count(*) from t1;
 | 
						|
	select count(*) from t2;
 | 
						|
	select count(*) from t3;
 | 
						|
	select count(*) from t4;
 | 
						|
	select count(*) from t5;
 | 
						|
	select count(*) from t6;
 | 
						|
 | 
						|
	# set the debug crash point and exercise them.
 | 
						|
	if ($cnt == 6)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_during_drop_index_temp_table";
 | 
						|
		--echo "---debug ib_trunc_crash_during_drop_index_temp_table point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 5)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_drop_reinit_done_create_to_start";
 | 
						|
		--echo "---debug ib_trunc_crash_drop_reinit_done_create_to_start---"
 | 
						|
	}
 | 
						|
 | 
						|
	if ($cnt >= 5) {
 | 
						|
		--echo # Write file to make mysql-test-run.pl expect crash and restart
 | 
						|
		--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
 | 
						|
		--echo # Run the crashing query
 | 
						|
		--error 2013
 | 
						|
		truncate table t5;
 | 
						|
		--source include/wait_until_disconnected.inc
 | 
						|
		--enable_reconnect
 | 
						|
		--echo # Restart the MySQL server
 | 
						|
		--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
 | 
						|
		--source include/wait_until_connected_again.inc
 | 
						|
		--disable_reconnect
 | 
						|
		select count(*) from t1;
 | 
						|
		select count(*) from t2;
 | 
						|
		select count(*) from t3;
 | 
						|
		select count(*) from t4;
 | 
						|
		--error ER_NO_SUCH_TABLE
 | 
						|
		select count(*) from t5;
 | 
						|
		select count(*) from t6;
 | 
						|
	}
 | 
						|
 | 
						|
	# set the debug crash point and exercise them.
 | 
						|
	if ($cnt == 6)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_on_drop_of_sec_index";
 | 
						|
		--echo "---debug ib_trunc_crash_on_drop_of_sec_index point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 5)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_on_create_of_sec_index";
 | 
						|
		--echo "---debug ib_trunc_crash_on_create_of_sec_index---"
 | 
						|
	}
 | 
						|
	if ($cnt == 4)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_before_log_removal";
 | 
						|
		--echo "---debug ib_trunc_crash_before_log_removal point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 3)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_after_truncate_done";
 | 
						|
		--echo "---debug ib_trunc_crash_after_truncate_done point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 2)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_after_truncate_done";
 | 
						|
		--echo "---debug ib_trunc_crash_after_truncate_done point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 1)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_after_redo_log_write_complete";
 | 
						|
		--echo "---debug ib_trunc_crash_after_redo_log_write_complete point---"
 | 
						|
	}
 | 
						|
 | 
						|
	--echo # Write file to make mysql-test-run.pl expect crash and restart
 | 
						|
	--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
 | 
						|
	--echo # Run the crashing query
 | 
						|
	--error 2013
 | 
						|
	truncate table t1;
 | 
						|
	--source include/wait_until_disconnected.inc
 | 
						|
	--enable_reconnect
 | 
						|
	--echo # Restart the MySQL server
 | 
						|
	--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
 | 
						|
	--source include/wait_until_connected_again.inc
 | 
						|
	--disable_reconnect
 | 
						|
	select count(*) from t1;
 | 
						|
	select count(*) from t2;
 | 
						|
	select count(*) from t3;
 | 
						|
	select count(*) from t4;
 | 
						|
	--error ER_NO_SUCH_TABLE
 | 
						|
	select count(*) from t5;
 | 
						|
	select count(*) from t6;
 | 
						|
 | 
						|
	if ($cnt == 6)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_on_drop_of_sec_index";
 | 
						|
		--echo "---debug ib_trunc_crash_on_drop_of_sec_index point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 5)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_on_create_of_sec_index";
 | 
						|
		--echo "---debug ib_trunc_crash_on_create_of_sec_index---"
 | 
						|
	}
 | 
						|
	if ($cnt == 4)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_before_log_removal";
 | 
						|
		--echo "---debug ib_trunc_crash_before_log_removal point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 3)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_after_truncate_done";
 | 
						|
		--echo "---debug ib_trunc_crash_after_truncate_done point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 2)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_after_truncate_done";
 | 
						|
		--echo "---debug ib_trunc_crash_after_truncate_done point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 1)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_after_redo_log_write_complete";
 | 
						|
		--echo "---debug ib_trunc_crash_after_redo_log_write_complete point---"
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	--echo # Write file to make mysql-test-run.pl expect crash and restart
 | 
						|
	--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
 | 
						|
	--echo # Run the crashing query
 | 
						|
	--error 2013
 | 
						|
	truncate table t2;
 | 
						|
	--source include/wait_until_disconnected.inc
 | 
						|
	--enable_reconnect
 | 
						|
	--echo # Restart the MySQL server
 | 
						|
	--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
 | 
						|
	--source include/wait_until_connected_again.inc
 | 
						|
	--disable_reconnect
 | 
						|
	select count(*) from t1;
 | 
						|
	select count(*) from t2;
 | 
						|
	select count(*) from t3;
 | 
						|
	select count(*) from t4;
 | 
						|
	--error ER_NO_SUCH_TABLE
 | 
						|
	select count(*) from t5;
 | 
						|
	select count(*) from t6;
 | 
						|
 | 
						|
	if ($cnt == 6)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_on_drop_of_sec_index";
 | 
						|
		--echo "---debug ib_trunc_crash_on_drop_of_sec_index point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 5)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_on_create_of_sec_index";
 | 
						|
		--echo "---debug ib_trunc_crash_on_create_of_sec_index---"
 | 
						|
	}
 | 
						|
	if ($cnt == 4)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_before_log_removal";
 | 
						|
		--echo "---debug ib_trunc_crash_before_log_removal point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 3)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_after_truncate_done";
 | 
						|
		--echo "---debug ib_trunc_crash_after_truncate_done point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 2)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_after_truncate_done";
 | 
						|
		--echo "---debug ib_trunc_crash_after_truncate_done point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 1)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_after_redo_log_write_complete";
 | 
						|
		--echo "---debug ib_trunc_crash_after_redo_log_write_complete point---"
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	--echo # Write file to make mysql-test-run.pl expect crash and restart
 | 
						|
	--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
 | 
						|
	--echo # Run the crashing query
 | 
						|
	--error 2013
 | 
						|
	truncate table t3;
 | 
						|
	--source include/wait_until_disconnected.inc
 | 
						|
	--enable_reconnect
 | 
						|
	--echo # Restart the MySQL server
 | 
						|
	--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
 | 
						|
	--source include/wait_until_connected_again.inc
 | 
						|
	--disable_reconnect
 | 
						|
	select count(*) from t1;
 | 
						|
	select count(*) from t2;
 | 
						|
	select count(*) from t3;
 | 
						|
	select count(*) from t4;
 | 
						|
	--error ER_NO_SUCH_TABLE
 | 
						|
	select count(*) from t5;
 | 
						|
	select count(*) from t6;
 | 
						|
 | 
						|
 | 
						|
	if ($cnt == 6)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_on_drop_of_sec_index";
 | 
						|
		--echo "---debug ib_trunc_crash_on_drop_of_sec_index point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 5)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_on_create_of_sec_index";
 | 
						|
		--echo "---debug ib_trunc_crash_on_create_of_sec_index---"
 | 
						|
	}
 | 
						|
	if ($cnt == 4)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_before_log_removal";
 | 
						|
		--echo "---debug ib_trunc_crash_before_log_removal point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 3)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_after_truncate_done";
 | 
						|
		--echo "---debug ib_trunc_crash_after_truncate_done point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 2)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_after_truncate_done";
 | 
						|
		--echo "---debug ib_trunc_crash_after_truncate_done point---"
 | 
						|
	}
 | 
						|
	if ($cnt == 1)
 | 
						|
	{
 | 
						|
		set session debug="+d,ib_trunc_crash_after_redo_log_write_complete";
 | 
						|
		--echo "---debug ib_trunc_crash_after_redo_log_write_complete point---"
 | 
						|
	}
 | 
						|
 | 
						|
	--echo # Write file to make mysql-test-run.pl expect crash and restart
 | 
						|
	--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
 | 
						|
	--echo # Run the crashing query
 | 
						|
	--error 2013
 | 
						|
	truncate table t4;
 | 
						|
	--source include/wait_until_disconnected.inc
 | 
						|
	--enable_reconnect
 | 
						|
	--echo # Restart the MySQL server
 | 
						|
	--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
 | 
						|
	--source include/wait_until_connected_again.inc
 | 
						|
	--disable_reconnect
 | 
						|
	select count(*) from t1;
 | 
						|
	select count(*) from t2;
 | 
						|
	select count(*) from t3;
 | 
						|
	select count(*) from t4;
 | 
						|
	--error ER_NO_SUCH_TABLE
 | 
						|
	select count(*) from t5;
 | 
						|
	select count(*) from t6;
 | 
						|
 | 
						|
	drop table t1, t2, t3, t4, t6;
 | 
						|
 | 
						|
	dec $cnt;
 | 
						|
 | 
						|
	--disable_query_log
 | 
						|
	eval set global innodb_file_per_table=$innodb_file_per_table_orig;
 | 
						|
	--enable_query_log
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
 |