mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 11:01:52 +01:00
InnoDB: Add diagnostics when tmpfile() fails at start (Bug #3919)
This commit is contained in:
parent
cb5c3f6e2e
commit
fb9257dc45
4 changed files with 39 additions and 16 deletions
|
@ -642,7 +642,7 @@ dict_init(void)
|
||||||
rw_lock_create(&dict_operation_lock);
|
rw_lock_create(&dict_operation_lock);
|
||||||
rw_lock_set_level(&dict_operation_lock, SYNC_DICT_OPERATION);
|
rw_lock_set_level(&dict_operation_lock, SYNC_DICT_OPERATION);
|
||||||
|
|
||||||
dict_foreign_err_file = tmpfile();
|
dict_foreign_err_file = os_file_create_tmpfile();
|
||||||
mutex_create(&dict_foreign_err_mutex);
|
mutex_create(&dict_foreign_err_mutex);
|
||||||
mutex_set_level(&dict_foreign_err_mutex, SYNC_ANY_LATCH);
|
mutex_set_level(&dict_foreign_err_mutex, SYNC_ANY_LATCH);
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,6 +133,13 @@ Creates the seek mutexes used in positioned reads and writes. */
|
||||||
void
|
void
|
||||||
os_io_init_simple(void);
|
os_io_init_simple(void);
|
||||||
/*===================*/
|
/*===================*/
|
||||||
|
/***************************************************************************
|
||||||
|
Creates a temporary file. In case of error, causes abnormal termination. */
|
||||||
|
|
||||||
|
FILE*
|
||||||
|
os_file_create_tmpfile(void);
|
||||||
|
/*========================*/
|
||||||
|
/* out: temporary file handle (never NULL) */
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
A simple function to open or create a file. */
|
A simple function to open or create a file. */
|
||||||
|
|
||||||
|
|
|
@ -510,7 +510,7 @@ lock_sys_create(
|
||||||
|
|
||||||
/* hash_create_mutexes(lock_sys->rec_hash, 2, SYNC_REC_LOCK); */
|
/* hash_create_mutexes(lock_sys->rec_hash, 2, SYNC_REC_LOCK); */
|
||||||
|
|
||||||
lock_latest_err_file = tmpfile();
|
lock_latest_err_file = os_file_create_tmpfile();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
|
|
|
@ -301,14 +301,11 @@ os_file_handle_error(
|
||||||
/*=================*/
|
/*=================*/
|
||||||
/* out: TRUE if we should retry the
|
/* out: TRUE if we should retry the
|
||||||
operation */
|
operation */
|
||||||
os_file_t file, /* in: file pointer */
|
|
||||||
const char* name, /* in: name of a file or NULL */
|
const char* name, /* in: name of a file or NULL */
|
||||||
const char* operation)/* in: operation */
|
const char* operation)/* in: operation */
|
||||||
{
|
{
|
||||||
ulint err;
|
ulint err;
|
||||||
|
|
||||||
UT_NOT_USED(file);
|
|
||||||
|
|
||||||
err = os_file_get_last_error();
|
err = os_file_get_last_error();
|
||||||
|
|
||||||
if (err == OS_FILE_DISK_FULL) {
|
if (err == OS_FILE_DISK_FULL) {
|
||||||
|
@ -374,6 +371,25 @@ os_io_init_simple(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
Creates a temporary file. In case of error, causes abnormal termination. */
|
||||||
|
|
||||||
|
FILE*
|
||||||
|
os_file_create_tmpfile(void)
|
||||||
|
/*========================*/
|
||||||
|
/* out: temporary file handle (never NULL) */
|
||||||
|
{
|
||||||
|
FILE* file = tmpfile();
|
||||||
|
if (file == NULL) {
|
||||||
|
ut_print_timestamp(stderr);
|
||||||
|
fputs(" InnoDB: Error: unable to create temporary file\n",
|
||||||
|
stderr);
|
||||||
|
os_file_handle_error(NULL, "tmpfile");
|
||||||
|
ut_error;
|
||||||
|
}
|
||||||
|
return(file);
|
||||||
|
}
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
A simple function to open or create a file. */
|
A simple function to open or create a file. */
|
||||||
|
|
||||||
|
@ -430,7 +446,7 @@ try_again:
|
||||||
if (file == INVALID_HANDLE_VALUE) {
|
if (file == INVALID_HANDLE_VALUE) {
|
||||||
*success = FALSE;
|
*success = FALSE;
|
||||||
|
|
||||||
retry = os_file_handle_error(file, name,
|
retry = os_file_handle_error(name,
|
||||||
create_mode == OS_FILE_OPEN ?
|
create_mode == OS_FILE_OPEN ?
|
||||||
"open" : "create");
|
"open" : "create");
|
||||||
if (retry) {
|
if (retry) {
|
||||||
|
@ -472,7 +488,7 @@ try_again:
|
||||||
if (file == -1) {
|
if (file == -1) {
|
||||||
*success = FALSE;
|
*success = FALSE;
|
||||||
|
|
||||||
retry = os_file_handle_error(file, name,
|
retry = os_file_handle_error(name,
|
||||||
create_mode == OS_FILE_OPEN ?
|
create_mode == OS_FILE_OPEN ?
|
||||||
"open" : "create");
|
"open" : "create");
|
||||||
if (retry) {
|
if (retry) {
|
||||||
|
@ -678,7 +694,7 @@ try_again:
|
||||||
if (file == INVALID_HANDLE_VALUE) {
|
if (file == INVALID_HANDLE_VALUE) {
|
||||||
*success = FALSE;
|
*success = FALSE;
|
||||||
|
|
||||||
retry = os_file_handle_error(file, name,
|
retry = os_file_handle_error(name,
|
||||||
create_mode == OS_FILE_OPEN ?
|
create_mode == OS_FILE_OPEN ?
|
||||||
"open" : "create");
|
"open" : "create");
|
||||||
if (retry) {
|
if (retry) {
|
||||||
|
@ -766,7 +782,7 @@ try_again:
|
||||||
if (file == -1) {
|
if (file == -1) {
|
||||||
*success = FALSE;
|
*success = FALSE;
|
||||||
|
|
||||||
retry = os_file_handle_error(file, name,
|
retry = os_file_handle_error(name,
|
||||||
create_mode == OS_FILE_OPEN ?
|
create_mode == OS_FILE_OPEN ?
|
||||||
"open" : "create");
|
"open" : "create");
|
||||||
if (retry) {
|
if (retry) {
|
||||||
|
@ -801,7 +817,7 @@ os_file_close(
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
os_file_handle_error(file, NULL, "close");
|
os_file_handle_error(NULL, "close");
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
#else
|
#else
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -809,7 +825,7 @@ os_file_close(
|
||||||
ret = close(file);
|
ret = close(file);
|
||||||
|
|
||||||
if (ret == -1) {
|
if (ret == -1) {
|
||||||
os_file_handle_error(file, NULL, "close");
|
os_file_handle_error(NULL, "close");
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1029,7 +1045,7 @@ os_file_flush(
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
os_file_handle_error(file, NULL, "flush");
|
os_file_handle_error(NULL, "flush");
|
||||||
|
|
||||||
/* It is a fatal error if a file flush does not succeed, because then
|
/* It is a fatal error if a file flush does not succeed, because then
|
||||||
the database can get corrupt on disk */
|
the database can get corrupt on disk */
|
||||||
|
@ -1063,7 +1079,7 @@ os_file_flush(
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
" InnoDB: Error: the OS said file flush did not succeed\n");
|
" InnoDB: Error: the OS said file flush did not succeed\n");
|
||||||
|
|
||||||
os_file_handle_error(file, NULL, "flush");
|
os_file_handle_error(NULL, "flush");
|
||||||
|
|
||||||
/* It is a fatal error if a file flush does not succeed, because then
|
/* It is a fatal error if a file flush does not succeed, because then
|
||||||
the database can get corrupt on disk */
|
the database can get corrupt on disk */
|
||||||
|
@ -1323,7 +1339,7 @@ try_again:
|
||||||
#ifdef __WIN__
|
#ifdef __WIN__
|
||||||
error_handling:
|
error_handling:
|
||||||
#endif
|
#endif
|
||||||
retry = os_file_handle_error(file, NULL, "read");
|
retry = os_file_handle_error(NULL, "read");
|
||||||
|
|
||||||
if (retry) {
|
if (retry) {
|
||||||
goto try_again;
|
goto try_again;
|
||||||
|
@ -2278,7 +2294,7 @@ try_again:
|
||||||
|
|
||||||
os_aio_array_free_slot(array, slot);
|
os_aio_array_free_slot(array, slot);
|
||||||
|
|
||||||
retry = os_file_handle_error(file, name,
|
retry = os_file_handle_error(name,
|
||||||
type == OS_FILE_READ ? "aio read" : "aio write");
|
type == OS_FILE_READ ? "aio read" : "aio write");
|
||||||
if (retry) {
|
if (retry) {
|
||||||
|
|
||||||
|
@ -2378,7 +2394,7 @@ os_aio_windows_handle(
|
||||||
ut_a(TRUE == os_file_flush(slot->file));
|
ut_a(TRUE == os_file_flush(slot->file));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
os_file_handle_error(slot->file, slot->name, "Windows aio");
|
os_file_handle_error(slot->name, "Windows aio");
|
||||||
|
|
||||||
ret_val = FALSE;
|
ret_val = FALSE;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue