Fixed MDEV-4394 Sporadic failures in multi_source tests
Fixed MDEV-4033 Unable to use slave's temporary directory /tmp - Can't create/write to file '/tmp/SQL_LOAD-' (Errcode: 17 "File exists") - Cache value of check_temp_dir() to avoid race condition - Set $rpl_server_count to avoid error in show_rpl_debug_info.inc mysql-test/suite/multi_source/info_logs.test: Set $rpl_server_count mysql-test/suite/multi_source/multisource.test: Set $rpl_server_count mysql-test/suite/multi_source/relaylog_events.test: Set $rpl_server_count mysql-test/suite/multi_source/reset_slave.test: Set $rpl_server_count mysql-test/suite/multi_source/simple.test: Set $rpl_server_count mysql-test/suite/multi_source/skip_counter.test: Set $rpl_server_count mysql-test/suite/multi_source/status_vars.test: Set $rpl_server_count sql/slave.cc: Cache value of check_temp_dir() to avoid race condition
This commit is contained in:
parent
f57ecb7786
commit
757a6b4357
@ -3,6 +3,7 @@
|
||||
#
|
||||
|
||||
--source include/not_embedded.inc
|
||||
--let $rpl_server_count= 0
|
||||
|
||||
--connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3)
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
|
||||
--source include/not_embedded.inc
|
||||
--source include/have_innodb.inc
|
||||
--let $rpl_server_count= 0
|
||||
|
||||
--connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3)
|
||||
|
||||
|
@ -4,6 +4,7 @@
|
||||
#
|
||||
|
||||
--source include/not_embedded.inc
|
||||
--let $rpl_server_count= 0
|
||||
|
||||
--connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3)
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
#
|
||||
|
||||
--source include/not_embedded.inc
|
||||
--let $rpl_server_count= 0
|
||||
|
||||
--connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3)
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
#
|
||||
|
||||
--source include/not_embedded.inc
|
||||
--let $rpl_server_count= 0
|
||||
|
||||
--connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3)
|
||||
--connect (master1,127.0.0.1,root,,,$SERVER_MYPORT_1)
|
||||
|
@ -6,6 +6,7 @@
|
||||
# on the 1st master
|
||||
|
||||
--source include/not_embedded.inc
|
||||
--let $rpl_server_count= 0
|
||||
|
||||
--connect (master1,127.0.0.1,root,,,$SERVER_MYPORT_1)
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
#
|
||||
|
||||
--source include/not_embedded.inc
|
||||
--let $rpl_server_count= 0
|
||||
|
||||
--connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3)
|
||||
|
||||
|
35
sql/slave.cc
35
sql/slave.cc
@ -3526,17 +3526,34 @@ err_during_init:
|
||||
/*
|
||||
Check the temporary directory used by commands like
|
||||
LOAD DATA INFILE.
|
||||
|
||||
As the directory never changes during a mysqld run, we only
|
||||
test this once and cache the result. This also resolve a race condition
|
||||
when this can be run by multiple threads at the same time.
|
||||
*/
|
||||
|
||||
static bool check_temp_dir_run= 0;
|
||||
static int check_temp_dir_result= 0;
|
||||
|
||||
static
|
||||
int check_temp_dir(char* tmp_file)
|
||||
{
|
||||
int fd;
|
||||
File fd;
|
||||
int result= 1; // Assume failure
|
||||
MY_DIR *dirp;
|
||||
char tmp_dir[FN_REFLEN];
|
||||
size_t tmp_dir_size;
|
||||
|
||||
DBUG_ENTER("check_temp_dir");
|
||||
|
||||
mysql_mutex_lock(&LOCK_thread_count);
|
||||
if (check_temp_dir_run)
|
||||
{
|
||||
result= check_temp_dir_result;
|
||||
goto end;
|
||||
}
|
||||
check_temp_dir_run= 1;
|
||||
|
||||
/*
|
||||
Get the directory from the temporary file.
|
||||
*/
|
||||
@ -3546,27 +3563,33 @@ int check_temp_dir(char* tmp_file)
|
||||
Check if the directory exists.
|
||||
*/
|
||||
if (!(dirp=my_dir(tmp_dir,MYF(MY_WME))))
|
||||
DBUG_RETURN(1);
|
||||
goto end;
|
||||
my_dirend(dirp);
|
||||
|
||||
/*
|
||||
Check permissions to create a file.
|
||||
Check permissions to create a file. We use O_TRUNC to ensure that
|
||||
things works even if we happen to have and old file laying around.
|
||||
*/
|
||||
if ((fd= mysql_file_create(key_file_misc,
|
||||
tmp_file, CREATE_MODE,
|
||||
O_WRONLY | O_BINARY | O_EXCL | O_NOFOLLOW,
|
||||
O_WRONLY | O_BINARY | O_TRUNC | O_NOFOLLOW,
|
||||
MYF(MY_WME))) < 0)
|
||||
DBUG_RETURN(1);
|
||||
goto end;
|
||||
|
||||
result= 0; // Directory name ok
|
||||
/*
|
||||
Clean up.
|
||||
*/
|
||||
mysql_file_close(fd, MYF(0));
|
||||
mysql_file_delete(key_file_misc, tmp_file, MYF(0));
|
||||
|
||||
DBUG_RETURN(0);
|
||||
end:
|
||||
check_temp_dir_result= result;
|
||||
mysql_mutex_unlock(&LOCK_thread_count);
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
Slave SQL thread entry point.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user