List:Commits« Previous MessageNext Message »
From:Vladislav Vaintroub Date:June 23 2008 12:22pm
Subject:bzr commit into mysql-6.0-falcon branch (vvaintroub:2715) WL#4172
View as plain text  
#At bzr+ssh://bk-internal.mysql.com/bzrroot/server/mysql-6.0-falcon/

 2715 Vladislav Vaintroub	2008-06-23
      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 messages:
  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
    During the log switch, check the  file size. Truncate, if file is too big.
  storage/falcon/SerialLogFile.cpp
    New functions truncate() and size()
  storage/falcon/SerialLogFile.h
    New functions truncate() and 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-23 10:22:43 +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-23 10:22:43 +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-23 10:22:43 +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,19 @@ 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);
+
+		if((uint64)file->size() > falcon_serial_log_file_size)
+			file->truncate((int64)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-23 10:22:43 +0000
@@ -305,6 +305,57 @@ uint32 SerialLogFile::read(int64 positio
 #endif
 }
 
+void SerialLogFile::truncate(int64 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, size))
+		throw SQLError(IO_ERROR, "ftruncate failed with %d", 
+						errno);
+#endif
+}
+
+int64 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  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-23 10:22:43 +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(int64 size);
+	int64 size(void);
 	SerialLogFile(Database *db);
 	virtual ~SerialLogFile();
 

=== modified file 'storage/falcon/ha_falcon.cpp'
--- a/storage/falcon/ha_falcon.cpp	2008-06-19 12:39:21 +0000
+++ b/storage/falcon/ha_falcon.cpp	2008-06-23 10:22:43 +0000
@@ -80,6 +80,7 @@ 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;
@@ -3510,6 +3511,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 serial log file grows larger than this value, it will be truncated when it is
reused",
+  NULL, NULL , LL(10)<<20, LL(1)<<20,LL(0x7fffffffffffffff),
LL(1)<<20);
+
 /***
 static MYSQL_SYSVAR_UINT(allocation_extent, falcon_allocation_extent,
   PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
@@ -3557,6 +3563,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:2715) WL#4172Vladislav Vaintroub23 Jun
  • Re: bzr commit into mysql-6.0-falcon branch (vvaintroub:2715) WL#4172Olav Sandstaa24 Jun
  • RE: bzr commit into mysql-6.0-falcon branch (vvaintroub:2715) WL#4172Kevin Lewis25 Jun
    • RE: bzr commit into mysql-6.0-falcon branch (vvaintroub:2715) WL#4172Vladislav Vaintroub25 Jun
      • RE: bzr commit into mysql-6.0-falcon branch (vvaintroub:2715) WL#4172Kevin Lewis25 Jun