mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Fix for BUG#3248 "Doc says MyISAM warns if disk full but it does not":
we force the message to the error log, and we make it more informative; we treat EDQUOT like ENOSPC.
This commit is contained in:
@ -41,7 +41,7 @@ const char * NEAR globerrs[GLOBERRS]=
|
|||||||
"Can't change dir to '%s' (Errcode: %d)",
|
"Can't change dir to '%s' (Errcode: %d)",
|
||||||
"Warning: '%s' had %d links",
|
"Warning: '%s' had %d links",
|
||||||
"%d files and %d streams is left open\n",
|
"%d files and %d streams is left open\n",
|
||||||
"Disk is full writing '%s'. Waiting for someone to free space...",
|
"Disk is full writing '%s' (Errcode: %d). Waiting for someone to free space... Retry in %d secs",
|
||||||
"Can't create directory '%s' (Errcode: %d)",
|
"Can't create directory '%s' (Errcode: %d)",
|
||||||
"Character set '%s' is not a compiled character set and is not specified in the '%s' file",
|
"Character set '%s' is not a compiled character set and is not specified in the '%s' file",
|
||||||
"Out of resources when opening file '%s' (Errcode: %d)",
|
"Out of resources when opening file '%s' (Errcode: %d)",
|
||||||
|
@ -114,13 +114,15 @@ uint my_fwrite(FILE *stream, const byte *Buffer, uint Count, myf MyFlags)
|
|||||||
if (my_thread_var->abort)
|
if (my_thread_var->abort)
|
||||||
MyFlags&= ~ MY_WAIT_IF_FULL; /* End if aborted by user */
|
MyFlags&= ~ MY_WAIT_IF_FULL; /* End if aborted by user */
|
||||||
#endif
|
#endif
|
||||||
if (errno == ENOSPC && (MyFlags & MY_WAIT_IF_FULL))
|
if ((errno == ENOSPC || errno == EDQUOT) &&
|
||||||
|
(MyFlags & MY_WAIT_IF_FULL))
|
||||||
{
|
{
|
||||||
if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
|
if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
|
||||||
my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH));
|
my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
|
||||||
sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC);
|
"[stream]",my_errno,MY_WAIT_FOR_USER_TO_FIX_PANIC);
|
||||||
VOID(my_fseek(stream,seekptr,MY_SEEK_SET,MYF(0)));
|
VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
|
||||||
continue;
|
VOID(my_fseek(stream,seekptr,MY_SEEK_SET,MYF(0)));
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (ferror(stream) || (MyFlags & (MY_NABP | MY_FNABP)))
|
if (ferror(stream) || (MyFlags & (MY_NABP | MY_FNABP)))
|
||||||
|
@ -115,11 +115,12 @@ uint my_pwrite(int Filedes, const byte *Buffer, uint Count, my_off_t offset,
|
|||||||
if (my_thread_var->abort)
|
if (my_thread_var->abort)
|
||||||
MyFlags&= ~ MY_WAIT_IF_FULL; /* End if aborted by user */
|
MyFlags&= ~ MY_WAIT_IF_FULL; /* End if aborted by user */
|
||||||
#endif
|
#endif
|
||||||
if (my_errno == ENOSPC && (MyFlags & MY_WAIT_IF_FULL))
|
if ((my_errno == ENOSPC || my_errno == EDQUOT) &&
|
||||||
|
(MyFlags & MY_WAIT_IF_FULL))
|
||||||
{
|
{
|
||||||
if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
|
if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
|
||||||
my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
|
my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
|
||||||
my_filename(Filedes));
|
my_filename(Filedes),my_errno,MY_WAIT_FOR_USER_TO_FIX_PANIC);
|
||||||
VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
|
VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -131,7 +132,7 @@ uint my_pwrite(int Filedes, const byte *Buffer, uint Count, my_off_t offset,
|
|||||||
{
|
{
|
||||||
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),
|
||||||
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 */
|
||||||
@ -142,4 +143,4 @@ uint my_pwrite(int Filedes, const byte *Buffer, uint Count, my_off_t offset,
|
|||||||
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_write */
|
} /* my_pwrite */
|
||||||
|
@ -48,12 +48,13 @@ uint my_write(int Filedes, const byte *Buffer, uint Count, myf MyFlags)
|
|||||||
if (my_thread_var->abort)
|
if (my_thread_var->abort)
|
||||||
MyFlags&= ~ MY_WAIT_IF_FULL; /* End if aborted by user */
|
MyFlags&= ~ MY_WAIT_IF_FULL; /* End if aborted by user */
|
||||||
#endif
|
#endif
|
||||||
if (my_errno == ENOSPC && (MyFlags & MY_WAIT_IF_FULL) &&
|
if ((my_errno == ENOSPC || my_errno == EDQUOT) &&
|
||||||
|
(MyFlags & MY_WAIT_IF_FULL) &&
|
||||||
(uint) writenbytes != (uint) -1)
|
(uint) writenbytes != (uint) -1)
|
||||||
{
|
{
|
||||||
if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
|
if (!(errors++ % MY_WAIT_GIVE_USER_A_MESSAGE))
|
||||||
my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
|
my_error(EE_DISK_FULL,MYF(ME_BELL | ME_NOREFRESH),
|
||||||
my_filename(Filedes));
|
my_filename(Filedes),my_errno,MY_WAIT_FOR_USER_TO_FIX_PANIC);
|
||||||
VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
|
VOID(sleep(MY_WAIT_FOR_USER_TO_FIX_PANIC));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -29,3 +29,11 @@ extern pthread_mutex_t THR_LOCK_charset;
|
|||||||
#else
|
#else
|
||||||
#include <my_no_pthread.h>
|
#include <my_no_pthread.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
EDQUOT is used only in 3 C files only in mysys/. If it does not exist on
|
||||||
|
system, we set it to some value which can never happen.
|
||||||
|
*/
|
||||||
|
#ifndef EDQUOT
|
||||||
|
#define EDQUOT (-1)
|
||||||
|
#endif
|
||||||
|
@ -2080,8 +2080,7 @@ static void check_data_home(const char *path)
|
|||||||
|
|
||||||
|
|
||||||
/* ARGSUSED */
|
/* ARGSUSED */
|
||||||
extern "C" int my_message_sql(uint error, const char *str,
|
extern "C" int my_message_sql(uint error, const char *str, myf MyFlags)
|
||||||
myf MyFlags __attribute__((unused)))
|
|
||||||
{
|
{
|
||||||
NET *net;
|
NET *net;
|
||||||
DBUG_ENTER("my_message_sql");
|
DBUG_ENTER("my_message_sql");
|
||||||
@ -2094,7 +2093,7 @@ extern "C" int my_message_sql(uint error, const char *str,
|
|||||||
net->last_errno=error ? error : ER_UNKNOWN_ERROR;
|
net->last_errno=error ? error : ER_UNKNOWN_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
if (!net || MyFlags & ME_NOREFRESH)
|
||||||
sql_print_error("%s: %s",my_progname,str); /* purecov: inspected */
|
sql_print_error("%s: %s",my_progname,str); /* purecov: inspected */
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user