From: Frazer Clement Date: July 30 2012 11:17am Subject: bzr push into mysql-5.1-telco-6.3 branch (frazer.clement:3289 to 3290) List-Archive: http://lists.mysql.com/commits/144506 Message-Id: <201207301117.q6UBH4MW032438@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3290 Frazer Clement 2012-07-30 Commit for more testing modified: storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 3289 Frazer Clement 2012-07-25 Commit for autotest modified: Makefile.am storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp storage/ndb/src/mgmsrv/ConfigInfo.cpp === modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp' --- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2012-07-25 09:52:32 +0000 +++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2012-07-30 11:14:51 +0000 @@ -14930,6 +14930,15 @@ void Dblqh::readSrLastMbyteLab(Signal* s }//if logFilePtr.p->logFileStatus = LogFileRecord::CLOSING_SR; closeFile(signal, logFilePtr, __LINE__); + + /* Head file is initialised by reading per-MB headers rather than per-file + * headers. Therefore, when stepping back through the redo files to get + * the previous file's metadata, we must be careful not to read the + * per-file header info over the just-read per-MB headers, invalidating + * the head metainfo. + */ + Uint32 nonHeadFileCount = logPartPtr.p->noLogFiles - 1; + if (logPartPtr.p->noLogFiles > cmaxValidLogFilesInPageZero) { /* Step back from head to get file:mb metadata from a * previous file's page zero @@ -14953,11 +14962,11 @@ void Dblqh::readSrLastMbyteLab(Signal* s * -------------------------------------------------------------------- */ fileNo = 1; logPartPtr.p->srRemainingFiles = - logPartPtr.p->noLogFiles - (cmaxValidLogFilesInPageZero - 1); + nonHeadFileCount - (cmaxValidLogFilesInPageZero - 1); } else { jam(); logPartPtr.p->srRemainingFiles = - logPartPtr.p->noLogFiles - cmaxValidLogFilesInPageZero; + nonHeadFileCount - cmaxValidLogFilesInPageZero; }//if /* Check we're making progress */ ndbrequire(fileNo != logFilePtr.p->fileNo); @@ -18854,6 +18863,14 @@ void Dblqh::initGciInLogFileRec(Signal* LogFileRecordPtr filePtr = logFilePtr; Uint32 pos = ZPAGE_HEADER_SIZE + ZFD_HEADER_SIZE; ndbrequire(noFdDescriptors <= cmaxValidLogFilesInPageZero); + + /* We start by initialising the previous file's metadata, + * so lets move there now... + */ + filePtr.i = filePtr.p->prevLogFile; + ptrCheckGuard(filePtr, clogFileFileSize, logFileRecord); + + for (Uint32 fd = 1; fd <= noFdDescriptors; fd++) { jam(); No bundle (reason: useless for push emails).