summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <jonas@perch.ndb.mysql.com>2006-08-28 10:26:21 +0200
committerunknown <jonas@perch.ndb.mysql.com>2006-08-28 10:26:21 +0200
commit6a528af6fe738611d26deb9e8348d80b92022ab5 (patch)
tree6af7de1d9bb70369bd1dc0e3ec63a7f44405aa78
parent134a5d56f0292552319cb1e8b5a28e03eef1e1a6 (diff)
downloadmariadb-git-6a528af6fe738611d26deb9e8348d80b92022ab5.tar.gz
ndb - bug#21615
Improve error message when detecting corrupted REDO log ndb/src/kernel/blocks/dblqh/DblqhMain.cpp: Improve error message when detecting corrupted REDO log
-rw-r--r--ndb/src/kernel/blocks/dblqh/DblqhMain.cpp78
1 files changed, 48 insertions, 30 deletions
diff --git a/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp b/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
index b5cfd4aae6d..7286481002f 100644
--- a/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
+++ b/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp
@@ -14622,6 +14622,8 @@ void Dblqh::execSr(Signal* signal)
LogFileRecordPtr nextLogFilePtr;
LogPageRecordPtr tmpLogPagePtr;
Uint32 logWord;
+ Uint32 line;
+ const char * crash_msg = 0;
jamEntry();
logPartPtr.i = signal->theData[0];
@@ -14832,8 +14834,14 @@ void Dblqh::execSr(Signal* signal)
/* PLACE THAN IN THE FIRST PAGE OF A NEW FILE IN THE FIRST POSITION AFTER THE*/
/* HEADER. */
/*---------------------------------------------------------------------------*/
- ndbrequire(logPagePtr.p->logPageWord[ZCURR_PAGE_INDEX] ==
- (ZPAGE_HEADER_SIZE + ZPOS_NO_FD));
+ if (unlikely(logPagePtr.p->logPageWord[ZCURR_PAGE_INDEX] !=
+ (ZPAGE_HEADER_SIZE + ZPOS_NO_FD)))
+ {
+ line = __LINE__;
+ logWord = logPagePtr.p->logPageWord[ZCURR_PAGE_INDEX];
+ crash_msg = "ZFD_TYPE at incorrect position!";
+ goto crash;
+ }
{
Uint32 noFdDescriptors =
logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE + ZPOS_NO_FD];
@@ -14870,19 +14878,10 @@ void Dblqh::execSr(Signal* signal)
/*---------------------------------------------------------------------------*/
/* SEND A SIGNAL TO THE SIGNAL LOG AND THEN CRASH THE SYSTEM. */
/*---------------------------------------------------------------------------*/
- signal->theData[0] = RNIL;
- signal->theData[1] = logPartPtr.i;
- Uint32 tmp = logFilePtr.p->fileName[3];
- tmp = (tmp >> 8) & 0xff;// To get the Directory, DXX.
- signal->theData[2] = tmp;
- signal->theData[3] = logFilePtr.p->fileNo;
- signal->theData[4] = logFilePtr.p->currentFilepage;
- signal->theData[5] = logFilePtr.p->currentMbyte;
- signal->theData[6] = logPagePtr.p->logPageWord[ZCURR_PAGE_INDEX];
- signal->theData[7] = ~0;
- signal->theData[8] = __LINE__;
- sendSignal(cownref, GSN_DEBUG_SIG, signal, 9, JBA);
- return;
+ line = __LINE__;
+ logWord = ZNEXT_MBYTE_TYPE;
+ crash_msg = "end of log wo/ having found last GCI";
+ goto crash;
}//if
}//if
/*---------------------------------------------------------------------------*/
@@ -14937,19 +14936,9 @@ void Dblqh::execSr(Signal* signal)
/*---------------------------------------------------------------------------*/
/* SEND A SIGNAL TO THE SIGNAL LOG AND THEN CRASH THE SYSTEM. */
/*---------------------------------------------------------------------------*/
- signal->theData[0] = RNIL;
- signal->theData[1] = logPartPtr.i;
- Uint32 tmp = logFilePtr.p->fileName[3];
- tmp = (tmp >> 8) & 0xff;// To get the Directory, DXX.
- signal->theData[2] = tmp;
- signal->theData[3] = logFilePtr.p->fileNo;
- signal->theData[4] = logFilePtr.p->currentMbyte;
- signal->theData[5] = logFilePtr.p->currentFilepage;
- signal->theData[6] = logPagePtr.p->logPageWord[ZCURR_PAGE_INDEX];
- signal->theData[7] = logWord;
- signal->theData[8] = __LINE__;
- sendSignal(cownref, GSN_DEBUG_SIG, signal, 9, JBA);
- return;
+ line = __LINE__;
+ crash_msg = "Invalid logword";
+ goto crash;
break;
}//switch
/*---------------------------------------------------------------------------*/
@@ -14957,6 +14946,35 @@ void Dblqh::execSr(Signal* signal)
// that we reach a new page.
/*---------------------------------------------------------------------------*/
} while (1);
+ return;
+
+crash:
+ signal->theData[0] = RNIL;
+ signal->theData[1] = logPartPtr.i;
+ Uint32 tmp = logFilePtr.p->fileName[3];
+ tmp = (tmp >> 8) & 0xff;// To get the Directory, DXX.
+ signal->theData[2] = tmp;
+ signal->theData[3] = logFilePtr.p->fileNo;
+ signal->theData[4] = logFilePtr.p->currentMbyte;
+ signal->theData[5] = logFilePtr.p->currentFilepage;
+ signal->theData[6] = logPagePtr.p->logPageWord[ZCURR_PAGE_INDEX];
+ signal->theData[7] = logWord;
+ signal->theData[8] = line;
+
+ char buf[255];
+ BaseString::snprintf(buf, sizeof(buf),
+ "Error while reading REDO log. from %d\n"
+ "D=%d, F=%d Mb=%d FP=%d W1=%d W2=%d : %s",
+ signal->theData[8],
+ signal->theData[2],
+ signal->theData[3],
+ signal->theData[4],
+ signal->theData[5],
+ signal->theData[6],
+ signal->theData[7],
+ crash_msg ? crash_msg : "");
+
+ progError(__LINE__, NDBD_EXIT_SR_REDOLOG, buf);
}//Dblqh::execSr()
/*---------------------------------------------------------------------------*/
@@ -14972,8 +14990,8 @@ void Dblqh::execDEBUG_SIG(Signal* signal)
UintR tdebug;
jamEntry();
- logPagePtr.i = signal->theData[0];
- tdebug = logPagePtr.p->logPageWord[0];
+ //logPagePtr.i = signal->theData[0];
+ //tdebug = logPagePtr.p->logPageWord[0];
char buf[100];
BaseString::snprintf(buf, 100,