Commit b931e3eb authored by unknown's avatar unknown

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
parent 84f393f7
...@@ -14622,6 +14622,8 @@ void Dblqh::execSr(Signal* signal) ...@@ -14622,6 +14622,8 @@ void Dblqh::execSr(Signal* signal)
LogFileRecordPtr nextLogFilePtr; LogFileRecordPtr nextLogFilePtr;
LogPageRecordPtr tmpLogPagePtr; LogPageRecordPtr tmpLogPagePtr;
Uint32 logWord; Uint32 logWord;
Uint32 line;
const char * crash_msg = 0;
jamEntry(); jamEntry();
logPartPtr.i = signal->theData[0]; logPartPtr.i = signal->theData[0];
...@@ -14832,8 +14834,14 @@ void Dblqh::execSr(Signal* signal) ...@@ -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*/ /* PLACE THAN IN THE FIRST PAGE OF A NEW FILE IN THE FIRST POSITION AFTER THE*/
/* HEADER. */ /* HEADER. */
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
ndbrequire(logPagePtr.p->logPageWord[ZCURR_PAGE_INDEX] == if (unlikely(logPagePtr.p->logPageWord[ZCURR_PAGE_INDEX] !=
(ZPAGE_HEADER_SIZE + ZPOS_NO_FD)); (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 = Uint32 noFdDescriptors =
logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE + ZPOS_NO_FD]; logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE + ZPOS_NO_FD];
...@@ -14870,19 +14878,10 @@ void Dblqh::execSr(Signal* signal) ...@@ -14870,19 +14878,10 @@ void Dblqh::execSr(Signal* signal)
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/* SEND A SIGNAL TO THE SIGNAL LOG AND THEN CRASH THE SYSTEM. */ /* SEND A SIGNAL TO THE SIGNAL LOG AND THEN CRASH THE SYSTEM. */
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
signal->theData[0] = RNIL; line = __LINE__;
signal->theData[1] = logPartPtr.i; logWord = ZNEXT_MBYTE_TYPE;
Uint32 tmp = logFilePtr.p->fileName[3]; crash_msg = "end of log wo/ having found last GCI";
tmp = (tmp >> 8) & 0xff;// To get the Directory, DXX. goto crash;
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;
}//if }//if
}//if }//if
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
...@@ -14937,19 +14936,9 @@ void Dblqh::execSr(Signal* signal) ...@@ -14937,19 +14936,9 @@ void Dblqh::execSr(Signal* signal)
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/* SEND A SIGNAL TO THE SIGNAL LOG AND THEN CRASH THE SYSTEM. */ /* SEND A SIGNAL TO THE SIGNAL LOG AND THEN CRASH THE SYSTEM. */
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
signal->theData[0] = RNIL; line = __LINE__;
signal->theData[1] = logPartPtr.i; crash_msg = "Invalid logword";
Uint32 tmp = logFilePtr.p->fileName[3]; goto crash;
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;
break; break;
}//switch }//switch
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
...@@ -14957,6 +14946,35 @@ void Dblqh::execSr(Signal* signal) ...@@ -14957,6 +14946,35 @@ void Dblqh::execSr(Signal* signal)
// that we reach a new page. // that we reach a new page.
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
} while (1); } 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() }//Dblqh::execSr()
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
...@@ -14972,8 +14990,8 @@ void Dblqh::execDEBUG_SIG(Signal* signal) ...@@ -14972,8 +14990,8 @@ void Dblqh::execDEBUG_SIG(Signal* signal)
UintR tdebug; UintR tdebug;
jamEntry(); jamEntry();
logPagePtr.i = signal->theData[0]; //logPagePtr.i = signal->theData[0];
tdebug = logPagePtr.p->logPageWord[0]; //tdebug = logPagePtr.p->logPageWord[0];
char buf[100]; char buf[100];
BaseString::snprintf(buf, 100, BaseString::snprintf(buf, 100,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment