Commit 31c8c95b authored by Michael Widenius's avatar Michael Widenius

Added logging of all errors from my_read/my_write/my_pread/my_pwrite/my_open &...

Added logging of all errors from my_read/my_write/my_pread/my_pwrite/my_open & my_malloc to mysqld error log if one sets log-warning to 10 or 11
The idea is that my_global_flags is ored to the MyFlags parameter for the above functions if the MY_WME flag is not set.
As the my_global_flags has ME_JUST_INFO (mark error as 'note') and possible ME_NOREFRESH (write error to log) this will force mysqld to log the not critical error to the log as a note.


 

include/my_sys.h:
  Moved MY_SYNC_DIR to ensure it never clashes with ME_JUST_INFO
  Added my_global_flags
mysql-test/Makefile.am:
  Removed not used bugs directory
mysys/my_init.c:
  Added my_global_flags, a variable that is ored to MyFlags in a those mysys functions we want extra logging.
mysys/my_malloc.c:
  Added support for my_global_flags
mysys/my_open.c:
  Added support for my_global_flags
mysys/my_pread.c:
  Added support for my_global_flags
mysys/my_read.c:
  Added support for my_global_flags
mysys/my_static.c:
  Added my_global_flags
mysys/my_write.c:
  Added support for my_global_flags
sql/mysqld.cc:
  Set my_global_flags for warning levels 10 & 11
sql/sql_base.cc:
  Don't increment unhandled errors for notes or warnings.
parent 4692537f
...@@ -49,7 +49,6 @@ extern int NEAR my_errno; /* Last error in mysys */ ...@@ -49,7 +49,6 @@ extern int NEAR my_errno; /* Last error in mysys */
#define MY_WME 16 /* Write message on error */ #define MY_WME 16 /* Write message on error */
#define MY_WAIT_IF_FULL 32 /* Wait and try again if disk full error */ #define MY_WAIT_IF_FULL 32 /* Wait and try again if disk full error */
#define MY_IGNORE_BADFD 32 /* my_sync: ignore 'bad descriptor' errors */ #define MY_IGNORE_BADFD 32 /* my_sync: ignore 'bad descriptor' errors */
#define MY_SYNC_DIR 1024 /* my_create/delete/rename: sync directory */
#define MY_RAID 64 /* Support for RAID */ #define MY_RAID 64 /* Support for RAID */
#define MY_FULL_IO 512 /* For my_read - loop intil I/O is complete */ #define MY_FULL_IO 512 /* For my_read - loop intil I/O is complete */
#define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */ #define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */
...@@ -70,6 +69,7 @@ extern int NEAR my_errno; /* Last error in mysys */ ...@@ -70,6 +69,7 @@ extern int NEAR my_errno; /* Last error in mysys */
#define MY_DONT_OVERWRITE_FILE 2048 /* my_copy: Don't overwrite file */ #define MY_DONT_OVERWRITE_FILE 2048 /* my_copy: Don't overwrite file */
#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */ #define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */
#define MY_SYNC 4096 /* my_copy(): sync dst file */ #define MY_SYNC 4096 /* my_copy(): sync dst file */
#define MY_SYNC_DIR 32768 /* my_create/delete/rename: sync directory */
#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */ #define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */
#define MY_GIVE_INFO 2 /* Give time info about process*/ #define MY_GIVE_INFO 2 /* Give time info about process*/
...@@ -255,7 +255,7 @@ extern ulong my_file_total_opened; ...@@ -255,7 +255,7 @@ extern ulong my_file_total_opened;
extern ulong my_sync_count; extern ulong my_sync_count;
extern uint mysys_usage_id; extern uint mysys_usage_id;
extern my_bool my_init_done; extern my_bool my_init_done;
extern myf my_global_flags; /* Set to MY_WME for more error messages */
/* Point to current my_message() */ /* Point to current my_message() */
extern void (*my_sigtstp_cleanup)(void), extern void (*my_sigtstp_cleanup)(void),
/* Executed before jump to shell */ /* Executed before jump to shell */
......
...@@ -84,7 +84,6 @@ TEST_DIRS = t r include std_data std_data/parts collections \ ...@@ -84,7 +84,6 @@ TEST_DIRS = t r include std_data std_data/parts collections \
std_data/funcs_1 \ std_data/funcs_1 \
extra/binlog_tests/ extra/rpl_tests \ extra/binlog_tests/ extra/rpl_tests \
suite/binlog suite/binlog/t suite/binlog/r suite/binlog/std_data \ suite/binlog suite/binlog/t suite/binlog/r suite/binlog/std_data \
suite/bugs suite/bugs/data suite/bugs/t suite/bugs/r \
suite/federated \ suite/federated \
suite/pbxt/t suite/pbxt/r suite/pbxt \ suite/pbxt/t suite/pbxt/r suite/pbxt \
suite/vcol suite/vcol/t suite/vcol/r suite/vcol/inc \ suite/vcol suite/vcol/t suite/vcol/r suite/vcol/inc \
......
...@@ -77,6 +77,8 @@ my_bool my_init(void) ...@@ -77,6 +77,8 @@ my_bool my_init(void)
mysys_usage_id++; mysys_usage_id++;
my_umask= 0660; /* Default umask for new files */ my_umask= 0660; /* Default umask for new files */
my_umask_dir= 0700; /* Default umask for new directories */ my_umask_dir= 0700; /* Default umask for new directories */
my_global_flags= 0;
init_glob_errs(); init_glob_errs();
my_progname_short= "unknown"; my_progname_short= "unknown";
if (my_progname) if (my_progname)
......
...@@ -31,6 +31,8 @@ void *my_malloc(size_t size, myf my_flags) ...@@ -31,6 +31,8 @@ void *my_malloc(size_t size, myf my_flags)
void* point; void* point;
DBUG_ENTER("my_malloc"); DBUG_ENTER("my_malloc");
DBUG_PRINT("my",("size: %lu my_flags: %d", (ulong) size, my_flags)); DBUG_PRINT("my",("size: %lu my_flags: %d", (ulong) size, my_flags));
if (!(my_flags & (MY_WME | MY_FAE)))
my_flags|= my_global_flags;
if (!size) if (!size)
size=1; /* Safety */ size=1; /* Safety */
...@@ -48,7 +50,9 @@ void *my_malloc(size_t size, myf my_flags) ...@@ -48,7 +50,9 @@ void *my_malloc(size_t size, myf my_flags)
if (my_flags & MY_FAE) if (my_flags & MY_FAE)
error_handler_hook=fatal_error_handler_hook; error_handler_hook=fatal_error_handler_hook;
if (my_flags & (MY_FAE+MY_WME)) if (my_flags & (MY_FAE+MY_WME))
my_error(EE_OUTOFMEMORY, MYF(ME_BELL+ME_WAITTANG+ME_NOREFRESH),size); my_error(EE_OUTOFMEMORY,
MYF(ME_BELL | ME_WAITTANG | ME_NOREFRESH | (my_flags & ME_JUST_INFO)),
size);
DBUG_EXECUTE_IF("simulate_out_of_memory", DBUG_EXECUTE_IF("simulate_out_of_memory",
DBUG_SET("-d,simulate_out_of_memory");); DBUG_SET("-d,simulate_out_of_memory"););
if (my_flags & MY_FAE) if (my_flags & MY_FAE)
......
...@@ -43,6 +43,9 @@ File my_open(const char *FileName, int Flags, myf MyFlags) ...@@ -43,6 +43,9 @@ File my_open(const char *FileName, int Flags, myf MyFlags)
DBUG_ENTER("my_open"); DBUG_ENTER("my_open");
DBUG_PRINT("my",("Name: '%s' Flags: %d MyFlags: %d", DBUG_PRINT("my",("Name: '%s' Flags: %d MyFlags: %d",
FileName, Flags, MyFlags)); FileName, Flags, MyFlags));
if (!(MyFlags & (MY_WME | MY_FAE | MY_FFNF)))
MyFlags|= my_global_flags;
#if defined(__WIN__) #if defined(__WIN__)
/* /*
Check that we don't try to open or create a file name that may Check that we don't try to open or create a file name that may
...@@ -92,6 +95,8 @@ int my_close(File fd, myf MyFlags) ...@@ -92,6 +95,8 @@ int my_close(File fd, myf MyFlags)
int err; int err;
DBUG_ENTER("my_close"); DBUG_ENTER("my_close");
DBUG_PRINT("my",("fd: %d MyFlags: %d",fd, MyFlags)); DBUG_PRINT("my",("fd: %d MyFlags: %d",fd, MyFlags));
if (!(MyFlags & (MY_WME | MY_FAE)))
MyFlags|= my_global_flags;
pthread_mutex_lock(&THR_LOCK_open); pthread_mutex_lock(&THR_LOCK_open);
do do
...@@ -104,7 +109,8 @@ int my_close(File fd, myf MyFlags) ...@@ -104,7 +109,8 @@ int my_close(File fd, myf MyFlags)
DBUG_PRINT("error",("Got error %d on close",err)); DBUG_PRINT("error",("Got error %d on close",err));
my_errno=errno; my_errno=errno;
if (MyFlags & (MY_FAE | MY_WME)) if (MyFlags & (MY_FAE | MY_WME))
my_error(EE_BADCLOSE, MYF(ME_BELL+ME_WAITTANG),my_filename(fd),errno); my_error(EE_BADCLOSE, MYF(ME_BELL | ME_WAITTANG | (MyFlags & (ME_JUST_INFO | ME_NOREFRESH))),
my_filename(fd),errno);
} }
if ((uint) fd < my_file_limit && my_file_info[fd].type != UNOPEN) if ((uint) fd < my_file_limit && my_file_info[fd].type != UNOPEN)
{ {
...@@ -180,8 +186,8 @@ File my_register_filename(File fd, const char *FileName, enum file_type ...@@ -180,8 +186,8 @@ File my_register_filename(File fd, const char *FileName, enum file_type
{ {
if (my_errno == EMFILE) if (my_errno == EMFILE)
error_message_number= EE_OUT_OF_FILERESOURCES; error_message_number= EE_OUT_OF_FILERESOURCES;
DBUG_PRINT("error",("print err: %d",error_message_number)); my_error(error_message_number,
my_error(error_message_number, MYF(ME_BELL+ME_WAITTANG), MYF(ME_BELL | ME_WAITTANG | (MyFlags & (ME_JUST_INFO | ME_NOREFRESH))),
FileName, my_errno); FileName, my_errno);
} }
DBUG_RETURN(-1); DBUG_RETURN(-1);
......
...@@ -58,6 +58,9 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset, ...@@ -58,6 +58,9 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset,
Filedes, ullstr(offset, llbuf), (long) Buffer, Filedes, ullstr(offset, llbuf), (long) Buffer,
(ulong)Count, MyFlags)); (ulong)Count, MyFlags));
#endif #endif
if (!(MyFlags & (MY_WME | MY_FAE | MY_FNABP)))
MyFlags|= my_global_flags;
for (;;) for (;;)
{ {
errno= 0; /* Linux, Windows don't reset this on EOF/success */ errno= 0; /* Linux, Windows don't reset this on EOF/success */
...@@ -92,11 +95,13 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset, ...@@ -92,11 +95,13 @@ size_t my_pread(File Filedes, uchar *Buffer, size_t Count, my_off_t offset,
if (MyFlags & (MY_WME | MY_FAE | MY_FNABP)) if (MyFlags & (MY_WME | MY_FAE | MY_FNABP))
{ {
if (readbytes == (size_t) -1) if (readbytes == (size_t) -1)
my_error(EE_READ, MYF(ME_BELL+ME_WAITTANG), my_error(EE_READ,
MYF(ME_BELL | ME_WAITTANG | (MyFlags & (ME_JUST_INFO | ME_NOREFRESH))),
my_filename(Filedes),my_errno); my_filename(Filedes),my_errno);
else if (MyFlags & (MY_NABP | MY_FNABP)) else if (MyFlags & (MY_NABP | MY_FNABP))
my_error(EE_EOFERR, MYF(ME_BELL+ME_WAITTANG), my_error(EE_EOFERR,
my_filename(Filedes),my_errno); MYF(ME_BELL | ME_WAITTANG | (MyFlags & (ME_JUST_INFO | ME_NOREFRESH))),
my_filename(Filedes),my_errno);
} }
if (readbytes == (size_t) -1 || (MyFlags & (MY_FNABP | MY_NABP))) if (readbytes == (size_t) -1 || (MyFlags & (MY_FNABP | MY_NABP)))
DBUG_RETURN(MY_FILE_ERROR); /* Return with error */ DBUG_RETURN(MY_FILE_ERROR); /* Return with error */
...@@ -143,6 +148,8 @@ size_t my_pwrite(int Filedes, const uchar *Buffer, size_t Count, ...@@ -143,6 +148,8 @@ size_t my_pwrite(int Filedes, const uchar *Buffer, size_t Count,
#endif #endif
errors= 0; errors= 0;
written= 0; written= 0;
if (!(MyFlags & (MY_WME | MY_FAE | MY_FNABP)))
MyFlags|= my_global_flags;
for (;;) for (;;)
{ {
...@@ -183,20 +190,19 @@ size_t my_pwrite(int Filedes, const uchar *Buffer, size_t Count, ...@@ -183,20 +190,19 @@ size_t my_pwrite(int Filedes, const uchar *Buffer, size_t Count,
if ((writenbytes && writenbytes != (size_t) -1) || my_errno == EINTR) if ((writenbytes && writenbytes != (size_t) -1) || my_errno == EINTR)
continue; /* Retry */ continue; /* Retry */
#endif #endif
/* Don't give a warning if it's ok that we only write part of the data */
if (MyFlags & (MY_NABP | MY_FNABP)) if (MyFlags & (MY_NABP | MY_FNABP))
{ {
if (MyFlags & (MY_WME | MY_FAE | MY_FNABP)) if (MyFlags & (MY_WME | MY_FAE | MY_FNABP))
{ my_error(EE_WRITE, MYF(ME_BELL | ME_WAITTANG | (MyFlags & (ME_JUST_INFO | ME_NOREFRESH))),
my_error(EE_WRITE, MYF(ME_BELL | ME_WAITTANG), my_filename(Filedes),my_errno);
my_filename(Filedes),my_errno); DBUG_RETURN(MY_FILE_ERROR); /* Error on write */
}
DBUG_RETURN(MY_FILE_ERROR); /* Error on read */
} }
else break; /* Return bytes written */
break; /* Return bytes written */
} }
DBUG_EXECUTE_IF("check", my_seek(Filedes, -1, SEEK_SET, MYF(0));); DBUG_EXECUTE_IF("check", my_seek(Filedes, -1, SEEK_SET, MYF(0)););
if (MyFlags & (MY_NABP | MY_FNABP)) if (MyFlags & (MY_NABP | MY_FNABP))
DBUG_RETURN(0); /* Want only errors */ DBUG_RETURN(0); /* Want only errors */
DBUG_RETURN(writenbytes+written); /* purecov: inspected */ DBUG_RETURN(writenbytes+written); /* purecov: inspected */
} /* my_pwrite */ } /* my_pwrite */
...@@ -40,6 +40,8 @@ size_t my_read(File Filedes, uchar *Buffer, size_t Count, myf MyFlags) ...@@ -40,6 +40,8 @@ size_t my_read(File Filedes, uchar *Buffer, size_t Count, myf MyFlags)
DBUG_PRINT("my",("fd: %d Buffer: 0x%lx Count: %lu MyFlags: %d", DBUG_PRINT("my",("fd: %d Buffer: 0x%lx Count: %lu MyFlags: %d",
Filedes, (long) Buffer, (ulong) Count, MyFlags)); Filedes, (long) Buffer, (ulong) Count, MyFlags));
save_count= Count; save_count= Count;
if (!(MyFlags & (MY_WME | MY_FAE | MY_FNABP)))
MyFlags|= my_global_flags;
for (;;) for (;;)
{ {
...@@ -64,10 +66,12 @@ size_t my_read(File Filedes, uchar *Buffer, size_t Count, myf MyFlags) ...@@ -64,10 +66,12 @@ size_t my_read(File Filedes, uchar *Buffer, size_t Count, myf MyFlags)
if (MyFlags & (MY_WME | MY_FAE | MY_FNABP)) if (MyFlags & (MY_WME | MY_FAE | MY_FNABP))
{ {
if (readbytes == (size_t) -1) if (readbytes == (size_t) -1)
my_error(EE_READ, MYF(ME_BELL+ME_WAITTANG), my_error(EE_READ,
MYF(ME_BELL | ME_WAITTANG | (MyFlags & (ME_JUST_INFO | ME_NOREFRESH))),
my_filename(Filedes),my_errno); my_filename(Filedes),my_errno);
else if (MyFlags & (MY_NABP | MY_FNABP)) else if (MyFlags & (MY_NABP | MY_FNABP))
my_error(EE_EOFERR, MYF(ME_BELL+ME_WAITTANG), my_error(EE_EOFERR,
MYF(ME_BELL | ME_WAITTANG | (MyFlags & (ME_JUST_INFO | ME_NOREFRESH))),
my_filename(Filedes),my_errno); my_filename(Filedes),my_errno);
} }
if (readbytes == (size_t) -1 || if (readbytes == (size_t) -1 ||
......
...@@ -32,6 +32,7 @@ char NEAR curr_dir[FN_REFLEN]= {0}, ...@@ -32,6 +32,7 @@ char NEAR curr_dir[FN_REFLEN]= {0},
ulong my_stream_opened=0,my_file_opened=0, my_tmp_file_created=0; ulong my_stream_opened=0,my_file_opened=0, my_tmp_file_created=0;
ulong my_file_total_opened= 0; ulong my_file_total_opened= 0;
int NEAR my_umask=0664, NEAR my_umask_dir=0777; int NEAR my_umask=0664, NEAR my_umask_dir=0777;
myf my_global_flags;
#ifndef THREAD #ifndef THREAD
int NEAR my_errno=0; int NEAR my_errno=0;
#endif #endif
......
...@@ -28,6 +28,8 @@ size_t my_write(int Filedes, const uchar *Buffer, size_t Count, myf MyFlags) ...@@ -28,6 +28,8 @@ size_t my_write(int Filedes, const uchar *Buffer, size_t Count, myf MyFlags)
DBUG_PRINT("my",("fd: %d Buffer: 0x%lx Count: %lu MyFlags: %d", DBUG_PRINT("my",("fd: %d Buffer: 0x%lx Count: %lu MyFlags: %d",
Filedes, (long) Buffer, (ulong) Count, MyFlags)); Filedes, (long) Buffer, (ulong) Count, MyFlags));
errors=0; written=0; errors=0; written=0;
if (!(MyFlags & (MY_WME | MY_FAE | MY_FNABP)))
MyFlags|= my_global_flags;
/* The behavior of write(fd, buf, 0) is not portable */ /* The behavior of write(fd, buf, 0) is not portable */
if (unlikely(!Count)) if (unlikely(!Count))
...@@ -78,19 +80,20 @@ size_t my_write(int Filedes, const uchar *Buffer, size_t Count, myf MyFlags) ...@@ -78,19 +80,20 @@ size_t my_write(int Filedes, const uchar *Buffer, size_t Count, myf MyFlags)
else else
continue; /* Retry */ continue; /* Retry */
#endif #endif
/* Don't give a warning if it's ok that we only write part of the data */
if (MyFlags & (MY_NABP | MY_FNABP)) if (MyFlags & (MY_NABP | MY_FNABP))
{ {
if (MyFlags & (MY_WME | MY_FAE | MY_FNABP)) if (MyFlags & (MY_WME | MY_FAE | MY_FNABP))
{ {
my_error(EE_WRITE, MYF(ME_BELL+ME_WAITTANG), my_error(EE_WRITE, MYF(ME_BELL | ME_WAITTANG | (MyFlags & (ME_JUST_INFO | ME_NOREFRESH))),
my_filename(Filedes),my_errno); my_filename(Filedes),my_errno);
} }
DBUG_RETURN(MY_FILE_ERROR); /* Error on read */ DBUG_RETURN(MY_FILE_ERROR); /* Error on read */
} }
else break; /* Return bytes written */
break; /* Return bytes written */
} }
if (MyFlags & (MY_NABP | MY_FNABP)) if (MyFlags & (MY_NABP | MY_FNABP))
DBUG_RETURN(0); /* Want only errors */ DBUG_RETURN(0); /* Want only errors */
DBUG_RETURN(writenbytes+written); DBUG_RETURN(writenbytes+written);
} /* my_write */ } /* my_write */
...@@ -3032,7 +3032,7 @@ int my_message_sql(uint error, const char *str, myf MyFlags) ...@@ -3032,7 +3032,7 @@ int my_message_sql(uint error, const char *str, myf MyFlags)
MYSQL_ERROR::enum_warning_level level; MYSQL_ERROR::enum_warning_level level;
sql_print_message_func func; sql_print_message_func func;
DBUG_ENTER("my_message_sql"); DBUG_ENTER("my_message_sql");
DBUG_PRINT("error", ("error: %u message: '%s'", error, str)); DBUG_PRINT("error", ("error: %u message: '%s' Flag: %d", error, str, MyFlags));
DBUG_ASSERT(str != NULL); DBUG_ASSERT(str != NULL);
/* /*
...@@ -3076,7 +3076,10 @@ int my_message_sql(uint error, const char *str, myf MyFlags) ...@@ -3076,7 +3076,10 @@ int my_message_sql(uint error, const char *str, myf MyFlags)
this could be improved by having a common stack of handlers. this could be improved by having a common stack of handlers.
*/ */
if (thd->handle_error(error, str, level)) if (thd->handle_error(error, str, level))
{
DBUG_PRINT("info", ("error handled by handle_error()"));
DBUG_RETURN(0); DBUG_RETURN(0);
}
if (level == MYSQL_ERROR::WARN_LEVEL_WARN) if (level == MYSQL_ERROR::WARN_LEVEL_WARN)
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, error, str); push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN, error, str);
...@@ -6495,8 +6498,7 @@ each time the SQL thread starts.", ...@@ -6495,8 +6498,7 @@ each time the SQL thread starts.",
"log and this option just turns on --log-bin instead.", "log and this option just turns on --log-bin instead.",
&opt_update_logname, &opt_update_logname, 0, GET_STR, &opt_update_logname, &opt_update_logname, 0, GET_STR,
OPT_ARG, 0, 0, 0, 0, 0, 0}, OPT_ARG, 0, 0, 0, 0, 0, 0},
{"log-warnings", 'W', "Log some not critical warnings to the general log " {"log-warnings", 'W', "Log some not critical warnings to the general log file. Value can be between 0-6; The higher value, the more warnings",
"file.",
&global_system_variables.log_warnings, &global_system_variables.log_warnings,
&max_system_variables.log_warnings, 0, GET_ULONG, OPT_ARG, 1, 0, 0, &max_system_variables.log_warnings, 0, GET_ULONG, OPT_ARG, 1, 0, 0,
0, 0, 0}, 0, 0, 0},
...@@ -9419,6 +9421,16 @@ static int get_options(int *argc,char **argv) ...@@ -9419,6 +9421,16 @@ static int get_options(int *argc,char **argv)
myisam_block_size=(uint) 1 << my_bit_log2(opt_myisam_block_size); myisam_block_size=(uint) 1 << my_bit_log2(opt_myisam_block_size);
my_crc_dbug_check= opt_my_crc_dbug_check; my_crc_dbug_check= opt_my_crc_dbug_check;
/*
Log mysys errors when we don't have a thd or thd->log_all_errors is set (recovery) to
the log. This is mainly useful for debugging strange system errors.
*/
if (global_system_variables.log_warnings >= 10)
my_global_flags= MY_WME | ME_JUST_INFO;
/* Log all errors not handled by thd->handle_error() to my_message_sql() */
if (global_system_variables.log_warnings >= 11)
my_global_flags|= ME_NOREFRESH;
/* long_query_time is in microseconds */ /* long_query_time is in microseconds */
global_system_variables.long_query_time= max_system_variables.long_query_time= global_system_variables.long_query_time= max_system_variables.long_query_time=
(longlong) (long_query_time * 1000000.0); (longlong) (long_query_time * 1000000.0);
......
...@@ -61,7 +61,7 @@ private: ...@@ -61,7 +61,7 @@ private:
bool bool
Prelock_error_handler::handle_error(uint sql_errno, Prelock_error_handler::handle_error(uint sql_errno,
const char * /* message */, const char * /* message */,
MYSQL_ERROR::enum_warning_level /* level */, MYSQL_ERROR::enum_warning_level level,
THD * /* thd */) THD * /* thd */)
{ {
if (sql_errno == ER_NO_SUCH_TABLE) if (sql_errno == ER_NO_SUCH_TABLE)
...@@ -70,7 +70,8 @@ Prelock_error_handler::handle_error(uint sql_errno, ...@@ -70,7 +70,8 @@ Prelock_error_handler::handle_error(uint sql_errno,
return TRUE; return TRUE;
} }
m_unhandled_errors++; if (level == MYSQL_ERROR::WARN_LEVEL_ERROR)
m_unhandled_errors++;
return FALSE; return FALSE;
} }
......
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