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-ROWVWADEjas | 23 Aug |