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#43106 | Vladislav Vaintroub | 21 Apr |