diff --git a/mysql-test/suite/multi_source/info_logs.test b/mysql-test/suite/multi_source/info_logs.test index 73e6ee73722..4e9a4028b93 100644 --- a/mysql-test/suite/multi_source/info_logs.test +++ b/mysql-test/suite/multi_source/info_logs.test @@ -3,6 +3,7 @@ # --source include/not_embedded.inc +--let $rpl_server_count= 0 --connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3) diff --git a/mysql-test/suite/multi_source/multisource.test b/mysql-test/suite/multi_source/multisource.test index 4938a0142d1..858137aeaaa 100644 --- a/mysql-test/suite/multi_source/multisource.test +++ b/mysql-test/suite/multi_source/multisource.test @@ -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) diff --git a/mysql-test/suite/multi_source/relaylog_events.test b/mysql-test/suite/multi_source/relaylog_events.test index ba13a4dd7e9..a59dd706b94 100644 --- a/mysql-test/suite/multi_source/relaylog_events.test +++ b/mysql-test/suite/multi_source/relaylog_events.test @@ -4,6 +4,7 @@ # --source include/not_embedded.inc +--let $rpl_server_count= 0 --connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3) diff --git a/mysql-test/suite/multi_source/reset_slave.test b/mysql-test/suite/multi_source/reset_slave.test index bcc0560fe5b..108941c0d1a 100644 --- a/mysql-test/suite/multi_source/reset_slave.test +++ b/mysql-test/suite/multi_source/reset_slave.test @@ -3,6 +3,7 @@ # --source include/not_embedded.inc +--let $rpl_server_count= 0 --connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3) diff --git a/mysql-test/suite/multi_source/simple.test b/mysql-test/suite/multi_source/simple.test index 915cbd73941..c3b7a60448a 100644 --- a/mysql-test/suite/multi_source/simple.test +++ b/mysql-test/suite/multi_source/simple.test @@ -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) diff --git a/mysql-test/suite/multi_source/skip_counter.test b/mysql-test/suite/multi_source/skip_counter.test index d158f382a97..8202eaed847 100644 --- a/mysql-test/suite/multi_source/skip_counter.test +++ b/mysql-test/suite/multi_source/skip_counter.test @@ -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) diff --git a/mysql-test/suite/multi_source/status_vars.test b/mysql-test/suite/multi_source/status_vars.test index eec89ee4e81..d1cfda75d01 100644 --- a/mysql-test/suite/multi_source/status_vars.test +++ b/mysql-test/suite/multi_source/status_vars.test @@ -3,6 +3,7 @@ # --source include/not_embedded.inc +--let $rpl_server_count= 0 --connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3) diff --git a/sql/slave.cc b/sql/slave.cc index e2a4d229ab9..5dc56545760 100644 --- a/sql/slave.cc +++ b/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.