Commit 209b6f9a authored by Michael Widenius's avatar Michael Widenius

Merge

parents 64244a34 456422a2
...@@ -554,6 +554,11 @@ static int display_and_apply_record(const LOG_DESC *log_desc, ...@@ -554,6 +554,11 @@ static int display_and_apply_record(const LOG_DESC *log_desc,
DBUG_ASSERT("one more hook to write" == 0); DBUG_ASSERT("one more hook to write" == 0);
return 1; return 1;
} }
if (rec->type == LOGREC_DEBUG_INFO)
{
/* Query already printed by display_record_position() */
return 0;
}
if ((error= (*log_desc->record_execute_in_redo_phase)(rec))) if ((error= (*log_desc->record_execute_in_redo_phase)(rec)))
eprint(tracef, "Got error %d when executing record %s", eprint(tracef, "Got error %d when executing record %s",
my_errno, log_desc->name); my_errno, log_desc->name);
...@@ -692,6 +697,45 @@ prototype_redo_exec_hook(INCOMPLETE_LOG) ...@@ -692,6 +697,45 @@ prototype_redo_exec_hook(INCOMPLETE_LOG)
} }
static my_bool create_database_if_not_exists(const char *name)
{
char dirname[FN_REFLEN];
size_t length;
MY_STAT stat_info;
DBUG_ENTER("create_database_if_not_exists");
dirname_part(dirname, name, &length);
if (!length)
{
/* Skip files without directores */
DBUG_RETURN(0);
}
/*
Safety; Don't create files with hard path;
Should never happen with MariaDB
If hard path, then error will be detected when trying to create index file
*/
if (test_if_hard_path(dirname))
DBUG_RETURN(0);
if (my_stat(dirname,&stat_info,MYF(0)))
DBUG_RETURN(0);
tprint(tracef, "Creating not existing database '%s'\n", dirname);
if (my_mkdir(dirname, 0777, MYF(MY_WME)))
{
eprint(tracef, "***WARNING: Can't create not existing database '%s'",
dirname);
DBUG_RETURN(1);
}
DBUG_RETURN(0);
}
prototype_redo_exec_hook(REDO_CREATE_TABLE) prototype_redo_exec_hook(REDO_CREATE_TABLE)
{ {
File dfile= -1, kfile= -1; File dfile= -1, kfile= -1;
...@@ -703,11 +747,12 @@ prototype_redo_exec_hook(REDO_CREATE_TABLE) ...@@ -703,11 +747,12 @@ prototype_redo_exec_hook(REDO_CREATE_TABLE)
int error= 1, create_mode= O_RDWR | O_TRUNC, i; int error= 1, create_mode= O_RDWR | O_TRUNC, i;
MARIA_HA *info= NULL; MARIA_HA *info= NULL;
uint kfile_size_before_extension, keystart; uint kfile_size_before_extension, keystart;
DBUG_ENTER("exec_REDO_LOGREC_REDO_CREATE_TABLE");
if (skip_DDLs) if (skip_DDLs)
{ {
tprint(tracef, "we skip DDLs\n"); tprint(tracef, "we skip DDLs\n");
return 0; DBUG_RETURN(0);
} }
enlarge_buffer(rec); enlarge_buffer(rec);
if (log_record_buffer.str == NULL || if (log_record_buffer.str == NULL ||
...@@ -810,6 +855,8 @@ prototype_redo_exec_hook(REDO_CREATE_TABLE) ...@@ -810,6 +855,8 @@ prototype_redo_exec_hook(REDO_CREATE_TABLE)
name); name);
goto end; goto end;
} }
if (create_database_if_not_exists(name))
goto end;
fn_format(filename, name, "", MARIA_NAME_IEXT, fn_format(filename, name, "", MARIA_NAME_IEXT,
(MY_UNPACK_FILENAME | (MY_UNPACK_FILENAME |
(flags & HA_DONT_TOUCH_DATA) ? MY_RETURN_REAL_PATH : 0) | (flags & HA_DONT_TOUCH_DATA) ? MY_RETURN_REAL_PATH : 0) |
...@@ -863,7 +910,7 @@ prototype_redo_exec_hook(REDO_CREATE_TABLE) ...@@ -863,7 +910,7 @@ prototype_redo_exec_hook(REDO_CREATE_TABLE)
error|= my_close(kfile, MYF(MY_WME)); error|= my_close(kfile, MYF(MY_WME));
if (info != NULL) if (info != NULL)
error|= maria_close(info); error|= maria_close(info);
return error; DBUG_RETURN(error);
} }
...@@ -872,10 +919,12 @@ prototype_redo_exec_hook(REDO_RENAME_TABLE) ...@@ -872,10 +919,12 @@ prototype_redo_exec_hook(REDO_RENAME_TABLE)
char *old_name, *new_name; char *old_name, *new_name;
int error= 1; int error= 1;
MARIA_HA *info= NULL; MARIA_HA *info= NULL;
DBUG_ENTER("exec_REDO_LOGREC_REDO_RENAME_TABLE");
if (skip_DDLs) if (skip_DDLs)
{ {
tprint(tracef, "we skip DDLs\n"); tprint(tracef, "we skip DDLs\n");
return 0; DBUG_RETURN(0);
} }
enlarge_buffer(rec); enlarge_buffer(rec);
if (log_record_buffer.str == NULL || if (log_record_buffer.str == NULL ||
...@@ -1050,7 +1099,7 @@ prototype_redo_exec_hook(REDO_RENAME_TABLE) ...@@ -1050,7 +1099,7 @@ prototype_redo_exec_hook(REDO_RENAME_TABLE)
tprint(tracef, "\n"); tprint(tracef, "\n");
if (info != NULL) if (info != NULL)
error|= maria_close(info); error|= maria_close(info);
return error; DBUG_RETURN(error);
} }
...@@ -1252,6 +1301,7 @@ static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id) ...@@ -1252,6 +1301,7 @@ static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id)
MARIA_HA *info; MARIA_HA *info;
MARIA_SHARE *share; MARIA_SHARE *share;
my_off_t dfile_len, kfile_len; my_off_t dfile_len, kfile_len;
DBUG_ENTER("new_table");
checkpoint_useful= TRUE; checkpoint_useful= TRUE;
if ((name == NULL) || (name[0] == 0)) if ((name == NULL) || (name[0] == 0))
...@@ -1288,6 +1338,12 @@ static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id) ...@@ -1288,6 +1338,12 @@ static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id)
*/ */
if (close_one_table(share->open_file_name.str, lsn_of_file_id)) if (close_one_table(share->open_file_name.str, lsn_of_file_id))
goto end; goto end;
/*
We should not try to get length of data/index files as the files
are not on disk yet.
*/
_ma_tmp_disable_logging_for_table(info, FALSE);
goto set_lsn_of_file_id;
} }
if (!share->base.born_transactional) if (!share->base.born_transactional)
{ {
...@@ -1356,6 +1412,8 @@ static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id) ...@@ -1356,6 +1412,8 @@ static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id)
/* Recovery will fix this, no error */ /* Recovery will fix this, no error */
ALERT_USER(); ALERT_USER();
} }
set_lsn_of_file_id:
/* /*
This LSN serves in this situation; assume log is: This LSN serves in this situation; assume log is:
FILE_ID(6->"t2") REDO_INSERT(6) FILE_ID(6->"t1") CHECKPOINT(6->"t1") FILE_ID(6->"t2") REDO_INSERT(6) FILE_ID(6->"t1") CHECKPOINT(6->"t1")
...@@ -1383,7 +1441,7 @@ static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id) ...@@ -1383,7 +1441,7 @@ static int new_table(uint16 sid, const char *name, LSN lsn_of_file_id)
if (error == -1) if (error == -1)
error= 0; error= 0;
} }
return error; DBUG_RETURN(error);
} }
/* /*
......
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