summaryrefslogtreecommitdiff
path: root/storage
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2018-06-11 13:02:47 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2018-06-12 09:54:31 +0300
commit0ad9c3a0160d1dd46139b3e6b6b05d0fba01540b (patch)
treed5ca6f909b26604fdffe617afa1f4f6089e38e34 /storage
parent24d7cbe1e0a16f75e2325c84f23531742e2a035d (diff)
downloadmariadb-git-0ad9c3a0160d1dd46139b3e6b6b05d0fba01540b.tar.gz
MDEV-16456 InnoDB error "returned OS error 71" complains about wrong path
When attempting to rename a table to a non-existing database, InnoDB would misleadingly report "OS error 71" when in fact the error code is InnoDB's own (OS_FILE_NOT_FOUND), and not report both pathnames. Errors on rename could occur due to reasons connected to either pathname. os_file_handle_rename_error(): New function, to report errors in renaming files.
Diffstat (limited to 'storage')
-rw-r--r--storage/innobase/os/os0file.cc24
-rw-r--r--storage/xtradb/os/os0file.cc22
2 files changed, 40 insertions, 6 deletions
diff --git a/storage/innobase/os/os0file.cc b/storage/innobase/os/os0file.cc
index 8f3f3716fc2..038d59c2170 100644
--- a/storage/innobase/os/os0file.cc
+++ b/storage/innobase/os/os0file.cc
@@ -1939,6 +1939,24 @@ loop:
#endif
}
+/** Handle RENAME error.
+@param name old name of the file
+@param new_name new name of the file */
+static void os_file_handle_rename_error(const char* name, const char* new_name)
+{
+ if (os_file_get_last_error(true) != OS_FILE_DISK_FULL) {
+ ib_logf(IB_LOG_LEVEL_ERROR, "Cannot rename file '%s' to '%s'",
+ name, new_name);
+ } else if (!os_has_said_disk_full) {
+ os_has_said_disk_full = true;
+ /* Disk full error is reported irrespective of the
+ on_error_silent setting. */
+ ib_logf(IB_LOG_LEVEL_ERROR,
+ "Full disk prevents renaming file '%s' to '%s'",
+ name, new_name);
+ }
+}
+
/***********************************************************************//**
NOTE! Use the corresponding macro os_file_rename(), not directly this function!
Renames a file (can also move it to another directory). It is safest that the
@@ -1974,8 +1992,7 @@ os_file_rename_func(
return(TRUE);
}
- os_file_handle_error_no_exit(oldpath, "rename", FALSE);
-
+ os_file_handle_rename_error(oldpath, newpath);
return(FALSE);
#else
int ret;
@@ -1983,8 +2000,7 @@ os_file_rename_func(
ret = rename(oldpath, newpath);
if (ret != 0) {
- os_file_handle_error_no_exit(oldpath, "rename", FALSE);
-
+ os_file_handle_rename_error(oldpath, newpath);
return(FALSE);
}
diff --git a/storage/xtradb/os/os0file.cc b/storage/xtradb/os/os0file.cc
index c1ddc83d852..9df42470e5a 100644
--- a/storage/xtradb/os/os0file.cc
+++ b/storage/xtradb/os/os0file.cc
@@ -2146,6 +2146,24 @@ loop:
#endif
}
+/** Handle RENAME error.
+@param name old name of the file
+@param new_name new name of the file */
+static void os_file_handle_rename_error(const char* name, const char* new_name)
+{
+ if (os_file_get_last_error(true) != OS_FILE_DISK_FULL) {
+ ib_logf(IB_LOG_LEVEL_ERROR, "Cannot rename file '%s' to '%s'",
+ name, new_name);
+ } else if (!os_has_said_disk_full) {
+ os_has_said_disk_full = true;
+ /* Disk full error is reported irrespective of the
+ on_error_silent setting. */
+ ib_logf(IB_LOG_LEVEL_ERROR,
+ "Full disk prevents renaming file '%s' to '%s'",
+ name, new_name);
+ }
+}
+
/***********************************************************************//**
NOTE! Use the corresponding macro os_file_rename(), not directly this function!
Renames a file (can also move it to another directory). It is safest that the
@@ -2181,7 +2199,7 @@ os_file_rename_func(
return(TRUE);
}
- os_file_handle_error_no_exit(oldpath, "rename", FALSE);
+ os_file_handle_rename_error(oldpath, newpath);
return(FALSE);
#else
@@ -2190,7 +2208,7 @@ os_file_rename_func(
ret = rename(oldpath, newpath);
if (ret != 0) {
- os_file_handle_error_no_exit(oldpath, "rename", FALSE);
+ os_file_handle_rename_error(oldpath, newpath);
return(FALSE);
}