List:Commits« Previous MessageNext Message »
From:Olav Sandstaa Date:June 20 2008 11:52am
Subject:Re: bzr commit into mysql-6.0-falcon branch (vvaintroub:2712) WL#4172
View as plain text  
Vlad,

I think the patch looks very good. I have only minor comments and no 
objections to this being pushed.

Note that I have only looked at the Non-Windows code, the WIN32 code I 
have no knowledge about.

Minor comments:

   -In SerialLog::createNewWindow you have an optimization to only read 
the size of the file if the highWater == 0. This saves a system call 
once i n a while, but if I understand the code correctly this code only 
runs each time you actually switches to a new log file. If this is the 
case, I am not sure if an extra system call is worth to optimize away?

   -For the two new member functions in the SerialLogFile class you use 
uint64 for representing the size of the file. The exiting member 
functions and internal variables use int64 for representing the file size.

  -In SerialLogFile::truncate() using uint64 as the file size you call 
ftruncate casting this to off_t which I think is a signed type on most 
systems so you do not gain anything by using a unsigned type (at least 
on Unixes)

  -There seems to be something wrong with the formatting of the last 
line in SerialLogFile::truncate. It seems like "highWater=size" have 
some extra indention (at least in my email reader).

  -In ha_falcon.cpp it seems like you introduce an un-necessary blank 
line after the ulonglong falcon_serial_log_file_size definition.

  -In the explaining text for the new parameter (in ha_falcon.cpp) I 
think maybe we should add the word "serial" to the text since we 
normally call it "the serial log", eg:

     "If *SERIAL* log file grows larger than this....."

These are all only minor comments, leave it to you to decide if you want 
to change anything.

OK to push this patch.

Thanks for adding this to Falcon!

Regards,
Olav


Vladislav Vaintroub wrote:
> #At bzr+ssh://bk-internal.mysql.com/bzrroot/server/mysql-6.0-falcon/
>
>  2712 Vladislav Vaintroub	2008-06-19
>       WL#4172 : Truncate Falcon Log Files
>       Introduce a new parameter falcon_serial_log_file_size for maximum size of 
>       a serial log file before it gets truncated. During the log switch, check the 
>       file size. Truncate, if file is too big.
> modified:
>   mysql-test/suite/falcon/r/falcon_options.result
>   mysql-test/suite/falcon/r/falcon_options2.result
>   storage/falcon/SerialLog.cpp
>   storage/falcon/SerialLogFile.cpp
>   storage/falcon/SerialLogFile.h
>   storage/falcon/ha_falcon.cpp
>
> per-file comments:
>   mysql-test/suite/falcon/r/falcon_options.result
>     New parameter falcon_serial_log_file_size
>   mysql-test/suite/falcon/r/falcon_options2.result
>     New parameter falcon_serial_log_file_size
>   storage/falcon/SerialLog.cpp
>     Truncate log file if it became too big.
>     For optimization reasons rely on SerialLogFile::highWater to be the file size, if
> highWater!=0
>   storage/falcon/SerialLogFile.cpp
>     New functions truncate() to truncate the log file , and size() to retrieve its
> size
>   storage/falcon/SerialLogFile.h
>     New functions truncate() to truncate the log file , and size() to retrieve its
> size
>   storage/falcon/ha_falcon.cpp
>     New parameter falcon_serial_log_file_size
> === modified file 'mysql-test/suite/falcon/r/falcon_options.result'
> --- a/mysql-test/suite/falcon/r/falcon_options.result	2008-03-11 16:15:47 +0000
> +++ b/mysql-test/suite/falcon/r/falcon_options.result	2008-06-18 22:40:46 +0000
> @@ -23,6 +23,7 @@ falcon_scavenge_schedule	15,45 * * * * *
>  falcon_serial_log_block_size	0
>  falcon_serial_log_buffers	20
>  falcon_serial_log_dir	
> +falcon_serial_log_file_size	10485760
>  falcon_serial_log_priority	1
>  falcon_support_xa	OFF
>  falcon_use_deferred_index_hash	OFF
> @@ -111,6 +112,7 @@ FALCON_SCAVENGE_SCHEDULE	15,45 * * * * *
>  FALCON_SERIAL_LOG_BLOCK_SIZE	0
>  FALCON_SERIAL_LOG_BUFFERS	20
>  FALCON_SERIAL_LOG_DIR	
> +FALCON_SERIAL_LOG_FILE_SIZE	10485760
>  FALCON_SERIAL_LOG_PRIORITY	1
>  FALCON_SUPPORT_XA	OFF
>  FALCON_USE_DEFERRED_INDEX_HASH	OFF
>
> === modified file 'mysql-test/suite/falcon/r/falcon_options2.result'
> --- a/mysql-test/suite/falcon/r/falcon_options2.result	2008-03-11 16:15:47 +0000
> +++ b/mysql-test/suite/falcon/r/falcon_options2.result	2008-06-18 22:40:46 +0000
> @@ -24,6 +24,7 @@ FALCON_SCAVENGE_SCHEDULE	15,45 * * * * *
>  FALCON_SERIAL_LOG_BLOCK_SIZE	0
>  FALCON_SERIAL_LOG_BUFFERS	20
>  FALCON_SERIAL_LOG_DIR	
> +FALCON_SERIAL_LOG_FILE_SIZE	10485760
>  FALCON_SERIAL_LOG_PRIORITY	1
>  FALCON_SUPPORT_XA	OFF
>  FALCON_USE_DEFERRED_INDEX_HASH	OFF
>
> === modified file 'storage/falcon/SerialLog.cpp'
> --- a/storage/falcon/SerialLog.cpp	2008-04-12 02:22:50 +0000
> +++ b/storage/falcon/SerialLog.cpp	2008-06-18 22:40:46 +0000
> @@ -53,6 +53,7 @@ static const char THIS_FILE[]=__FILE__;
>  static const int TRACE_PAGE = 0;
>  
>  extern uint falcon_gopher_threads;
> +extern uint64 falcon_serial_log_file_size;
>  
>  //static const int windowBuffers = 10;
>  static bool debug;
> @@ -597,8 +598,24 @@ void SerialLog::createNewWindow(void)
>  			break;
>  			}
>  
> -	if (fileOffset == 0 && Log::isActive(LogInfo))
> -		Log::log(LogInfo, "%d: Switching log files (%d used)\n", database->deltaTime,
> file->highWater);
> +	if (fileOffset == 0)
> +		{
> +		// Logfile switch, truncate file if required
> +
> +		if (Log::isActive(LogInfo))
> +			Log::log(LogInfo, "%d: Switching log files (%d used)\n", 
> +					database->deltaTime, file->highWater);
> +
> +		uint64 fileSize;
> +
> +		if (file->highWater == 0)
> +			fileSize = file->size();
> +		else
> +			fileSize = file->highWater;
> +
> +		if(fileSize > falcon_serial_log_file_size)
> +			file->truncate(falcon_serial_log_file_size);
> +		}
>  
>  	writeWindow->deactivateWindow();
>  	writeWindow = allocWindow(file, fileOffset);
>
> === modified file 'storage/falcon/SerialLogFile.cpp'
> --- a/storage/falcon/SerialLogFile.cpp	2008-05-09 20:14:24 +0000
> +++ b/storage/falcon/SerialLogFile.cpp	2008-06-18 22:40:46 +0000
> @@ -305,6 +305,59 @@ uint32 SerialLogFile::read(int64 positio
>  #endif
>  }
>  
> +void SerialLogFile::truncate(uint64 size)
> +{
> +#ifdef _WIN32
> +	LARGE_INTEGER oldPos, distance;
> +	distance.QuadPart = 0;
> +
> +	// Get current position in file 
> +	if (!SetFilePointerEx(handle, distance ,&oldPos,FILE_CURRENT))
> +		throw SQLError(IO_ERROR, "SetFilePointerEx failed with %d", 
> +						GetLastError());
> +
> +	// Position to the new end of file , set EOF marker there
> +	distance.QuadPart = size;
> +	if (!SetFilePointerEx(handle, distance, 0, FILE_BEGIN))
> +		throw SQLError(IO_ERROR, "SetFilePointerEx failed with %d", 
> +						GetLastError());
> +
> +	if (!SetEndOfFile(handle))
> +		throw SQLError(IO_ERROR, "SetEndOfFile failed with %d", 
> +						GetLastError());
> +
> +
> +	// Restore file pointer
> +	if (!SetFilePointerEx(handle, oldPos ,0,FILE_BEGIN))
> +		throw SQLError(IO_ERROR, "SetFilePointerEx failed with %d", 
> +						GetLastError());
> +#else
> +	if (ftruncate(handle, (off_t) size))
> +		throw SQLError(IO_ERROR, "ftruncate failed with %d", 
> +						errno);
> +#endif
> +	highWater = MIN(highWater,(int64)size);
> +		highWater = size;
> +}
> +
> +uint64 SerialLogFile::size(void)
> +{
> +#ifdef _WIN32
> +	LARGE_INTEGER size;
> +
> +	if (!GetFileSizeEx(handle, &size))
> +		throw SQLError(IO_ERROR, "GetFileSizeEx failed with %u", 
> +						GetLastError());
> +
> +	return size.QuadPart;
> +#else
> +	struct stat buf;
> +	if (fstat(handle, &buf))
> +		throw SQLError(IO_ERROR, "stat failed with %d",
> +						errno);
> +	return (uint64) buf.st_size;
> +#endif
> +}
>  
>  void SerialLogFile::zap()
>  {
>
> === modified file 'storage/falcon/SerialLogFile.h'
> --- a/storage/falcon/SerialLogFile.h	2008-03-11 16:15:47 +0000
> +++ b/storage/falcon/SerialLogFile.h	2008-06-18 22:40:46 +0000
> @@ -38,6 +38,8 @@ public:
>  	void write(int64 position, uint32 length, const SerialLogBlock *data);
>  	void close();
>  	void open (JString filename, bool creat);
> +	void truncate(uint64 size);
> +	uint64 size(void);
>  	SerialLogFile(Database *db);
>  	virtual ~SerialLogFile();
>  
>
> === modified file 'storage/falcon/ha_falcon.cpp'
> --- a/storage/falcon/ha_falcon.cpp	2008-06-02 11:19:39 +0000
> +++ b/storage/falcon/ha_falcon.cpp	2008-06-18 22:40:46 +0000
> @@ -80,6 +80,8 @@ static StorageHandler	*storageHandler;
>  
>  ulonglong	falcon_record_memory_max;
>  ulonglong	falcon_initial_allocation;
> +ulonglong	falcon_serial_log_file_size;
> +
>  uint		falcon_allocation_extent;
>  ulonglong	falcon_page_cache_size;
>  char*		falcon_serial_log_dir;
> @@ -3507,6 +3509,11 @@ static MYSQL_SYSVAR_ULONGLONG(initial_al
>    "Initial allocation (in bytes) of falcon user tablespace.",
>    NULL, NULL, 0, 0, LL(4000000000), LL(1)<<20);
>  
> +static MYSQL_SYSVAR_ULONGLONG(serial_log_file_size, falcon_serial_log_file_size,
> +  PLUGIN_VAR_RQCMDARG,
> +  "If log file grows larger than this value, it will be truncated",
> +  NULL, NULL , LL(10)<<20, LL(1)<<20, (ulonglong) ~0, LL(1)<<20);
> +
>  /***
>  static MYSQL_SYSVAR_UINT(allocation_extent, falcon_allocation_extent,
>    PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
> @@ -3554,6 +3561,7 @@ static struct st_mysql_sys_var* falconVa
>  	//MYSQL_SYSVAR(allocation_extent),
>  	MYSQL_SYSVAR(page_cache_size),
>  	MYSQL_SYSVAR(consistent_read),
> +	MYSQL_SYSVAR(serial_log_file_size),
>  	NULL
>  };
>  
>
>
>   

Thread
bzr commit into mysql-6.0-falcon branch (vvaintroub:2712) WL#4172Vladislav Vaintroub19 Jun
  • Re: bzr commit into mysql-6.0-falcon branch (vvaintroub:2712) WL#4172Olav Sandstaa20 Jun
    • RE: bzr commit into mysql-6.0-falcon branch (vvaintroub:2712) WL#4172Vladislav Vaintroub20 Jun
    • RE: bzr commit into mysql-6.0-falcon branch (vvaintroub:2712) WL#4172Kevin Lewis22 Jun
      • RE: bzr commit into mysql-6.0-falcon branch (vvaintroub:2712) WL#4172Vladislav Vaintroub22 Jun
        • RE: bzr commit into mysql-6.0-falcon branch (vvaintroub:2712) WL#4172Kevin Lewis23 Jun
        • Re: bzr commit into mysql-6.0-falcon branch (vvaintroub:2712)WL#4172Sergei Golubchik23 Jun
        • Re: bzr commit into mysql-6.0-falcon branch (vvaintroub:2712) WL#4172Olav Sandstaa24 Jun