mirror of
https://github.com/MariaDB/server.git
synced 2025-01-27 01:04:19 +01:00
2e814d4702
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
451 lines
13 KiB
Text
451 lines
13 KiB
Text
|
|
####################################################################
|
|
# 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
|
|
}
|
|
|
|
|
|
|