List:Falcon Storage Engine« Previous MessageNext Message »
From:Christopher Powers Date:November 6 2008 6:21am
Subject:Rolled back savepoints
View as plain text  
Kevin,

Correcting the bitmap traversal in Transaction::rollbackSavepoint() did 
not resolve the problem of failed thaws.

What's happening is that rolled back savepoints are written to the 
serial log, as they should be, but are then subsequently assigned to one 
or more record versions by Transaction::releaseSavepoint().

When these record versions are chilled, they are never gophered because 
their assigned savepoint is marked in the serial log as rolled back.

Transaction::releaseSavepoint() is called after 
Transaction::createSavepoint(), e.g. in Statement::start(), and it moves 
pending records to the previous savepoint. This is a problem if the 
previous savepoint was rolled back.

Why are the rolled back savepoints still around in the first place? Look 
at the bottom of Transaction::rollbackSavepoint() and tell me what you 
think:

// Move skipped savepoints object to the free list
// Leave the target savepoint empty, but connected to the transaction.
	
if (savePoint->id > savePointId)
	{
	savePoints = savePoint->next;
	savePoint->next = freeSavePoints;
	freeSavePoints = savePoint;
	savePoint = savePoints;
	}
else
	savePoint = savePoint->next;
Thread
Rolled back savepointsChristopher Powers6 Nov