List:Commits« Previous MessageNext Message »
From:U-ROWVWADEjas Date:August 23 2007 3:21pm
Subject:bk commit into 6.0-falcon tree (jas:1.2694)
View as plain text  
Below is the list of changes that have just been committed into a local
6.0-falcon repository of . When  does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-08-23 11:20:54-04:00, jas@rowvwade. +10 -0
  Added provision for on-demand record scavenging.

  storage/falcon/Database.cpp@stripped, 2007-08-23 11:20:43-04:00, jas@rowvwade. +27 -7
    Put in provision for on-demand record scavenging.

  storage/falcon/Database.h@stripped, 2007-08-23 11:20:43-04:00, jas@rowvwade. +8 -2
    Put in provision for on-demand record scavenging.

  storage/falcon/Error.cpp@stripped, 2007-08-23 11:20:44-04:00, jas@rowvwade. +1 -1
    Eliminate unused include file.

  storage/falcon/Log.cpp@stripped, 2007-08-23 11:20:44-04:00, jas@rowvwade. +0 -1
    Eliminate unused include file.

  storage/falcon/MemMgr.cpp@stripped, 2007-08-23 11:20:44-04:00, jas@rowvwade. +19 -5
    Streamline mechanism to get addresses of fixed memory pools.

  storage/falcon/MemMgr.h@stripped, 2007-08-23 11:20:45-04:00, jas@rowvwade. +0 -2
    Streamline mechanism to get addresses of fixed memory pools.

  storage/falcon/MemoryManager.h@stripped, 2007-08-23 11:20:45-04:00, jas@rowvwade. +4 -0
    Streamline mechanism to get addresses of fixed memory pools.

  storage/falcon/SequenceManager.cpp@stripped, 2007-08-23 11:20:46-04:00, jas@rowvwade. +1 -1
    Eliminate unused include file.

  storage/falcon/Table.cpp@stripped, 2007-08-23 11:20:46-04:00, jas@rowvwade. +34 -5
    Added provision for on-demand record scavenging.

  storage/falcon/Table.h@stripped, 2007-08-23 11:20:46-04:00, jas@rowvwade. +1 -0
    Added provision for on-demand record scavenging.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	jas
# Host:	rowvwade.
# Root:	D:/MySQL/mysql-5.1-falcon

--- 1.94/storage/falcon/Database.cpp	2007-08-23 11:21:11 -04:00
+++ 1.95/storage/falcon/Database.cpp	2007-08-23 11:21:11 -04:00
@@ -392,13 +392,13 @@
 	useCount = 1;
 	nextTableId = 0;
 	compiledStatements = NULL;
-	memset (tables, 0, sizeof (tables));
-	memset (tablesModId, 0, sizeof (tablesModId));
-	memset (unTables, 0, sizeof (unTables));
-	memset (schemas, 0, sizeof (schemas));
+	memset(tables, 0, sizeof (tables));
+	memset(tablesModId, 0, sizeof (tablesModId));
+	memset(unTables, 0, sizeof (unTables));
+	memset(schemas, 0, sizeof (schemas));
 	currentAgeGroup = 1;
 	overflowSize = 0;
-	memset ((void*) ageGroupSizes, 0, sizeof (ageGroupSizes));
+	memset((void*) ageGroupSizes, 0, sizeof (ageGroupSizes));
 	tableList = NULL;
 	recordMemoryLower = configuration->recordMemoryLower;
 	recordMemoryUpper = configuration->recordMemoryUpper;
@@ -448,7 +448,10 @@
 	updateCardinality = NULL;
 	lastScavenge = 0;
 	lastRetireRecords = 0;
+	scavengeCycle = 0;
 	longSync = false;
+	recordDataPool = MemMgrGetFixedPool(MemMgrPoolRecordData);
+	recordObjectPool = MemMgrGetFixedPool(MemMgrPoolRecordObject);
 }
 
 
@@ -1652,7 +1655,7 @@
 
 	// Next, scavenge tables
 
-	retireRecords();				// age group based scavenger
+	retireRecords(false);				// age group based scavenger
 
 	// Scavenge expired licenses
 	
@@ -1678,8 +1681,20 @@
 }
 
 
-void Database::retireRecords()
+void Database::retireRecords(bool forced)
 {
+	int cycle = scavengeCycle;
+	Sync lock(&syncScavenge, "Database::retireRecords");
+	lock.lock(Exclusive);
+	
+	if (forced && scavengeCycle > cycle)
+		return;
+	
+	++scavengeCycle;
+	
+	if (forced)
+		Log::log("Forced record scavenge cycle\n");
+	
 	if (systemConnection->transaction)
 		commitSystemTransaction();
 		
@@ -2329,4 +2344,9 @@
 {
 	if (configuration)
 		configuration->setMaxRecordMemory(value);
+}
+
+void Database::forceRecordScavenge(void)
+{
+	retireRecords(true);
 }

--- 1.43/storage/falcon/Database.h	2007-08-23 11:21:11 -04:00
+++ 1.44/storage/falcon/Database.h	2007-08-23 11:21:11 -04:00
@@ -92,6 +92,7 @@
 class IndexKey;
 class InfoTable;
 class TableSpace;
+class MemMgr;
 
 struct JavaCallback;
 
@@ -118,7 +119,7 @@
 	void			cleanupRecords (int threshold, TransId oldestActiveTransaction);
 	void			serverOperation (int op, Parameters *parameters);
 	void			printRecordMemory(int64 threshold, int64 tota);
-	void			retireRecords();
+	void			retireRecords(bool forced);
 	int				getMemorySize (const char *string);
 	JString			analyze(int mask);
 	void			upgradeSystemTables();
@@ -203,6 +204,7 @@
 	void			sync(void);
 	void			preUpdate();
 	void			setMaxRecordMemory(uint64 value);
+	void			forceRecordScavenge(void);
 
 	Dbb				*dbb;
 	Cache			*cache;
@@ -218,6 +220,7 @@
 	CompiledStatement	*compiledStatements;
 	Configuration	*configuration;
 	SerialLog		*serialLog;
+	Connection		*systemConnection;
 	int				nextTableId;
 	bool			formatting;
 	bool			licensed;
@@ -226,10 +229,10 @@
 	bool			panicShutdown;
 	bool			shuttingDown;
 	bool			longSync;
-	Connection		*systemConnection;
 	int				useCount;
 	int				sequence;
 	int				stepNumber;
+	int				scavengeCycle;
 	Java			*java;
 	Applications	*applications;
 	SyncObject		syncObject;
@@ -239,6 +242,7 @@
 	SyncObject		syncSysConnection;
 	SyncObject		syncResultSets;
 	SyncObject		syncConnectionStatements;
+	SyncObject		syncScavenge;
 	Threads			*threads;
 	Scheduler		*scheduler;
 	Scheduler		*internalScheduler;
@@ -259,6 +263,8 @@
 	Thread				*tickerThread;
 	PageWriter			*pageWriter;
 	PreparedStatement	*updateCardinality;
+	MemMgr				*recordDataPool;
+	MemMgr				*recordObjectPool;
 	
 	volatile time_t	timestamp;
 	volatile int	numberQueries;

--- 1.6/storage/falcon/Error.cpp	2007-08-23 11:21:11 -04:00
+++ 1.7/storage/falcon/Error.cpp	2007-08-23 11:21:11 -04:00
@@ -30,7 +30,7 @@
 #include "Error.h"
 #include "SQLError.h"
 #include "Log.h"
-#include "MemMgr.h"
+//#include "MemMgr.h"
 
 #ifdef _WIN32
 #define vsnprintf	_vsnprintf

--- 1.14/storage/falcon/Log.cpp	2007-08-23 11:21:11 -04:00
+++ 1.15/storage/falcon/Log.cpp	2007-08-23 11:21:11 -04:00
@@ -29,7 +29,6 @@
 #endif
 
 #include "Engine.h"
-#include "MemMgr.h"
 #include "Log.h"
 #include "Thread.h"
 #include "SQLError.h"

--- 1.35/storage/falcon/MemMgr.cpp	2007-08-23 11:21:11 -04:00
+++ 1.36/storage/falcon/MemMgr.cpp	2007-08-23 11:21:11 -04:00
@@ -239,6 +239,25 @@
 		memControl.addPool(&recordObjectManager);
 		}
 	}
+
+MemMgr*	MemMgrGetFixedPool (int id)
+	{
+	switch (id)
+		{
+		case MemMgrPoolGeneral:
+			return &memoryManager;
+			
+		case MemMgrPoolRecordData:
+			return &recordManager;
+			
+		case MemMgrPoolRecordObject:
+			return &recordObjectManager;
+		
+		default:
+			return NULL;
+		}
+	}
+		
 	
 void MemMgrLogDump()
 	{
@@ -1123,9 +1142,4 @@
 		if (*p++ != GUARD_BYTE)
 			corrupt ("guard bytes overwritten");
 #endif
-}
-
-MemMgr* MemMgr::getRecordObjectPool(void)
-{
-	return &recordObjectManager;
 }

--- 1.13/storage/falcon/MemMgr.h	2007-08-23 11:21:11 -04:00
+++ 1.14/storage/falcon/MemMgr.h	2007-08-23 11:21:11 -04:00
@@ -151,8 +151,6 @@
 
 	virtual void*	memoryIsExhausted(void);
 	
-	static MemMgr*	getRecordObjectPool(void);
-	
 	static void		release(void* block);
 	static void		validate(void *object);
 	static void		validateBlock (void *object);

--- 1.10/storage/falcon/MemoryManager.h	2007-08-23 11:21:11 -04:00
+++ 1.11/storage/falcon/MemoryManager.h	2007-08-23 11:21:11 -04:00
@@ -88,6 +88,9 @@
 	MemMgrRecordDetail
 	};
 
+static const int MemMgrPoolGeneral		= 0;
+static const int MemMgrPoolRecordData	= 1;
+static const int MemMgrPoolRecordObject	= 2;
 
 extern void		MemMgrAnalyze(MemMgrWhat what, InfoTable *table);
 extern void		MemMgrRelease (void *object);
@@ -96,6 +99,7 @@
 extern void*	MemMgrRecordAllocate (int size, const char *file, int line);
 extern void		MemMgrRecordDelete (char *record);
 extern void		MemMgrSetMaxRecordMember (long long size);
+extern MemMgr*	MemMgrGetFixedPool (int id);
 
 extern MemObject* MemMgrFindPriorBlock (void *block);
 

--- 1.6/storage/falcon/SequenceManager.cpp	2007-08-23 11:21:11 -04:00
+++ 1.7/storage/falcon/SequenceManager.cpp	2007-08-23 11:21:11 -04:00
@@ -27,7 +27,7 @@
 #include "Sync.h"
 #include "SQLError.h"
 
-#include "MemMgr.h"						// debugging only
+//#include "MemMgr.h"						// debugging only
 
 #define HASH(address,size)				(int)(((UIPTR) address >> 2) % size)
 

--- 1.134/storage/falcon/Table.cpp	2007-08-23 11:21:11 -04:00
+++ 1.135/storage/falcon/Table.cpp	2007-08-23 11:21:11 -04:00
@@ -53,7 +53,6 @@
 #include "Interlock.h"
 #include "Collation.h"
 #include "TableSpace.h"
-#include "MemMgr.h"
 //#include "Section.h"
 
 #ifndef STORAGE_ENGINE
@@ -289,7 +288,6 @@
 		// Get current format for record
 
 		Format *format = getFormat(formatVersion);
-		//record = new RecordVersion(this, format, transaction, NULL);
 		record = allocRecordVersion(format, transaction, NULL);
 		
 		// Handle any default values
@@ -549,7 +547,7 @@
 				}
 
 			sync.unlock();
-			record = new(MemMgr::getRecordObjectPool()) Record(this, recNumber, &stream);
+			record = allocRecord(recNumber, &stream);
 			
 			if (insert(record, NULL, recNumber))
 				{
@@ -613,7 +611,7 @@
 	
 	try
 		{
-		record = new(MemMgr::getRecordObjectPool()) Record (this, recordNumber, &stream);
+		record = allocRecord(recordNumber, &stream);
 		}
 	catch (SQLException& exception)
 		{
@@ -3174,5 +3172,36 @@
 
 RecordVersion* Table::allocRecordVersion(Format* format, Transaction* transaction, Record* priorVersion)
 {
-	return new(MemMgr::getRecordObjectPool()) RecordVersion(this, format, transaction, priorVersion);
+	for (int n = 0;; ++n)
+		try
+			{
+			return new(database->recordObjectPool) RecordVersion(this, format, transaction, priorVersion);
+			}
+		catch (SQLException& exception)
+			{
+			if (n > 2 || exception.getSqlcode() != OUT_OF_RECORD_MEMORY_ERROR)
+				throw;
+			
+			database->forceRecordScavenge();
+			}
+	
+	return NULL;
+}
+
+Record* Table::allocRecord(int recordNumber, Stream* stream)
+{
+	for (int n = 0;; ++n)
+		try
+			{
+			return new(database->recordObjectPool) Record (this, recordNumber, stream);
+			}
+		catch (SQLException& exception)
+			{
+			if (n > 2 || exception.getSqlcode() != OUT_OF_RECORD_MEMORY_ERROR)
+				throw;
+			
+			database->forceRecordScavenge();
+			}
+	
+	return NULL;
 }

--- 1.31/storage/falcon/Table.h	2007-08-23 11:21:11 -04:00
+++ 1.32/storage/falcon/Table.h	2007-08-23 11:21:11 -04:00
@@ -243,6 +243,7 @@
 	const char		*type;
 public:
 	RecordVersion* allocRecordVersion(Format* format, Transaction* transaction, Record* priorVersion);
+	Record* allocRecord(int recordNumber, Stream* stream);
 };
 
 #endif // !defined(AFX_TABLE_H__02AD6A42_A433_11D2_AB5B_0000C01D2301__INCLUDED_)
Thread
bk commit into 6.0-falcon tree (jas:1.2694)U-ROWVWADEjas23 Aug