#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:
storage/falcon/SRLBlobDelete.cpp
=== 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 commit into mysql-6.0-falcon-team branch (vvaintroub:3133)Bug#43106 | Vladislav Vaintroub | 21 Apr 2009 |