List:Commits« Previous MessageNext Message »
From:U-ROWVWADEjas Date:August 25 2007 6:44pm
Subject:bk commit into 6.0-falcon tree (jas:1.2708)
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-25 12:44:23-04:00, jas@rowvwade. +8 -0
  Compute actual records and space reclaimed during
  scavenge cycle.

  storage/falcon/Database.cpp@stripped, 2007-08-25 12:44:13-04:00, jas@rowvwade. +5 -4
    Generate more accurate record reclaiming statistics.

  storage/falcon/Record.cpp@stripped, 2007-08-25 12:44:14-04:00, jas@rowvwade. +1 -1
    Generate more accurate record reclaiming statistics.

  storage/falcon/Record.h@stripped, 2007-08-25 12:44:14-04:00, jas@rowvwade. +4 -1
    Generate more accurate record reclaiming statistics.

  storage/falcon/RecordLeaf.cpp@stripped, 2007-08-25 12:44:14-04:00, jas@rowvwade. +19 -1
    Generate more accurate record reclaiming statistics.

  storage/falcon/RecordVersion.cpp@stripped, 2007-08-25 12:44:15-04:00, jas@rowvwade. +4 -4
    Generate more accurate record reclaiming statistics.

  storage/falcon/RecordVersion.h@stripped, 2007-08-25 12:44:15-04:00, jas@rowvwade. +1 -1
    Generate more accurate record reclaiming statistics.

  storage/falcon/Table.cpp@stripped, 2007-08-25 12:44:15-04:00, jas@rowvwade. +9 -2
    Generate more accurate record reclaiming statistics.

  storage/falcon/Table.h@stripped, 2007-08-25 12:44:16-04:00, jas@rowvwade. +1 -1
    Generate more accurate record reclaiming statistics.

# 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.99/storage/falcon/Database.cpp	2007-08-25 12:44:39 -04:00
+++ 1.100/storage/falcon/Database.cpp	2007-08-25 12:44:39 -04:00
@@ -20,6 +20,7 @@
 #include <string.h>
 #include <stdio.h>
 #include <time.h>
+#include <memory.h>
 #include "Engine.h"
 #include "Database.h"
 #include "Dbb.h"
@@ -1719,13 +1720,12 @@
 
 	total += overflowSize;
 	RecordScavenge recordScavenge;
+	memset(&recordScavenge, 0, sizeof(recordScavenge));
 	recordScavenge.age = threshold;
 	recordScavenge.transactionId = oldestActiveTransaction;
-	recordScavenge.spaceReclaimed = 0;
-	recordScavenge.recordsReclaimed = 0;
 
 	if (forced)
-		recordScavenge.age = MIN(threshold, currentAgeGroup - AGE_GROUPS / 2);
+		recordScavenge.age = MAX(threshold, currentAgeGroup - AGE_GROUPS / 2);
 		
 	// If we passed the upper limit, scavenge.  If we didn't pick up
 	// a significant amount of memory since the last cycle, don't bother
@@ -1765,7 +1765,8 @@
 			newTotal += ageGroupSizes [n];
 		
 		if (total > newTotal)	
-			Log::log(LogScavenge, " " I64FORMAT " bytes reclaimed\n", total - newTotal);
+			Log::log(LogScavenge, " %d records, " I64FORMAT " bytes reclaimed\n", 
+					 recordScavenge.recordsReclaimed, recordScavenge.spaceReclaimed);
 			
 		total = newTotal;
 		}

--- 1.54/storage/falcon/Record.cpp	2007-08-25 12:44:39 -04:00
+++ 1.55/storage/falcon/Record.cpp	2007-08-25 12:44:39 -04:00
@@ -467,7 +467,7 @@
 }
 
 
-bool Record::scavenge(TransId oldestActive)
+bool Record::scavenge(RecordScavenge *recordScavenge)
 {
 	return true;
 }

--- 1.31/storage/falcon/Record.h	2007-08-25 12:44:39 -04:00
+++ 1.32/storage/falcon/Record.h	2007-08-25 12:44:39 -04:00
@@ -34,7 +34,10 @@
 	TransId	transactionId;
 	int		age;
 	uint	recordsReclaimed;
+	uint	recordsRemaining;
+	uint	versionsRemaining;
 	uint64	spaceReclaimed;
+	uint64	spaceRemaining;
 	};
 	
 enum RecordEncoding {
@@ -74,7 +77,7 @@
 	virtual int		getSavePointId();
 	virtual void	setSuperceded (bool flag);
 	virtual Record* fetchVersion (Transaction *transaction);
-	virtual bool	scavenge(TransId oldestActive);
+	virtual bool	scavenge(RecordScavenge *recordScavenge);
 	virtual void	scavenge(TransId targetTransactionId, int oldestActiveSavePointId);
 	virtual bool	isVersion();
 	virtual bool	isSuperceded();

--- 1.29/storage/falcon/RecordLeaf.cpp	2007-08-25 12:44:39 -04:00
+++ 1.30/storage/falcon/RecordLeaf.cpp	2007-08-25 12:44:39 -04:00
@@ -164,28 +164,46 @@
 			{
 			if (record->isVersion())
 				{
-				if ((record->scavenge(recordScavenge->transactionId)) &&
+				if ((record->scavenge(recordScavenge)) &&
 				    ((!record->hasRecord()) || ((record->useCount == 1) &&
(record->ageGroup <= recordScavenge->age))))
 					{
 					*ptr = NULL;
+					recordScavenge->spaceReclaimed += record->size;
+					++recordScavenge->recordsReclaimed;
 #ifdef CHECK_RECORD_ACTIVITY
 					record->active = false;
 #endif
 					record->release();
 					}
 				else
+					{
+					++recordScavenge->recordsRemaining;
+					recordScavenge->spaceRemaining += record->size;
 					++count;
+					}
 				}
 			else if (record->ageGroup <= recordScavenge->age &&
record->useCount == 1)
 				{
 				*ptr = NULL;
+				recordScavenge->spaceReclaimed += record->size;
+				++recordScavenge->recordsReclaimed;
 #ifdef CHECK_RECORD_ACTIVITY
 				record->active = false;
 #endif
 				record->release();
 				}
 			else
+				{
+				++recordScavenge->recordsRemaining;
+				recordScavenge->spaceRemaining += record->size;
 				++count;
+				
+				for (Record *prior = record->getPriorVersion(); prior; prior =
prior->getPriorVersion())
+					{
+					++recordScavenge->versionsRemaining;
+					recordScavenge->spaceRemaining += prior->size;
+					}
+				}
 			}
 		}
 

--- 1.50/storage/falcon/RecordVersion.cpp	2007-08-25 12:44:39 -04:00
+++ 1.51/storage/falcon/RecordVersion.cpp	2007-08-25 12:44:39 -04:00
@@ -138,23 +138,23 @@
 // Scavenge record versions by the scavenger thread.  Return true if the
 // record is a scavenge candidate
 
-bool RecordVersion::scavenge(TransId oldestActive)
+bool RecordVersion::scavenge(RecordScavenge *recordScavenge)
 {
 	if (useCount != 1)
 		return false;
 
-	if (transaction || (transactionId >= oldestActive))
+	if (transaction || (transactionId >= recordScavenge->transactionId))
 		{
 		table->activeVersions = true;
 
 		if (priorVersion)
-			priorVersion->scavenge(oldestActive);
+			priorVersion->scavenge(recordScavenge);
 
 		return false;
 		}
 
 	if (priorVersion)
-		table->expungeRecordVersions (this);
+		table->expungeRecordVersions(this, recordScavenge);
 
 	return true;
 }

--- 1.20/storage/falcon/RecordVersion.h	2007-08-25 12:44:39 -04:00
+++ 1.21/storage/falcon/RecordVersion.h	2007-08-25 12:44:39 -04:00
@@ -39,7 +39,7 @@
 	virtual int			getSavePointId();
 	virtual void		setSuperceded (bool flag);
 	virtual Record*		getPriorVersion();
-	virtual bool		scavenge(TransId oldestActive);
+	virtual bool		scavenge(RecordScavenge *recordScavenge);
 	virtual void		scavenge(TransId targetTransactionId, int oldestActiveSavePoint);
 	virtual bool		isVersion();
 	virtual Record*		rollback();

--- 1.138/storage/falcon/Table.cpp	2007-08-25 12:44:40 -04:00
+++ 1.139/storage/falcon/Table.cpp	2007-08-25 12:44:40 -04:00
@@ -1615,16 +1615,23 @@
 	return false;	
 }
 
-void Table::expungeRecordVersions(RecordVersion *record)
+void Table::expungeRecordVersions(RecordVersion *record, RecordScavenge *recordScavenge)
 {
 	Record *prior = record->priorVersion;
 	record->priorVersion = NULL;
 	
+	if (recordScavenge)
+		for (Record *rec = prior; rec; rec = rec->getPriorVersion())
+			{
+			++recordScavenge->recordsReclaimed;
+			recordScavenge->spaceReclaimed += record->size;
+			}
+			
 #ifdef CHECK_RECORD_ACTIVITY
 	for (Record *rec = prior; rec; rec = rec->getPriorVersion())
 		rec->active = false;
 #endif
-		
+			
 	garbageCollect(prior, record, NULL, false);
 	prior->release();
 }

--- 1.33/storage/falcon/Table.h	2007-08-25 12:44:40 -04:00
+++ 1.34/storage/falcon/Table.h	2007-08-25 12:44:40 -04:00
@@ -132,7 +132,7 @@
 	void		garbageCollect (Record *leaving, Record *staying, Transaction *transaction, bool
quiet);
 	void		expungeBlob (Value *blob);
 	bool		duplicateBlob (Value *blob, int fieldId, Record *recordChain);
-	void		expungeRecordVersions (RecordVersion *record);
+	void		expungeRecordVersions (RecordVersion *record, RecordScavenge *recordScavenge);
 	void		setView (View *view);
 	Index*		findIndex (const char *indexName);
 	virtual		PrivObject getPrivilegeType();
Thread
bk commit into 6.0-falcon tree (jas:1.2708)U-ROWVWADEjas25 Aug