Loading ndb/src/kernel/blocks/dblqh/Dblqh.hpp +17 −3 Original line number Diff line number Diff line Loading @@ -86,6 +86,17 @@ #define ZCURR_PAGE_INDEX 8 #define ZLAST_LOG_PREP_REF 10 #define ZPOS_DIRTY 11 /* A number of debug items written in the page header of all log files */ #define ZPOS_LOG_TIMER 12 #define ZPOS_PAGE_I 13 #define ZPOS_PLACE_WRITTEN_FROM 14 #define ZPOS_PAGE_NO 15 #define ZPOS_FILE_NO 16 #define ZPOS_WORD_WRITTEN 17 #define ZPOS_IN_WRITING 18 #define ZPOS_PREV_PAGE_NO 19 #define ZPOS_IN_FREE_LIST 20 /* ------------------------------------------------------------------------- */ /* CONSTANTS FOR THE VARIOUS REPLICA AND NODE TYPES. */ /* ------------------------------------------------------------------------- */ Loading Loading @@ -2294,7 +2305,8 @@ private: void writeFileDescriptor(Signal* signal); void writeFileHeaderOpen(Signal* signal, Uint32 type); void writeInitMbyte(Signal* signal); void writeSinglePage(Signal* signal, Uint32 pageNo, Uint32 wordWritten); void writeSinglePage(Signal* signal, Uint32 pageNo, Uint32 wordWritten, Uint32 place); void buildLinkedLogPageList(Signal* signal); void changeMbyte(Signal* signal); Uint32 checkIfExecLog(Signal* signal); Loading @@ -2303,7 +2315,7 @@ private: void checkScanTcCompleted(Signal* signal); void checkSrCompleted(Signal* signal); void closeFile(Signal* signal, LogFileRecordPtr logFilePtr); void completedLogPage(Signal* signal, Uint32 clpType); void completedLogPage(Signal* signal, Uint32 clpType, Uint32 place); void deleteFragrec(Uint32 fragId); void deleteTransidHash(Signal* signal); void findLogfile(Signal* signal, Loading Loading @@ -2399,7 +2411,9 @@ private: void writeAbortLog(Signal* signal); void writeCommitLog(Signal* signal, LogPartRecordPtr regLogPartPtr); void writeCompletedGciLog(Signal* signal); void writeDirty(Signal* signal); void writeDbgInfoPageHeader(LogPageRecordPtr logPagePtr, Uint32 place, Uint32 pageNo, Uint32 wordWritten); void writeDirty(Signal* signal, Uint32 place); void writeKey(Signal* signal); void writeLogHeader(Signal* signal); void writeLogWord(Signal* signal, Uint32 data); Loading ndb/src/kernel/blocks/dblqh/DblqhMain.cpp +60 −24 Original line number Diff line number Diff line Loading @@ -12132,6 +12132,7 @@ void Dblqh::initFsopenconf(Signal* signal) /* ========================================================================= */ void Dblqh::initFsrwconf(Signal* signal) { LogPageRecordPtr logP; lfoPtr.i = signal->theData[0]; ptrCheckGuard(lfoPtr, clfoFileSize, logFileOperationRecord); logFilePtr.i = lfoPtr.p->logFileRec; Loading @@ -12140,6 +12141,16 @@ void Dblqh::initFsrwconf(Signal* signal) ptrCheckGuard(logPartPtr, clogPartFileSize, logPartRecord); logPagePtr.i = lfoPtr.p->firstLfoPage; ptrCheckGuard(logPagePtr, clogPageFileSize, logPageRecord); logP= logPagePtr; for (;;) { logP.p->logPageWord[ZPOS_IN_WRITING]= 0; logP.p->logPageWord[ZPOS_IN_FREE_LIST]= 0; if (logP.p->logPageWord[ZNEXT_PAGE] == RNIL) return; logP.i= logP.p->logPageWord[ZNEXT_PAGE]; ptrCheckGuard(logP, clogPageFileSize, logPageRecord); } }//Dblqh::initFsrwconf() /* ######################################################################### */ Loading Loading @@ -12227,7 +12238,7 @@ void Dblqh::timeSup(Signal* signal) ndbrequire(wordWritten < ZPAGE_SIZE); if (logFilePtr.p->noLogpagesInBuffer > 0) { jam(); completedLogPage(signal, ZENFORCE_WRITE); completedLogPage(signal, ZENFORCE_WRITE, 11); /*---------------------------------------------------------------------------*/ /*SINCE WE ARE ONLY WRITING PART OF THE LAST PAGE WE HAVE TO UPDATE THE WORD */ /*WRITTEN TO REFLECT THE REAL LAST WORD WRITTEN. WE ALSO HAVE TO MOVE THE */ Loading @@ -12249,7 +12260,8 @@ void Dblqh::timeSup(Signal* signal) releaseLogpage(signal); } else { jam(); writeSinglePage(signal, logFilePtr.p->currentFilepage, wordWritten); writeSinglePage(signal, logFilePtr.p->currentFilepage, wordWritten, 1); lfoPtr.p->lfoState = LogFileOperationRecord::ACTIVE_WRITE_LOG; }//if }//if Loading Loading @@ -12385,7 +12397,7 @@ void Dblqh::firstPageWriteLab(Signal* signal) logPagePtr.i = logFilePtr.p->logPageZero; ptrCheckGuard(logPagePtr, clogPageFileSize, logPageRecord); logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE + ZPOS_FILE_NO] = fileNo; writeSinglePage(signal, 0, ZPAGE_SIZE - 1); writeSinglePage(signal, 0, ZPAGE_SIZE - 1, 2); lfoPtr.p->logFileRec = currLogFile; lfoPtr.p->lfoState = LogFileOperationRecord::WRITE_PAGE_ZERO; return; Loading Loading @@ -12474,7 +12486,7 @@ void Dblqh::lastWriteInFileLab(Signal* signal) logPagePtr.i = logFilePtr.p->logPageZero; ptrCheckGuard(logPagePtr, clogPageFileSize, logPageRecord); logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE + ZPOS_FILE_NO] = fileNo; writeSinglePage(signal, 0, ZPAGE_SIZE - 1); writeSinglePage(signal, 0, ZPAGE_SIZE - 1, 3); lfoPtr.p->logFileRec = currLogFile; lfoPtr.p->lfoState = LogFileOperationRecord::WRITE_PAGE_ZERO; return; Loading Loading @@ -12509,7 +12521,8 @@ void Dblqh::openFileInitLab(Signal* signal) { logFilePtr.p->logFileStatus = LogFileRecord::OPEN_INIT; seizeLogpage(signal); writeSinglePage(signal, (ZNO_MBYTES_IN_FILE * ZPAGES_IN_MBYTE) - 1, ZPAGE_SIZE - 1); writeSinglePage(signal, (ZNO_MBYTES_IN_FILE * ZPAGES_IN_MBYTE) - 1, ZPAGE_SIZE - 1, 4); lfoPtr.p->lfoState = LogFileOperationRecord::INIT_WRITE_AT_END; return; }//Dblqh::openFileInitLab() Loading Loading @@ -12550,7 +12563,7 @@ void Dblqh::initFirstPageLab(Signal* signal) logPagePtr.p->logPageWord[ZPOS_LOG_LAP] = 1; logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE] = ZCOMPLETED_GCI_TYPE; logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE + 1] = 1; writeSinglePage(signal, 1, ZPAGE_SIZE - 1); writeSinglePage(signal, 1, ZPAGE_SIZE - 1, 5); lfoPtr.p->lfoState = LogFileOperationRecord::WRITE_GCI_ZERO; return; }//if Loading Loading @@ -12852,17 +12865,13 @@ void Dblqh::releaseLogpage(Signal* signal) { #ifdef VM_TRACE // Check that log page isn't already in free list LogPageRecordPtr TlogPagePtr; TlogPagePtr.i = cfirstfreeLogPage; while (TlogPagePtr.i != RNIL){ ptrCheckGuard(TlogPagePtr, clogPageFileSize, logPageRecord); ndbrequire(TlogPagePtr.i != logPagePtr.i); TlogPagePtr.i = TlogPagePtr.p->logPageWord[ZNEXT_PAGE]; } ndbrequire(logPagePtr.p->logPageWord[ZPOS_IN_FREE_LIST] == 0); #endif cnoOfLogPages++; logPagePtr.p->logPageWord[ZNEXT_PAGE] = cfirstfreeLogPage; logPagePtr.p->logPageWord[ZPOS_IN_WRITING]= 0; logPagePtr.p->logPageWord[ZPOS_IN_FREE_LIST]= 1; cfirstfreeLogPage = logPagePtr.i; }//Dblqh::releaseLogpage() Loading Loading @@ -12908,6 +12917,7 @@ void Dblqh::seizeLogpage(Signal* signal) /* ------------------------------------------------------------------------- */ cfirstfreeLogPage = logPagePtr.p->logPageWord[ZNEXT_PAGE]; logPagePtr.p->logPageWord[ZNEXT_PAGE] = RNIL; logPagePtr.p->logPageWord[ZPOS_IN_FREE_LIST] = 0; }//Dblqh::seizeLogpage() /* ------------------------------------------------------------------------- */ Loading Loading @@ -13015,7 +13025,7 @@ void Dblqh::writeFileHeaderOpen(Signal* signal, Uint32 wmoType) /* LOG FILE. THIS HAS SPECIAL SIGNIFANCE TO FIND */ /* THE END OF THE LOG AT SYSTEM RESTART. */ /* ------------------------------------------------------- */ writeSinglePage(signal, 0, ZPAGE_SIZE - 1); writeSinglePage(signal, 0, ZPAGE_SIZE - 1, 6); if (wmoType == ZINIT) { jam(); lfoPtr.p->lfoState = LogFileOperationRecord::INIT_FIRST_PAGE; Loading Loading @@ -13049,7 +13059,8 @@ void Dblqh::writeFileHeaderOpen(Signal* signal, Uint32 wmoType) void Dblqh::writeInitMbyte(Signal* signal) { initLogpage(signal); writeSinglePage(signal, logFilePtr.p->currentMbyte * ZPAGES_IN_MBYTE, ZPAGE_SIZE - 1); writeSinglePage(signal, logFilePtr.p->currentMbyte * ZPAGES_IN_MBYTE, ZPAGE_SIZE - 1, 7); lfoPtr.p->lfoState = LogFileOperationRecord::WRITE_INIT_MBYTE; }//Dblqh::writeInitMbyte() Loading @@ -13059,13 +13070,15 @@ void Dblqh::writeInitMbyte(Signal* signal) /* INPUT: TWSP_PAGE_NO THE PAGE NUMBER WRITTEN */ /* SUBROUTINE SHORT NAME: WSP */ /* ------------------------------------------------------------------------- */ void Dblqh::writeSinglePage(Signal* signal, Uint32 pageNo, Uint32 wordWritten) void Dblqh::writeSinglePage(Signal* signal, Uint32 pageNo, Uint32 wordWritten, Uint32 place) { seizeLfo(signal); initLfo(signal); lfoPtr.p->firstLfoPage = logPagePtr.i; logPagePtr.p->logPageWord[ZNEXT_PAGE] = RNIL; writeDbgInfoPageHeader(logPagePtr, place, pageNo, wordWritten); // Calculate checksum for page logPagePtr.p->logPageWord[ZPOS_CHECKSUM] = calcPageCheckSum(logPagePtr); Loading Loading @@ -14534,7 +14547,7 @@ void Dblqh::execSr(Signal* signal) * IN THIS WE HAVE COMPLETED EXECUTION OF THE CURRENT LOG PAGE * AND CAN WRITE IT TO DISK SINCE IT IS DIRTY. * ----------------------------------------------------------------- */ writeDirty(signal); writeDirty(signal, 12); return; break; case LogPartRecord::LES_EXEC_LOG: Loading @@ -14545,7 +14558,7 @@ void Dblqh::execSr(Signal* signal) * ------------------------------------------------------------------- */ if (logFilePtr.p->currentLogpage != logPartPtr.p->prevLogpage) { jam(); writeDirty(signal); writeDirty(signal, 13); return; }//if break; Loading Loading @@ -14989,7 +15002,8 @@ void Dblqh::invalidateLogAfterLastGCI(Signal* signal) { // This page must be invalidated. logPagePtr.p->logPageWord[ZPOS_LOG_LAP] = 0; // Contact NDBFS. Real time break. writeSinglePage(signal, logPartPtr.p->invalidatePageNo, ZPAGE_SIZE - 1); writeSinglePage(signal, logPartPtr.p->invalidatePageNo, ZPAGE_SIZE - 1, 0); lfoPtr.p->lfoState = LogFileOperationRecord::WRITE_SR_INVALIDATE_PAGES; } else { // We are done with invalidating. Finish start phase 3.4. Loading Loading @@ -15937,7 +15951,7 @@ void Dblqh::closeFile(Signal* signal, LogFileRecordPtr clfLogFilePtr) // logPartPtr // Defines lfoPtr /* ---------------------------------------------------------------- */ void Dblqh::completedLogPage(Signal* signal, Uint32 clpType) void Dblqh::completedLogPage(Signal* signal, Uint32 clpType, Uint32 place) { LogPageRecordPtr clpLogPagePtr; LogPageRecordPtr wlpLogPagePtr; Loading Loading @@ -15980,6 +15994,9 @@ void Dblqh::completedLogPage(Signal* signal, Uint32 clpType) twlpNoPages++; ptrCheckGuard(wlpLogPagePtr, clogPageFileSize, logPageRecord); writeDbgInfoPageHeader(wlpLogPagePtr, place, logFilePtr.p->filePosition + twlpNoPages - 1, ZPAGE_SIZE); // Calculate checksum for page wlpLogPagePtr.p->logPageWord[ZPOS_CHECKSUM] = calcPageCheckSum(wlpLogPagePtr); wlpLogPagePtr.i = wlpLogPagePtr.p->logPageWord[ZNEXT_PAGE]; Loading Loading @@ -16382,6 +16399,8 @@ void Dblqh::initialiseLogPage(Signal* signal) refresh_watch_dog(); ptrAss(logPagePtr, logPageRecord); logPagePtr.p->logPageWord[ZNEXT_PAGE] = logPagePtr.i + 1; logPagePtr.p->logPageWord[ZPOS_IN_FREE_LIST]= 1; logPagePtr.p->logPageWord[ZPOS_IN_WRITING]= 0; }//for logPagePtr.i = clogPageFileSize - 1; ptrAss(logPagePtr, logPageRecord); Loading Loading @@ -18038,10 +18057,14 @@ void Dblqh::writeCompletedGciLog(Signal* signal) * * SUBROUTINE SHORT NAME: WD * ------------------------------------------------------------------------- */ void Dblqh::writeDirty(Signal* signal) void Dblqh::writeDirty(Signal* signal, Uint32 place) { logPagePtr.p->logPageWord[ZPOS_DIRTY] = ZNOT_DIRTY; ndbassert(logPartPtr.p->prevFilepage == logPagePtr.p->logPageWord[ZPOS_PAGE_NO]); writeDbgInfoPageHeader(logPagePtr, place, logPartPtr.p->prevFilepage, ZPAGE_SIZE); // Calculate checksum for page logPagePtr.p->logPageWord[ZPOS_CHECKSUM] = calcPageCheckSum(logPagePtr); Loading Loading @@ -18075,7 +18098,7 @@ void Dblqh::writeLogWord(Signal* signal, Uint32 data) logPagePtr.p->logPageWord[ZCURR_PAGE_INDEX] = logPos + 1; if ((logPos + 1) == ZPAGE_SIZE) { jam(); completedLogPage(signal, ZNORMAL); completedLogPage(signal, ZNORMAL, 8); seizeLogpage(signal); initLogpage(signal); logFilePtr.p->currentLogpage = logPagePtr.i; Loading Loading @@ -18133,7 +18156,7 @@ void Dblqh::writeNextLog(Signal* signal) /* -------------------------------------------------- */ /* WE HAVE TO CHANGE LOG FILE */ /* -------------------------------------------------- */ completedLogPage(signal, ZLAST_WRITE_IN_FILE); completedLogPage(signal, ZLAST_WRITE_IN_FILE, 9); if (wnlNextLogFilePtr.p->fileNo == 0) { jam(); /* -------------------------------------------------- */ Loading @@ -18152,7 +18175,7 @@ void Dblqh::writeNextLog(Signal* signal) /* INCREMENT THE CURRENT MBYTE */ /* SET PAGE INDEX TO PAGE HEADER SIZE */ /* -------------------------------------------------- */ completedLogPage(signal, ZENFORCE_WRITE); completedLogPage(signal, ZENFORCE_WRITE, 10); twnlNewMbyte = logFilePtr.p->currentMbyte + 1; }//if /* -------------------------------------------------- */ Loading Loading @@ -18520,3 +18543,16 @@ Uint32 Dblqh::calcPageCheckSum(LogPageRecordPtr logP){ return checkSum; } void Dblqh::writeDbgInfoPageHeader(LogPageRecordPtr logP, Uint32 place, Uint32 pageNo, Uint32 wordWritten) { logP.p->logPageWord[ZPOS_LOG_TIMER]= logPartPtr.p->logTimer; logP.p->logPageWord[ZPOS_PREV_PAGE_NO]= logP.p->logPageWord[ZPOS_PAGE_NO]; logP.p->logPageWord[ZPOS_PAGE_I]= logP.i; logP.p->logPageWord[ZPOS_PLACE_WRITTEN_FROM]= place; logP.p->logPageWord[ZPOS_PAGE_NO]= pageNo; logP.p->logPageWord[ZPOS_FILE_NO]= logFilePtr.p->fileNo; logP.p->logPageWord[ZPOS_WORD_WRITTEN]= wordWritten; logP.p->logPageWord[ZPOS_IN_WRITING]= 1; } ndb/src/kernel/blocks/dblqh/redoLogReader/records.hpp +11 −0 Original line number Diff line number Diff line Loading @@ -147,6 +147,17 @@ protected: Uint32 m_old_prepare_file_number; Uint32 m_old_prepare_page_reference; Uint32 m_dirty_flag; /* Debug info Start */ Uint32 m_log_timer; Uint32 m_page_i_value; Uint32 m_place_written_from; Uint32 m_page_no; Uint32 m_file_no; Uint32 m_word_written; Uint32 m_in_writing_flag; Uint32 m_prev_page_no; Uint32 m_in_free_list; /* Debug info End */ }; //---------------------------------------------------------------- Loading Loading
ndb/src/kernel/blocks/dblqh/Dblqh.hpp +17 −3 Original line number Diff line number Diff line Loading @@ -86,6 +86,17 @@ #define ZCURR_PAGE_INDEX 8 #define ZLAST_LOG_PREP_REF 10 #define ZPOS_DIRTY 11 /* A number of debug items written in the page header of all log files */ #define ZPOS_LOG_TIMER 12 #define ZPOS_PAGE_I 13 #define ZPOS_PLACE_WRITTEN_FROM 14 #define ZPOS_PAGE_NO 15 #define ZPOS_FILE_NO 16 #define ZPOS_WORD_WRITTEN 17 #define ZPOS_IN_WRITING 18 #define ZPOS_PREV_PAGE_NO 19 #define ZPOS_IN_FREE_LIST 20 /* ------------------------------------------------------------------------- */ /* CONSTANTS FOR THE VARIOUS REPLICA AND NODE TYPES. */ /* ------------------------------------------------------------------------- */ Loading Loading @@ -2294,7 +2305,8 @@ private: void writeFileDescriptor(Signal* signal); void writeFileHeaderOpen(Signal* signal, Uint32 type); void writeInitMbyte(Signal* signal); void writeSinglePage(Signal* signal, Uint32 pageNo, Uint32 wordWritten); void writeSinglePage(Signal* signal, Uint32 pageNo, Uint32 wordWritten, Uint32 place); void buildLinkedLogPageList(Signal* signal); void changeMbyte(Signal* signal); Uint32 checkIfExecLog(Signal* signal); Loading @@ -2303,7 +2315,7 @@ private: void checkScanTcCompleted(Signal* signal); void checkSrCompleted(Signal* signal); void closeFile(Signal* signal, LogFileRecordPtr logFilePtr); void completedLogPage(Signal* signal, Uint32 clpType); void completedLogPage(Signal* signal, Uint32 clpType, Uint32 place); void deleteFragrec(Uint32 fragId); void deleteTransidHash(Signal* signal); void findLogfile(Signal* signal, Loading Loading @@ -2399,7 +2411,9 @@ private: void writeAbortLog(Signal* signal); void writeCommitLog(Signal* signal, LogPartRecordPtr regLogPartPtr); void writeCompletedGciLog(Signal* signal); void writeDirty(Signal* signal); void writeDbgInfoPageHeader(LogPageRecordPtr logPagePtr, Uint32 place, Uint32 pageNo, Uint32 wordWritten); void writeDirty(Signal* signal, Uint32 place); void writeKey(Signal* signal); void writeLogHeader(Signal* signal); void writeLogWord(Signal* signal, Uint32 data); Loading
ndb/src/kernel/blocks/dblqh/DblqhMain.cpp +60 −24 Original line number Diff line number Diff line Loading @@ -12132,6 +12132,7 @@ void Dblqh::initFsopenconf(Signal* signal) /* ========================================================================= */ void Dblqh::initFsrwconf(Signal* signal) { LogPageRecordPtr logP; lfoPtr.i = signal->theData[0]; ptrCheckGuard(lfoPtr, clfoFileSize, logFileOperationRecord); logFilePtr.i = lfoPtr.p->logFileRec; Loading @@ -12140,6 +12141,16 @@ void Dblqh::initFsrwconf(Signal* signal) ptrCheckGuard(logPartPtr, clogPartFileSize, logPartRecord); logPagePtr.i = lfoPtr.p->firstLfoPage; ptrCheckGuard(logPagePtr, clogPageFileSize, logPageRecord); logP= logPagePtr; for (;;) { logP.p->logPageWord[ZPOS_IN_WRITING]= 0; logP.p->logPageWord[ZPOS_IN_FREE_LIST]= 0; if (logP.p->logPageWord[ZNEXT_PAGE] == RNIL) return; logP.i= logP.p->logPageWord[ZNEXT_PAGE]; ptrCheckGuard(logP, clogPageFileSize, logPageRecord); } }//Dblqh::initFsrwconf() /* ######################################################################### */ Loading Loading @@ -12227,7 +12238,7 @@ void Dblqh::timeSup(Signal* signal) ndbrequire(wordWritten < ZPAGE_SIZE); if (logFilePtr.p->noLogpagesInBuffer > 0) { jam(); completedLogPage(signal, ZENFORCE_WRITE); completedLogPage(signal, ZENFORCE_WRITE, 11); /*---------------------------------------------------------------------------*/ /*SINCE WE ARE ONLY WRITING PART OF THE LAST PAGE WE HAVE TO UPDATE THE WORD */ /*WRITTEN TO REFLECT THE REAL LAST WORD WRITTEN. WE ALSO HAVE TO MOVE THE */ Loading @@ -12249,7 +12260,8 @@ void Dblqh::timeSup(Signal* signal) releaseLogpage(signal); } else { jam(); writeSinglePage(signal, logFilePtr.p->currentFilepage, wordWritten); writeSinglePage(signal, logFilePtr.p->currentFilepage, wordWritten, 1); lfoPtr.p->lfoState = LogFileOperationRecord::ACTIVE_WRITE_LOG; }//if }//if Loading Loading @@ -12385,7 +12397,7 @@ void Dblqh::firstPageWriteLab(Signal* signal) logPagePtr.i = logFilePtr.p->logPageZero; ptrCheckGuard(logPagePtr, clogPageFileSize, logPageRecord); logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE + ZPOS_FILE_NO] = fileNo; writeSinglePage(signal, 0, ZPAGE_SIZE - 1); writeSinglePage(signal, 0, ZPAGE_SIZE - 1, 2); lfoPtr.p->logFileRec = currLogFile; lfoPtr.p->lfoState = LogFileOperationRecord::WRITE_PAGE_ZERO; return; Loading Loading @@ -12474,7 +12486,7 @@ void Dblqh::lastWriteInFileLab(Signal* signal) logPagePtr.i = logFilePtr.p->logPageZero; ptrCheckGuard(logPagePtr, clogPageFileSize, logPageRecord); logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE + ZPOS_FILE_NO] = fileNo; writeSinglePage(signal, 0, ZPAGE_SIZE - 1); writeSinglePage(signal, 0, ZPAGE_SIZE - 1, 3); lfoPtr.p->logFileRec = currLogFile; lfoPtr.p->lfoState = LogFileOperationRecord::WRITE_PAGE_ZERO; return; Loading Loading @@ -12509,7 +12521,8 @@ void Dblqh::openFileInitLab(Signal* signal) { logFilePtr.p->logFileStatus = LogFileRecord::OPEN_INIT; seizeLogpage(signal); writeSinglePage(signal, (ZNO_MBYTES_IN_FILE * ZPAGES_IN_MBYTE) - 1, ZPAGE_SIZE - 1); writeSinglePage(signal, (ZNO_MBYTES_IN_FILE * ZPAGES_IN_MBYTE) - 1, ZPAGE_SIZE - 1, 4); lfoPtr.p->lfoState = LogFileOperationRecord::INIT_WRITE_AT_END; return; }//Dblqh::openFileInitLab() Loading Loading @@ -12550,7 +12563,7 @@ void Dblqh::initFirstPageLab(Signal* signal) logPagePtr.p->logPageWord[ZPOS_LOG_LAP] = 1; logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE] = ZCOMPLETED_GCI_TYPE; logPagePtr.p->logPageWord[ZPAGE_HEADER_SIZE + 1] = 1; writeSinglePage(signal, 1, ZPAGE_SIZE - 1); writeSinglePage(signal, 1, ZPAGE_SIZE - 1, 5); lfoPtr.p->lfoState = LogFileOperationRecord::WRITE_GCI_ZERO; return; }//if Loading Loading @@ -12852,17 +12865,13 @@ void Dblqh::releaseLogpage(Signal* signal) { #ifdef VM_TRACE // Check that log page isn't already in free list LogPageRecordPtr TlogPagePtr; TlogPagePtr.i = cfirstfreeLogPage; while (TlogPagePtr.i != RNIL){ ptrCheckGuard(TlogPagePtr, clogPageFileSize, logPageRecord); ndbrequire(TlogPagePtr.i != logPagePtr.i); TlogPagePtr.i = TlogPagePtr.p->logPageWord[ZNEXT_PAGE]; } ndbrequire(logPagePtr.p->logPageWord[ZPOS_IN_FREE_LIST] == 0); #endif cnoOfLogPages++; logPagePtr.p->logPageWord[ZNEXT_PAGE] = cfirstfreeLogPage; logPagePtr.p->logPageWord[ZPOS_IN_WRITING]= 0; logPagePtr.p->logPageWord[ZPOS_IN_FREE_LIST]= 1; cfirstfreeLogPage = logPagePtr.i; }//Dblqh::releaseLogpage() Loading Loading @@ -12908,6 +12917,7 @@ void Dblqh::seizeLogpage(Signal* signal) /* ------------------------------------------------------------------------- */ cfirstfreeLogPage = logPagePtr.p->logPageWord[ZNEXT_PAGE]; logPagePtr.p->logPageWord[ZNEXT_PAGE] = RNIL; logPagePtr.p->logPageWord[ZPOS_IN_FREE_LIST] = 0; }//Dblqh::seizeLogpage() /* ------------------------------------------------------------------------- */ Loading Loading @@ -13015,7 +13025,7 @@ void Dblqh::writeFileHeaderOpen(Signal* signal, Uint32 wmoType) /* LOG FILE. THIS HAS SPECIAL SIGNIFANCE TO FIND */ /* THE END OF THE LOG AT SYSTEM RESTART. */ /* ------------------------------------------------------- */ writeSinglePage(signal, 0, ZPAGE_SIZE - 1); writeSinglePage(signal, 0, ZPAGE_SIZE - 1, 6); if (wmoType == ZINIT) { jam(); lfoPtr.p->lfoState = LogFileOperationRecord::INIT_FIRST_PAGE; Loading Loading @@ -13049,7 +13059,8 @@ void Dblqh::writeFileHeaderOpen(Signal* signal, Uint32 wmoType) void Dblqh::writeInitMbyte(Signal* signal) { initLogpage(signal); writeSinglePage(signal, logFilePtr.p->currentMbyte * ZPAGES_IN_MBYTE, ZPAGE_SIZE - 1); writeSinglePage(signal, logFilePtr.p->currentMbyte * ZPAGES_IN_MBYTE, ZPAGE_SIZE - 1, 7); lfoPtr.p->lfoState = LogFileOperationRecord::WRITE_INIT_MBYTE; }//Dblqh::writeInitMbyte() Loading @@ -13059,13 +13070,15 @@ void Dblqh::writeInitMbyte(Signal* signal) /* INPUT: TWSP_PAGE_NO THE PAGE NUMBER WRITTEN */ /* SUBROUTINE SHORT NAME: WSP */ /* ------------------------------------------------------------------------- */ void Dblqh::writeSinglePage(Signal* signal, Uint32 pageNo, Uint32 wordWritten) void Dblqh::writeSinglePage(Signal* signal, Uint32 pageNo, Uint32 wordWritten, Uint32 place) { seizeLfo(signal); initLfo(signal); lfoPtr.p->firstLfoPage = logPagePtr.i; logPagePtr.p->logPageWord[ZNEXT_PAGE] = RNIL; writeDbgInfoPageHeader(logPagePtr, place, pageNo, wordWritten); // Calculate checksum for page logPagePtr.p->logPageWord[ZPOS_CHECKSUM] = calcPageCheckSum(logPagePtr); Loading Loading @@ -14534,7 +14547,7 @@ void Dblqh::execSr(Signal* signal) * IN THIS WE HAVE COMPLETED EXECUTION OF THE CURRENT LOG PAGE * AND CAN WRITE IT TO DISK SINCE IT IS DIRTY. * ----------------------------------------------------------------- */ writeDirty(signal); writeDirty(signal, 12); return; break; case LogPartRecord::LES_EXEC_LOG: Loading @@ -14545,7 +14558,7 @@ void Dblqh::execSr(Signal* signal) * ------------------------------------------------------------------- */ if (logFilePtr.p->currentLogpage != logPartPtr.p->prevLogpage) { jam(); writeDirty(signal); writeDirty(signal, 13); return; }//if break; Loading Loading @@ -14989,7 +15002,8 @@ void Dblqh::invalidateLogAfterLastGCI(Signal* signal) { // This page must be invalidated. logPagePtr.p->logPageWord[ZPOS_LOG_LAP] = 0; // Contact NDBFS. Real time break. writeSinglePage(signal, logPartPtr.p->invalidatePageNo, ZPAGE_SIZE - 1); writeSinglePage(signal, logPartPtr.p->invalidatePageNo, ZPAGE_SIZE - 1, 0); lfoPtr.p->lfoState = LogFileOperationRecord::WRITE_SR_INVALIDATE_PAGES; } else { // We are done with invalidating. Finish start phase 3.4. Loading Loading @@ -15937,7 +15951,7 @@ void Dblqh::closeFile(Signal* signal, LogFileRecordPtr clfLogFilePtr) // logPartPtr // Defines lfoPtr /* ---------------------------------------------------------------- */ void Dblqh::completedLogPage(Signal* signal, Uint32 clpType) void Dblqh::completedLogPage(Signal* signal, Uint32 clpType, Uint32 place) { LogPageRecordPtr clpLogPagePtr; LogPageRecordPtr wlpLogPagePtr; Loading Loading @@ -15980,6 +15994,9 @@ void Dblqh::completedLogPage(Signal* signal, Uint32 clpType) twlpNoPages++; ptrCheckGuard(wlpLogPagePtr, clogPageFileSize, logPageRecord); writeDbgInfoPageHeader(wlpLogPagePtr, place, logFilePtr.p->filePosition + twlpNoPages - 1, ZPAGE_SIZE); // Calculate checksum for page wlpLogPagePtr.p->logPageWord[ZPOS_CHECKSUM] = calcPageCheckSum(wlpLogPagePtr); wlpLogPagePtr.i = wlpLogPagePtr.p->logPageWord[ZNEXT_PAGE]; Loading Loading @@ -16382,6 +16399,8 @@ void Dblqh::initialiseLogPage(Signal* signal) refresh_watch_dog(); ptrAss(logPagePtr, logPageRecord); logPagePtr.p->logPageWord[ZNEXT_PAGE] = logPagePtr.i + 1; logPagePtr.p->logPageWord[ZPOS_IN_FREE_LIST]= 1; logPagePtr.p->logPageWord[ZPOS_IN_WRITING]= 0; }//for logPagePtr.i = clogPageFileSize - 1; ptrAss(logPagePtr, logPageRecord); Loading Loading @@ -18038,10 +18057,14 @@ void Dblqh::writeCompletedGciLog(Signal* signal) * * SUBROUTINE SHORT NAME: WD * ------------------------------------------------------------------------- */ void Dblqh::writeDirty(Signal* signal) void Dblqh::writeDirty(Signal* signal, Uint32 place) { logPagePtr.p->logPageWord[ZPOS_DIRTY] = ZNOT_DIRTY; ndbassert(logPartPtr.p->prevFilepage == logPagePtr.p->logPageWord[ZPOS_PAGE_NO]); writeDbgInfoPageHeader(logPagePtr, place, logPartPtr.p->prevFilepage, ZPAGE_SIZE); // Calculate checksum for page logPagePtr.p->logPageWord[ZPOS_CHECKSUM] = calcPageCheckSum(logPagePtr); Loading Loading @@ -18075,7 +18098,7 @@ void Dblqh::writeLogWord(Signal* signal, Uint32 data) logPagePtr.p->logPageWord[ZCURR_PAGE_INDEX] = logPos + 1; if ((logPos + 1) == ZPAGE_SIZE) { jam(); completedLogPage(signal, ZNORMAL); completedLogPage(signal, ZNORMAL, 8); seizeLogpage(signal); initLogpage(signal); logFilePtr.p->currentLogpage = logPagePtr.i; Loading Loading @@ -18133,7 +18156,7 @@ void Dblqh::writeNextLog(Signal* signal) /* -------------------------------------------------- */ /* WE HAVE TO CHANGE LOG FILE */ /* -------------------------------------------------- */ completedLogPage(signal, ZLAST_WRITE_IN_FILE); completedLogPage(signal, ZLAST_WRITE_IN_FILE, 9); if (wnlNextLogFilePtr.p->fileNo == 0) { jam(); /* -------------------------------------------------- */ Loading @@ -18152,7 +18175,7 @@ void Dblqh::writeNextLog(Signal* signal) /* INCREMENT THE CURRENT MBYTE */ /* SET PAGE INDEX TO PAGE HEADER SIZE */ /* -------------------------------------------------- */ completedLogPage(signal, ZENFORCE_WRITE); completedLogPage(signal, ZENFORCE_WRITE, 10); twnlNewMbyte = logFilePtr.p->currentMbyte + 1; }//if /* -------------------------------------------------- */ Loading Loading @@ -18520,3 +18543,16 @@ Uint32 Dblqh::calcPageCheckSum(LogPageRecordPtr logP){ return checkSum; } void Dblqh::writeDbgInfoPageHeader(LogPageRecordPtr logP, Uint32 place, Uint32 pageNo, Uint32 wordWritten) { logP.p->logPageWord[ZPOS_LOG_TIMER]= logPartPtr.p->logTimer; logP.p->logPageWord[ZPOS_PREV_PAGE_NO]= logP.p->logPageWord[ZPOS_PAGE_NO]; logP.p->logPageWord[ZPOS_PAGE_I]= logP.i; logP.p->logPageWord[ZPOS_PLACE_WRITTEN_FROM]= place; logP.p->logPageWord[ZPOS_PAGE_NO]= pageNo; logP.p->logPageWord[ZPOS_FILE_NO]= logFilePtr.p->fileNo; logP.p->logPageWord[ZPOS_WORD_WRITTEN]= wordWritten; logP.p->logPageWord[ZPOS_IN_WRITING]= 1; }
ndb/src/kernel/blocks/dblqh/redoLogReader/records.hpp +11 −0 Original line number Diff line number Diff line Loading @@ -147,6 +147,17 @@ protected: Uint32 m_old_prepare_file_number; Uint32 m_old_prepare_page_reference; Uint32 m_dirty_flag; /* Debug info Start */ Uint32 m_log_timer; Uint32 m_page_i_value; Uint32 m_place_written_from; Uint32 m_page_no; Uint32 m_file_no; Uint32 m_word_written; Uint32 m_in_writing_flag; Uint32 m_prev_page_no; Uint32 m_in_free_list; /* Debug info End */ }; //---------------------------------------------------------------- Loading