List:Commits« Previous MessageNext Message »
From:Kevin Lewis Date:June 26 2009 3:15pm
Subject:Re: bzr commit into mysql-6.0-falcon-team branch (Olav.Sandstaa:2748)
Bug#43490
View as plain text  
Looks Good OK to push

Olav.Sandstaa@stripped wrote:
> #At file:///home/olav/mysql/develop/falcon-elog/ based on
> revid:john.embretsen@stripped
> 
>  2748 Olav.Sandstaa@stripped	2009-06-26
>       Bug#43490 Falcon internal thread terminate after throwing an instance of
> 'SQLError'
>       
>       The thrown exception contains the error string "can't continue after
>       fatal error ". This exception is only thrown by the Falcon IO
>       system. It is thrown after a fatal IO error has
>       occurred. Unfortunately it gives very little information about what
>       the actual error was.
>       
>       This patch improves the logging of "fatal" IO errors by writing to the
>       error log file information about the error when it occurs. With this
>       patch a message similar to this example will be written when
>       IO::declareFatalError() is called:
>       
>       Falcon: Fatal IO error occurred in "IO::writePages": file
>      
> "/home/olav/mysql/develop/falcon-elog/mysql-test/var/mysqld.1/data/falcon_user.fts", page
> 21: No space left on device (28)
>       
>       Note that this patch does not fix the problem but only improves the logging
>       when the actually error occurs, hopefully making it easier to find the
>       real error.
> 
>     modified:
>       storage/falcon/IO.cpp
>       storage/falcon/IOx.h
> === modified file 'storage/falcon/IO.cpp'
> --- a/storage/falcon/IO.cpp	2009-04-07 20:16:05 +0000
> +++ b/storage/falcon/IO.cpp	2009-06-26 11:13:44 +0000
> @@ -109,6 +109,8 @@ static const int TRACE_SYNC_END		= -2;
>  
>  static const uint16 NON_ZERO_CHECKSUM_MAGIC = 0xAFFE;
>  
> +static const int NO_VALID_PAGE_NUMBER = -2;
> +
>  #ifdef SIMULATE_DISK_FULL
>  static int simulateDiskFull = SIMULATE_DISK_FULL;
>  #endif
> @@ -289,7 +291,7 @@ void IO::readPage(Bdb * bdb)
>  
>  	if (length != pageSize)
>  		{
> -		declareFatalError();
> +		declareFatalError("IO::readPage", bdb->pageNumber, errno);
>  		if (length == -1)
>  			{
>  			throw SQLError(IO_ERROR, "read error on page %d of \"%s\": %s (%d)",
> @@ -390,7 +392,7 @@ void IO::writePages(int32 pageNumber, in
>  		if (errno == ENOSPC)
>  			throw SQLError(DEVICE_FULL, "device full error on %s, page %d\n", (const char*)
> fileName, pageNumber);
>  			
> -		declareFatalError();
> +		declareFatalError("IO::writePages", pageNumber, errno);
>  		
>  		throw SQLError(IO_ERROR, "write error on page %d (%d/%d/%d) of \"%s\": %s (%d)",
>  				pageNumber, length, pageSize, fileId,
> @@ -452,9 +454,27 @@ void IO::longSeek(int64 offset)
>  		Error::error ("long seek failed on  \"%s\"", (const char*) fileName);
>  }
>  
> -void IO::declareFatalError()
> +void IO::declareFatalError(const char *methodName, int pageNumber, int errorNumber)
>  {
> +	// Update status about that a fatal IO error has occured
> +
>  	fatalError = true;
> +
> +	// Convert the page number to a string. Note that we use
> +	// NO_VALID_PAGE_NUMBER to indicate that this error is not related
> +	// to a specific page.
> +
> +	char pageNumberStr[40];
> +	pageNumberStr[0] = 0;
> +
> +	if (pageNumber != NO_VALID_PAGE_NUMBER)
> +		{
> +		sprintf(pageNumberStr, ", page %d", pageNumber);
> +		}
> +
> +	Log::fatal("Falcon: Fatal IO error occurred in \"%s\": file \"%s\"%s: %s (%d)\n", 
> +			   methodName, (const char*) fileName, pageNumberStr,
> +			   strerror(errorNumber), errorNumber);
>  }
>  
>  
> @@ -705,7 +725,7 @@ void IO::sync(void)
>  #ifdef _WIN32
>  	if (_commit(fileId))
>  		{
> -		declareFatalError();
> +		declareFatalError("IO::sync", NO_VALID_PAGE_NUMBER, errno);
>  		throw SQLError(IO_ERROR, "_commit failed on \"%s\": %s (%d)",
>  				(const char*) fileName, strerror (errno), errno);
>  		}
> 
> === modified file 'storage/falcon/IOx.h'
> --- a/storage/falcon/IOx.h	2008-09-11 10:56:00 +0000
> +++ b/storage/falcon/IOx.h	2009-06-26 11:13:44 +0000
> @@ -56,7 +56,6 @@ public:
>  	void	write(uint32 length, const UCHAR *data);
>  	static bool	doesFileExist(const char *fileName);
>  	static int	fileStat(const char *fileName, struct stat *stats = NULL, int *errnum =
> NULL);
> -	void	declareFatalError();
>  	void	seek (int pageNumber);
>  	void	closeFile();
>  	void	readHeader (Hdr *header);
> @@ -88,6 +87,10 @@ public:
>  	static void		deleteFile(const char* fileName);
>  	static int		getWriteMode(int attempt);
>  
> +private:
> +	void	declareFatalError(const char *methodName, int PageNumber, int errorNumber);
> +
> +public:
>  	JString		fileName;
>  	SyncObject	syncObject;
>  	int			fileId;
> 
> 
> 
> ------------------------------------------------------------------------
> 
> 
Thread
bzr commit into mysql-6.0-falcon-team branch (Olav.Sandstaa:2748) Bug#43490Olav.Sandstaa26 Jun
  • Re: bzr commit into mysql-6.0-falcon-team branch (Olav.Sandstaa:2748)Bug#43490Kevin Lewis26 Jun