mirror of
https://github.com/MariaDB/server.git
synced 2025-08-27 13:04:36 +03:00
enabled binary The test case injects an error in the server by deleting the temporary file that it uses during the load data statement execution. The error consisted of closing, deleting and setting the file descriptor to -1 right before calling mysql_file_write. Although, this error injection seems to work OK in Unix like environments, in Windows, this would cause the server to hit an assertion in 'my_get_open_flags': DBUG_ASSERT(fd >= MY_FILE_MIN && fd < (int)my_file_limit) We fix this by changing the error injection to just call the macro my_delete_allow_opened, instead of the close + delete + set fd=-1. The macro deletes the file and is platform independent. Additionally, this required some changes to how the assertion is handled in the test case to make it cope with this change.
61 lines
2.0 KiB
Plaintext
61 lines
2.0 KiB
Plaintext
##########################################################################
|
|
# This test verifies if the slave fails gracefully when the temporary
|
|
# file used to load data is removed while it is about to be used it.
|
|
# Similar errors are caught if the temporary directory is removed.
|
|
#
|
|
# Steps:
|
|
# 1 - Creates a table and populates it through "LOAD DATA INFILE".
|
|
# 2 - Catches error.
|
|
##########################################################################
|
|
|
|
--source include/have_binlog_format_mixed_or_statement.inc
|
|
--source include/have_innodb.inc
|
|
--source include/have_debug.inc
|
|
--source include/master-slave.inc
|
|
--source include/not_embedded.inc
|
|
|
|
##########################################################################
|
|
# Loading data
|
|
##########################################################################
|
|
connection master;
|
|
|
|
create table t1(a int not null auto_increment, b int, primary key(a)) engine=innodb;
|
|
|
|
start transaction;
|
|
insert into t1(b) values (1);
|
|
insert into t1(b) values (2);
|
|
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
|
commit;
|
|
|
|
##########################################################################
|
|
# Catch Error
|
|
##########################################################################
|
|
connection slave;
|
|
source include/wait_for_slave_sql_to_stop.inc;
|
|
|
|
--let $error= query_get_value(SHOW SLAVE STATUS, Last_Errno, 1)
|
|
# windows and linux different error numbers here:
|
|
# Windows:
|
|
# - Last_Errno 29 (File not found)
|
|
# Unix like OS:
|
|
# - Last_Errno 13 (Can't stat file)
|
|
--let $assertion= `SELECT $error=29 OR $error=13`
|
|
if (!$assertion)
|
|
{
|
|
--echo UNEXPECTED ERROR NUMBER: $error
|
|
}
|
|
|
|
##########################################################################
|
|
# Clean up
|
|
##########################################################################
|
|
connection master;
|
|
|
|
drop table t1;
|
|
|
|
connection slave;
|
|
|
|
drop table t1;
|
|
|
|
call mtr.add_suppression("Slave: Can't get stat of .*");
|
|
call mtr.add_suppression("Slave: File.* not found.*");
|