From: Frazer Clement Date: July 25 2012 9:55am Subject: bzr push into mysql-5.1-telco-6.3 branch (frazer.clement:3288 to 3289) List-Archive: http://lists.mysql.com/commits/144476 Message-Id: <201207250955.q6P9tVEA026386@acsmt357.oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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 3288 Martin Skold 2010-09-29 {clone-mysql-5.1.47-ndb-6.3.38-src-build} [merge] Merge removed: cluster_change_hist.txt modified: mysql-test/collections/default.experimental mysql-test/suite/ndb/r/ndb_database.result mysql-test/suite/ndb/t/ndb_database.test sql/ha_ndbcluster.cc sql/ha_ndbcluster.h sql/ha_ndbcluster_binlog.cc sql/handler.cc sql/handler.h sql/sql_show.cc sql/sql_table.cc storage/ndb/include/kernel/GlobalSignalNumbers.h storage/ndb/include/kernel/signaldata/FsReadWriteReq.hpp storage/ndb/include/mgmapi/mgmapi.h storage/ndb/include/ndbapi/NdbDictionary.hpp storage/ndb/src/kernel/blocks/ERROR_codes.txt storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp storage/ndb/src/kernel/blocks/dbtux/DbtuxBuild.cpp storage/ndb/src/kernel/blocks/dbtux/DbtuxMaint.cpp storage/ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp storage/ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.cpp storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.hpp storage/ndb/src/kernel/blocks/ndbfs/VoidFs.cpp storage/ndb/src/kernel/blocks/suma/Suma.cpp storage/ndb/src/kernel/blocks/suma/Suma.hpp storage/ndb/src/kernel/main.cpp storage/ndb/src/ndbapi/DictCache.cpp storage/ndb/src/ndbapi/DictCache.hpp storage/ndb/src/ndbapi/NdbDictionary.cpp storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp storage/ndb/test/include/NdbRestarter.hpp storage/ndb/test/ndbapi/testIndex.cpp storage/ndb/test/ndbapi/testRestartGci.cpp storage/ndb/test/ndbapi/testSystemRestart.cpp storage/ndb/test/run-test/daily-basic-tests.txt storage/ndb/test/src/NdbRestarter.cpp === modified file 'Makefile.am' --- a/Makefile.am 2010-03-12 06:06:23 +0000 +++ b/Makefile.am 2012-07-25 09:52:32 +0000 @@ -60,7 +60,7 @@ dist-hook: --srcdir=$(top_srcdir) storage/myisam/myisamchk --silent --fast $(distdir)/win/data/mysql/*.MYI -all-local: @ABI_CHECK@ +#all-local: @ABI_CHECK@ tags: support-files/build-tags === modified file 'storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp' --- a/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp 2010-09-20 12:44:28 +0000 +++ b/storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp 2012-07-25 09:52:32 +0000 @@ -2718,7 +2718,13 @@ private: LogPartRecordPtr logPartPtr; UintR clogPartFileSize; Uint32 clogFileSize; // In MBYTE - Uint32 cmaxLogFilesInPageZero; // + /* Max entries for log file:mb meta info in file page zero */ + Uint32 cmaxLogFilesInPageZero; + /* Max valid entries for log file:mb meta info in file page zero + * = cmaxLogFilesInPageZero - 1 + * as entry zero (for current file) is invalid. + */ + Uint32 cmaxValidLogFilesInPageZero; // Configurable LogFileRecord *logFileRecord; === modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp' --- a/storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp 2010-02-15 11:50:39 +0000 +++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp 2012-07-25 09:52:32 +0000 @@ -66,6 +66,7 @@ void Dblqh::initData() m_backup_ptr = RNIL; clogFileSize = 16; cmaxLogFilesInPageZero = 40; + cmaxValidLogFilesInPageZero = cmaxLogFilesInPageZero - 1; for (Uint32 i = 0; i < 1024; i++) { ctransidHash[i] = RNIL; === modified file 'storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp' --- a/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2010-09-27 08:50:20 +0000 +++ b/storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp 2012-07-25 09:52:32 +0000 @@ -1238,6 +1238,19 @@ void Dblqh::execREAD_CONFIG_REQ(Signal* ndbrequire(cmaxLogFilesInPageZero); } + /* How many file's worth of info is actually valid? */ + cmaxValidLogFilesInPageZero = cmaxLogFilesInPageZero - 1; + + /* Must be at least 1 */ + ndbrequire(cmaxValidLogFilesInPageZero > 0); + + /* For 'avoid file 0' weirdness + * File 1 must have meta-info for 0 and -1 + * Suggests max mb/log file of 892. + * ConfigInfo.cpp aligned + */ + ndbrequire(cmaxValidLogFilesInPageZero > 1); + Uint64 totalmb = Uint64(cnoLogFiles) * Uint64(clogFileSize); Uint64 limit = totalmb / 3; ndbrequire(limit < Uint64(0xFFFFFFFF)); @@ -12633,6 +12646,8 @@ retry: /*SET THE NEW LOG TAIL AND CONTINUE WITH NEXT LOG PART. */ /*THIS MBYTE IS NOT TO BE INCLUDED SO WE NEED TO STEP BACK ONE MBYTE. */ /* ------------------------------------------------------------------------- */ + /* Check keepGCI MB has a reasonable GCI value */ + ndbrequire(sltLogFilePtr.p->logMaxGciStarted[tsltIndex] != ((Uint32) -1)); if (tsltIndex != 0) { jam(); tsltMbyte = tsltIndex - 1; @@ -14633,6 +14648,15 @@ void Dblqh::writeFileHeaderOpen(Signal* logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE + ZPOS_LOG_TYPE] = ZFD_TYPE; logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE + ZPOS_FILE_NO] = logFilePtr.p->fileNo; + /* + * When writing a file header on open, we write cmaxLogFilesInPageZero, + * though the entries for the first file (this file), will be invalid, + * as we do not know e.g. which GCIs will be included by log records + * in the MBs in this file. On the first lap these will be initial values + * on subsequent laps, they will be values from the previous lap. + * We take care when reading these values back, not to use the values for + * the current file. + */ if (logPartPtr.p->noLogFiles > cmaxLogFilesInPageZero) { jam(); twmoNoLogDescriptors = cmaxLogFilesInPageZero; @@ -14846,9 +14870,9 @@ void Dblqh::readSrLastFileLab(Signal* si logPartPtr.p->logPartState, logPartPtr.p->logLap); } - if (logPartPtr.p->noLogFiles > cmaxLogFilesInPageZero) { + if (logPartPtr.p->noLogFiles > cmaxValidLogFilesInPageZero) { jam(); - initGciInLogFileRec(signal, cmaxLogFilesInPageZero); + initGciInLogFileRec(signal, cmaxValidLogFilesInPageZero); } else { jam(); initGciInLogFileRec(signal, logPartPtr.p->noLogFiles); @@ -14906,16 +14930,20 @@ void Dblqh::readSrLastMbyteLab(Signal* s }//if logFilePtr.p->logFileStatus = LogFileRecord::CLOSING_SR; closeFile(signal, logFilePtr, __LINE__); - if (logPartPtr.p->noLogFiles > cmaxLogFilesInPageZero) { + if (logPartPtr.p->noLogFiles > cmaxValidLogFilesInPageZero) { + /* Step back from head to get file:mb metadata from a + * previous file's page zero + */ Uint32 fileNo; - if (logFilePtr.p->fileNo >= cmaxLogFilesInPageZero) { + if (logFilePtr.p->fileNo >= cmaxValidLogFilesInPageZero) { jam(); - fileNo = logFilePtr.p->fileNo - cmaxLogFilesInPageZero; + fileNo = logFilePtr.p->fileNo - cmaxValidLogFilesInPageZero; } else { + /* Wrap at 0:0 */ jam(); fileNo = (logPartPtr.p->noLogFiles + logFilePtr.p->fileNo) - - cmaxLogFilesInPageZero; + cmaxValidLogFilesInPageZero; }//if if (fileNo == 0) { jam(); @@ -14925,12 +14953,14 @@ void Dblqh::readSrLastMbyteLab(Signal* s * -------------------------------------------------------------------- */ fileNo = 1; logPartPtr.p->srRemainingFiles = - logPartPtr.p->noLogFiles - (cmaxLogFilesInPageZero - 1); + logPartPtr.p->noLogFiles - (cmaxValidLogFilesInPageZero - 1); } else { jam(); logPartPtr.p->srRemainingFiles = - logPartPtr.p->noLogFiles - cmaxLogFilesInPageZero; + logPartPtr.p->noLogFiles - cmaxValidLogFilesInPageZero; }//if + /* Check we're making progress */ + ndbrequire(fileNo != logFilePtr.p->fileNo); LogFileRecordPtr locLogFilePtr; findLogfile(signal, fileNo, logPartPtr, &locLogFilePtr); locLogFilePtr.p->logFileStatus = LogFileRecord::OPEN_SR_NEXT_FILE; @@ -14954,9 +14984,9 @@ void Dblqh::openSrNextFileLab(Signal* si void Dblqh::readSrNextFileLab(Signal* signal) { - if (logPartPtr.p->srRemainingFiles > cmaxLogFilesInPageZero) { + if (logPartPtr.p->srRemainingFiles > cmaxValidLogFilesInPageZero) { jam(); - initGciInLogFileRec(signal, cmaxLogFilesInPageZero); + initGciInLogFileRec(signal, cmaxValidLogFilesInPageZero); } else { jam(); initGciInLogFileRec(signal, logPartPtr.p->srRemainingFiles); @@ -14964,16 +14994,20 @@ void Dblqh::readSrNextFileLab(Signal* si releaseLogpage(signal); logFilePtr.p->logFileStatus = LogFileRecord::CLOSING_SR; closeFile(signal, logFilePtr, __LINE__); - if (logPartPtr.p->srRemainingFiles > cmaxLogFilesInPageZero) { + if (logPartPtr.p->srRemainingFiles > cmaxValidLogFilesInPageZero) { + /* Step back from head to get file:mb metadata from a + * previous file's page zero + */ Uint32 fileNo; - if (logFilePtr.p->fileNo >= cmaxLogFilesInPageZero) { + if (logFilePtr.p->fileNo >= cmaxValidLogFilesInPageZero) { jam(); - fileNo = logFilePtr.p->fileNo - cmaxLogFilesInPageZero; + fileNo = logFilePtr.p->fileNo - cmaxValidLogFilesInPageZero; } else { + /* Wrap at 0:0 */ jam(); fileNo = (logPartPtr.p->noLogFiles + logFilePtr.p->fileNo) - - cmaxLogFilesInPageZero; + cmaxValidLogFilesInPageZero; }//if if (fileNo == 0) { jam(); @@ -14982,12 +15016,14 @@ void Dblqh::readSrNextFileLab(Signal* si * -------------------------------------------------------------------- */ fileNo = 1; logPartPtr.p->srRemainingFiles = - logPartPtr.p->srRemainingFiles - (cmaxLogFilesInPageZero - 1); + logPartPtr.p->srRemainingFiles - (cmaxValidLogFilesInPageZero - 1); } else { jam(); logPartPtr.p->srRemainingFiles = - logPartPtr.p->srRemainingFiles - cmaxLogFilesInPageZero; + logPartPtr.p->srRemainingFiles - cmaxValidLogFilesInPageZero; }//if + /* Check we're making progress */ + ndbrequire(fileNo != logFilePtr.p->fileNo); LogFileRecordPtr locLogFilePtr; findLogfile(signal, fileNo, logPartPtr, &locLogFilePtr); locLogFilePtr.p->logFileStatus = LogFileRecord::OPEN_SR_NEXT_FILE; @@ -18808,9 +18844,17 @@ void Dblqh::initFragrec(Signal* signal, * ========================================================================= */ void Dblqh::initGciInLogFileRec(Signal* signal, Uint32 noFdDescriptors) { + /* We are reading the per file:mb metadata from page zero in this file + * We cannot use the data for this file (fd 0), but the data for + * previous files is valid. + * So we start reading at fd 1. + * The metadata for this file (fd 0) is set either reading the next file, + * or by probing the last megabytes. + */ LogFileRecordPtr filePtr = logFilePtr; Uint32 pos = ZPAGE_HEADER_SIZE + ZFD_HEADER_SIZE; - for (Uint32 fd = 0; fd < noFdDescriptors; fd++) + ndbrequire(noFdDescriptors <= cmaxValidLogFilesInPageZero); + for (Uint32 fd = 1; fd <= noFdDescriptors; fd++) { jam(); for (Uint32 mb = 0; mb < clogFileSize; mb++) @@ -18826,7 +18870,7 @@ void Dblqh::initGciInLogFileRec(Signal* filePtr.p->logMaxGciStarted[mb] = logPagePtr.p->logPageWord[pos1]; filePtr.p->logLastPrepRef[mb] = logPagePtr.p->logPageWord[pos2]; } - if (fd + 1 < noFdDescriptors) + if (fd + 1 <= noFdDescriptors) { jam(); filePtr.i = filePtr.p->prevLogFile; === modified file 'storage/ndb/src/mgmsrv/ConfigInfo.cpp' --- a/storage/ndb/src/mgmsrv/ConfigInfo.cpp 2010-08-16 13:01:30 +0000 +++ b/storage/ndb/src/mgmsrv/ConfigInfo.cpp 2012-07-25 09:52:32 +0000 @@ -1058,7 +1058,8 @@ const ConfigInfo::ParamInfo ConfigInfo:: ConfigInfo::CI_INT, "16M", "4M", - "1G" }, + /* Max size limited by Dblqh - see cmaxValidLogFilesInPageZero */ + "512M" }, { CFG_DB_INIT_REDO, No bundle (reason: useless for push emails).