List:Commits« Previous MessageNext Message »
From:Vladislav Vaintroub Date:April 21 2009 11:59am
Subject:bzr push into mysql-6.0-falcon-team branch (vvaintroub:3132 to 3133)
Bug#43106
View as plain text  
 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:
      storage/falcon/SRLBlobDelete.cpp
 3132 Vladislav Vaintroub	2009-04-21 [merge]
      merge

    modified:
      include/lf.h
      storage/falcon/CycleLock.cpp
      storage/falcon/CycleManager.cpp
      storage/falcon/CycleManager.h
=== 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/vvaintroub@mysql.com-20090421115730-kt5qjpnsshar7w46.bundle
Thread
bzr push into mysql-6.0-falcon-team branch (vvaintroub:3132 to 3133)Bug#43106Vladislav Vaintroub21 Apr