List:Commits« Previous MessageNext Message »
From:Vladislav Vaintroub Date:April 21 2009 11:57am
Subject:bzr commit into mysql-6.0-falcon-team branch (vvaintroub:3133)
View as plain text  
#At file:///G:/bzr/mysql-6.0-falcon-team/ based on revid:vvaintroub@stripped

 3133 Vladislav Vaintroub	2009-04-21
      Bug #43106 Falcon recovery assertion (bdb->buffer->pageNumber == pageNumber) in Cache.cpp 
      The problem is that Falcon during recovery can access a data page that can 
      be invalid. If the same transaction creates, and deletes the same blob but
      does not finish before the crash, data page s not guaranteed to be written to disk
      before delete.
      The fix is to update data page  only if transaction has completed, and we
      that data page is on disk. Blob update was already handled this way.

=== modified file 'storage/falcon/SRLBlobDelete.cpp'
--- a/storage/falcon/SRLBlobDelete.cpp	2007-09-20 15:44:25 +0000
+++ b/storage/falcon/SRLBlobDelete.cpp	2009-04-21 11:57:30 +0000
@@ -64,10 +64,12 @@ void SRLBlobDelete::pass2(void)
 	if (ret1)
+		SerialLogTransaction *transaction = log->findTransaction(transactionId);
 		Dbb *dbb = log->getDbb(tableSpaceId);
 		if (control->isPostFlush())
-			Section::redoBlobDelete(dbb, locatorPage, locatorLine, dataPage, dataLine, ret2);
+			Section::redoBlobDelete(dbb, locatorPage, locatorLine, dataPage, dataLine, 
+			ret2 && transaction && transaction->state == sltCommitted);

Attachment: [text/bzr-bundle] bzr/
bzr commit into mysql-6.0-falcon-team branch (vvaintroub:3133)Bug#43106Vladislav Vaintroub21 Apr