mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
MDEV-17710 "unknown error" with FLUSH LOGS if log directory is not writeable
This commit is contained in:
parent
15c79c41e4
commit
88961a28e2
6 changed files with 23 additions and 16 deletions
3
mysql-test/main/flush_logs_not_windows.result
Normal file
3
mysql-test/main/flush_logs_not_windows.result
Normal file
|
@ -0,0 +1,3 @@
|
|||
flush logs;
|
||||
ERROR HY000: Can't create file 'MYSQLTEST_VARDIR/log/mysqld.1.err' (errno: 13 "Permission denied")
|
||||
flush logs;
|
13
mysql-test/main/flush_logs_not_windows.test
Normal file
13
mysql-test/main/flush_logs_not_windows.test
Normal file
|
@ -0,0 +1,13 @@
|
|||
source include/not_windows.inc;
|
||||
source include/not_embedded.inc;
|
||||
#
|
||||
# MDEV-17710 "unknown error" with FLUSH LOGS if log directory is not writeable
|
||||
#
|
||||
move_file $MYSQLTEST_VARDIR/log/mysqld.1.err $MYSQLTEST_VARDIR/log/mysqld.1.err-bak;
|
||||
system chmod u-w $MYSQLTEST_VARDIR/log;
|
||||
replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR;
|
||||
error ER_CANT_CREATE_FILE;
|
||||
flush logs;
|
||||
system chmod u+w $MYSQLTEST_VARDIR/log;
|
||||
move_file $MYSQLTEST_VARDIR/log/mysqld.1.err-bak $MYSQLTEST_VARDIR/log/mysqld.1.err;
|
||||
flush logs;
|
12
sql/log.cc
12
sql/log.cc
|
@ -8644,14 +8644,14 @@ void sql_perror(const char *message)
|
|||
redirect stdout and stderr to a file. The streams are reopened
|
||||
only for appending (writing at end of file).
|
||||
*/
|
||||
extern "C" my_bool reopen_fstreams(const char *filename,
|
||||
FILE *outstream, FILE *errstream)
|
||||
bool reopen_fstreams(const char *filename, FILE *outstream, FILE *errstream)
|
||||
{
|
||||
if (outstream && !my_freopen(filename, "a", outstream))
|
||||
return TRUE;
|
||||
|
||||
if (errstream && !my_freopen(filename, "a", errstream))
|
||||
if ((outstream && !my_freopen(filename, "a", outstream)) ||
|
||||
(errstream && !my_freopen(filename, "a", errstream)))
|
||||
{
|
||||
my_error(ER_CANT_CREATE_FILE, MYF(0), filename, errno);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* The error stream must be unbuffered. */
|
||||
if (errstream)
|
||||
|
|
|
@ -26,6 +26,7 @@ class Relay_log_info;
|
|||
|
||||
class Format_description_log_event;
|
||||
|
||||
bool reopen_fstreams(const char *filename, FILE *outstream, FILE *errstream);
|
||||
void setup_log_handling();
|
||||
bool trans_has_updated_trans_table(const THD* thd);
|
||||
bool stmt_has_updated_trans_table(const THD *thd);
|
||||
|
|
|
@ -209,9 +209,6 @@ typedef fp_except fp_except_t;
|
|||
#define fcntl(X,Y,Z) 0
|
||||
#endif
|
||||
|
||||
extern "C" my_bool reopen_fstreams(const char *filename,
|
||||
FILE *outstream, FILE *errstream);
|
||||
|
||||
inline void setup_fpu()
|
||||
{
|
||||
#if defined(__FreeBSD__) && defined(HAVE_IEEEFP_H) && !defined(HAVE_FEDISABLEEXCEPT)
|
||||
|
|
|
@ -124,14 +124,7 @@ bool reload_acl_and_cache(THD *thd, unsigned long long options,
|
|||
|
||||
if (options & REFRESH_ERROR_LOG)
|
||||
if (unlikely(flush_error_log()))
|
||||
{
|
||||
/*
|
||||
When flush_error_log() failed, my_error() has not been called.
|
||||
So, we have to do it here to keep the protocol.
|
||||
*/
|
||||
my_error(ER_UNKNOWN_ERROR, MYF(0));
|
||||
result= 1;
|
||||
}
|
||||
|
||||
if ((options & REFRESH_SLOW_LOG) && global_system_variables.sql_log_slow)
|
||||
logger.flush_slow_log();
|
||||
|
|
Loading…
Reference in a new issue