Commit 7826fce2 authored by dlenev@mysql.com's avatar dlenev@mysql.com

Fixed BUG#1357 MySQL too eagerly cleanups temporary files for LOAD DATA (SQL_LOAD-...)

parent b038a7c4
...@@ -140,11 +140,6 @@ Log_event::Log_event() ...@@ -140,11 +140,6 @@ Log_event::Log_event()
/* /*
Delete all temporary files used for SQL_LOAD. Delete all temporary files used for SQL_LOAD.
TODO
- When we get a 'server start' event, we should only remove
the files associated with the server id that just started.
Easily fixable by adding server_id as a prefix to the log files.
*/ */
static void cleanup_load_tmpdir() static void cleanup_load_tmpdir()
...@@ -152,13 +147,30 @@ static void cleanup_load_tmpdir() ...@@ -152,13 +147,30 @@ static void cleanup_load_tmpdir()
MY_DIR *dirp; MY_DIR *dirp;
FILEINFO *file; FILEINFO *file;
uint i; uint i;
char fname[FN_REFLEN];
char prefbuf[31];
char *p;
if (!(dirp=my_dir(slave_load_tmpdir,MYF(MY_WME)))) if (!(dirp=my_dir(slave_load_tmpdir,MYF(MY_WME))))
return; return;
char fname[FN_REFLEN];
/*
When we are deleting temporary files, we should only remove
the files associated with the server id of our server.
We don't use event_server_id here because since we've disabled
direct binlogging of Create_file/Append_file/Exec_load events
we cannot meet Start_log event in the middle of events from one
LOAD DATA.
*/
p= strmake(prefbuf,"SQL_LOAD-",9);
p= int10_to_str(::server_id, p, 10);
*(p++)= '-';
*p= 0;
for (i=0 ; i < (uint)dirp->number_off_files; i++) for (i=0 ; i < (uint)dirp->number_off_files; i++)
{ {
file=dirp->dir_entry+i; file=dirp->dir_entry+i;
if (is_prefix(file->name,"SQL_LOAD-")) if (is_prefix(file->name, prefbuf))
{ {
fn_format(fname,file->name,slave_load_tmpdir,"",MY_UNPACK_FILENAME); fn_format(fname,file->name,slave_load_tmpdir,"",MY_UNPACK_FILENAME);
my_delete(fname, MYF(0)); my_delete(fname, MYF(0));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment