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).
| Thread |
|---|
| • bzr push into mysql-5.1-telco-6.3 branch (frazer.clement:3288 to 3289) | Frazer Clement | 25 Jul |