📄 dbtupgen.cpp
字号:
case CHECKPOINT_UNDO_WRITE: ljam(); freeDiskBufferSegmentRecord(signal, dbsiPtr); break; default: ndbrequire(false); break; }//switch return;}//Dbtup::execFSWRITECONF()void Dbtup::execCONTINUEB(Signal* signal) { ljamEntry(); Uint32 actionType = signal->theData[0]; Uint32 dataPtr = signal->theData[1]; switch (actionType) { case ZSTART_EXEC_UNDO_LOG: ljam(); startExecUndoLogLab(signal, dataPtr); break; case ZCONT_SAVE_DP: ljam(); lcpSaveDataPageLab(signal, dataPtr); break; case ZCONT_START_SAVE_CL: { CheckpointInfoPtr ciPtr; ljam(); ciPtr.i = dataPtr; ptrCheckGuard(ciPtr, cnoOfLcpRec, checkpointInfo); lcpSaveCopyListLab(signal, ciPtr); break; } case ZCONT_EXECUTE_LC: { LocalLogInfoPtr lliPtr; DiskBufferSegmentInfoPtr dbsiPtr; ljam(); lliPtr.i = dataPtr; ptrCheckGuard(lliPtr, cnoOfParallellUndoFiles, localLogInfo); dbsiPtr.i = lliPtr.p->lliUndoBufferSegmentP; ptrCheckGuard(dbsiPtr, cnoOfConcurrentWriteOp, diskBufferSegmentInfo); xlcGetNextRecordLab(signal, dbsiPtr, lliPtr); break; } case ZCONT_LOAD_DP: { DiskBufferSegmentInfoPtr dbsiPtr; RestartInfoRecordPtr riPtr; ljam(); riPtr.i = dataPtr; ptrCheckGuard(riPtr, cnoOfRestartInfoRec, restartInfoRecord); dbsiPtr.i = riPtr.p->sriDataBufferSegmentP; ptrCheckGuard(dbsiPtr, cnoOfConcurrentWriteOp, diskBufferSegmentInfo); rfrLoadDataPagesLab(signal, riPtr, dbsiPtr); break; } case ZLOAD_BAL_LCP_TIMER: ljam(); clblPageCounter = clblPagesPerTick; signal->theData[0] = ZLOAD_BAL_LCP_TIMER; sendSignalWithDelay(cownref, GSN_CONTINUEB, signal, 400, 1); break; case ZINITIALISE_RECORDS: ljam(); initialiseRecordsLab(signal, dataPtr, signal->theData[2], signal->theData[3]); break; case ZREL_FRAG: ljam(); releaseFragment(signal, dataPtr); break; case ZREPORT_MEMORY_USAGE:{ ljam(); static int c_currentMemUsed = 0; int now = (cnoOfAllocatedPages * 100)/cnoOfPage; const int thresholds[] = { 100, 90, 80, 0 }; Uint32 i = 0; const Uint32 sz = sizeof(thresholds)/sizeof(thresholds[0]); for(i = 0; i<sz; i++){ if(now >= thresholds[i]){ now = thresholds[i]; break; } } if(now != c_currentMemUsed){ reportMemoryUsage(signal, now > c_currentMemUsed ? 1 : -1); c_currentMemUsed = now; } signal->theData[0] = ZREPORT_MEMORY_USAGE; sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 2000, 1); return; } case ZBUILD_INDEX: ljam(); buildIndex(signal, dataPtr); break; default: ndbrequire(false); break; }//switch}//Dbtup::execTUP_CONTINUEB()/* **************************************************************** *//* ---------------------------------------------------------------- *//* ------------------- SYSTEM RESTART MODULE ---------------------- *//* ---------------------------------------------------------------- *//* **************************************************************** */void Dbtup::execSTTOR(Signal* signal) { ljamEntry(); Uint32 startPhase = signal->theData[1]; Uint32 sigKey = signal->theData[6]; switch (startPhase) { case ZSTARTPHASE1: ljam(); CLEAR_ERROR_INSERT_VALUE; cownref = calcTupBlockRef(0); break; default: ljam(); break; }//switch signal->theData[0] = sigKey; signal->theData[1] = 3; signal->theData[2] = 2; signal->theData[3] = ZSTARTPHASE1; signal->theData[4] = 255; sendSignal(NDBCNTR_REF, GSN_STTORRY, signal, 5, JBB); return;}//Dbtup::execSTTOR()/************************************************************************************************/// SIZE_ALTREP INITIALIZE DATA STRUCTURES, FILES AND DS VARIABLES, GET READY FOR EXTERNAL // CONNECTIONS./************************************************************************************************/void Dbtup::execREAD_CONFIG_REQ(Signal* signal) { const ReadConfigReq * req = (ReadConfigReq*)signal->getDataPtr(); Uint32 ref = req->senderRef; Uint32 senderData = req->senderData; ndbrequire(req->noOfParameters == 0); ljamEntry(); const ndb_mgm_configuration_iterator * p = theConfiguration.getOwnConfigIterator(); ndbrequire(p != 0); Uint32 log_page_size= 0; ndb_mgm_get_int_parameter(p, CFG_DB_UNDO_DATA_BUFFER, &log_page_size); /** * Always set page size in half MBytes */ cnoOfUndoPage= (log_page_size / sizeof(UndoPage)); Uint32 mega_byte_part= cnoOfUndoPage & 15; if (mega_byte_part != 0) { jam(); cnoOfUndoPage+= (16 - mega_byte_part); } ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_FRAG, &cnoOfFragrec)); ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_OP_RECS, &cnoOfOprec)); ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_PAGE, &cnoOfPage)); Uint32 noOfTriggers= 0; Uint32 tmp= 0; ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_PAGE_RANGE, &tmp)); initPageRangeSize(tmp); ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_TABLE, &cnoOfTablerec)); ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_TABLE_DESC, &cnoOfTabDescrRec)); Uint32 noOfStoredProc; ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUP_STORED_PROC, &noOfStoredProc)); ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_DB_NO_TRIGGERS, &noOfTriggers)); Uint32 nScanOp; // use TUX config for now ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_TUX_SCAN_OP, &nScanOp)); cnoOfTabDescrRec = (cnoOfTabDescrRec & 0xFFFFFFF0) + 16; initRecords(); c_storedProcPool.setSize(noOfStoredProc); c_buildIndexPool.setSize(c_noOfBuildIndexRec); c_triggerPool.setSize(noOfTriggers); c_scanOpPool.setSize(nScanOp); czero = 0; cminusOne = czero - 1; clastBitMask = 1; clastBitMask = clastBitMask << 31; cnoOfLocalLogInfo = 0; cnoFreeUndoSeg = 0; initialiseRecordsLab(signal, 0, ref, senderData); clblPagesPerTick = 50; ndb_mgm_get_int_parameter(p, CFG_DB_LCP_DISC_PAGES_TUP_SR, &clblPagesPerTick); clblPagesPerTickAfterSr = 50; ndb_mgm_get_int_parameter(p, CFG_DB_LCP_DISC_PAGES_TUP, &clblPagesPerTickAfterSr);}//Dbtup::execSIZEALT_REP()void Dbtup::initRecords() { unsigned i; // Records with dynamic sizes page = (Page*)allocRecord("Page", sizeof(Page), cnoOfPage, false); undoPage = (UndoPage*)allocRecord("UndoPage", sizeof(UndoPage), cnoOfUndoPage); operationrec = (Operationrec*)allocRecord("Operationrec", sizeof(Operationrec), cnoOfOprec); attrbufrec = (Attrbufrec*)allocRecord("Attrbufrec", sizeof(Attrbufrec), cnoOfAttrbufrec); checkpointInfo = (CheckpointInfo*)allocRecord("CheckpointInfo", sizeof(CheckpointInfo), cnoOfLcpRec); diskBufferSegmentInfo = (DiskBufferSegmentInfo*) allocRecord("DiskBufferSegmentInfo", sizeof(DiskBufferSegmentInfo), cnoOfConcurrentWriteOp); fragoperrec = (Fragoperrec*)allocRecord("Fragoperrec", sizeof(Fragoperrec), cnoOfFragoprec); fragrecord = (Fragrecord*)allocRecord("Fragrecord", sizeof(Fragrecord), cnoOfFragrec); for (i = 0; i<cnoOfFragrec; i++) { void * p = &fragrecord[i]; new (p) Fragrecord(c_scanOpPool); } hostBuffer = (HostBuffer*)allocRecord("HostBuffer", sizeof(HostBuffer), MAX_NODES); localLogInfo = (LocalLogInfo*)allocRecord("LocalLogInfo", sizeof(LocalLogInfo), cnoOfParallellUndoFiles); pageRange = (PageRange*)allocRecord("PageRange", sizeof(PageRange), cnoOfPageRangeRec); pendingFileOpenInfo = (PendingFileOpenInfo*) allocRecord("PendingFileOpenInfo", sizeof(PendingFileOpenInfo), cnoOfConcurrentOpenOp); restartInfoRecord = (RestartInfoRecord*) allocRecord("RestartInfoRecord", sizeof(RestartInfoRecord), cnoOfRestartInfoRec); tablerec = (Tablerec*)allocRecord("Tablerec", sizeof(Tablerec), cnoOfTablerec); for (i = 0; i<cnoOfTablerec; i++) { void * p = &tablerec[i]; new (p) Tablerec(c_triggerPool); } tableDescriptor = (TableDescriptor*) allocRecord("TableDescriptor", sizeof(TableDescriptor), cnoOfTabDescrRec); // Initialize BAT for interface to file system NewVARIABLE* bat = allocateBat(3); bat[1].WA = &page->pageWord[0]; bat[1].nrr = cnoOfPage; bat[1].ClusterSize = sizeof(Page); bat[1].bits.q = 13; /* 8192 words/page */ bat[1].bits.v = 5; bat[2].WA = &undoPage->undoPageWord[0]; bat[2].nrr = cnoOfUndoPage; bat[2].ClusterSize = sizeof(UndoPage); bat[2].bits.q = 13; /* 8192 words/page */ bat[2].bits.v = 5;}//Dbtup::initRecords()void Dbtup::initialiseRecordsLab(Signal* signal, Uint32 switchData, Uint32 retRef, Uint32 retData) { switch (switchData) { case 0: ljam(); initializeHostBuffer(); break; case 1: ljam(); initializeOperationrec(); break; case 2: ljam(); initializePage(); break; case 3: ljam(); initializeUndoPage(); break; case 4: ljam(); initializeTablerec(); break; case 5: ljam(); initializeCheckpointInfoRec(); break; case 6: ljam(); initializeFragrecord(); break; case 7: ljam(); initializeFragoperrec(); break; case 8: ljam(); initializePageRange(); break; case 9: ljam(); initializeTabDescr(); break; case 10: ljam(); initializeDiskBufferSegmentRecord(); break; case 11: ljam(); initializeLocalLogInfo(); break; case 12: ljam(); initializeAttrbufrec(); break; case 13: ljam(); initializePendingFileOpenInfoRecord(); break; case 14: ljam(); initializeRestartInfoRec(); { ReadConfigConf * conf = (ReadConfigConf*)signal->getDataPtrSend(); conf->senderRef = reference(); conf->senderData = retData; sendSignal(retRef, GSN_READ_CONFIG_CONF, signal, ReadConfigConf::SignalLength, JBB); } return; default: ndbrequire(false); break; }//switch signal->theData[0] = ZINITIALISE_RECORDS; signal->theData[1] = switchData + 1; signal->theData[2] = retRef; signal->theData[3] = retData; sendSignal(reference(), GSN_CONTINUEB, signal, 4, JBB); return;}//Dbtup::initialiseRecordsLab()void Dbtup::execNDB_STTOR(Signal* signal) { ljamEntry(); cndbcntrRef = signal->theData[0]; Uint32 ownNodeId = signal->theData[1]; Uint32 startPhase = signal->theData[2]; switch (startPhase) { case ZSTARTPHASE1: ljam(); cownNodeId = ownNodeId; cownref = calcTupBlockRef(ownNodeId); break; case ZSTARTPHASE2: ljam(); break; case ZSTARTPHASE3: ljam(); startphase3Lab(signal, ~0, ~0); break; case ZSTARTPHASE4: ljam(); break; case ZSTARTPHASE6: ljam();/*****************************************//* NOW SET THE DISK WRITE SPEED TO *//* PAGES PER TICK AFTER SYSTEM *//* RESTART. *//*****************************************/ clblPagesPerTick = clblPagesPerTickAfterSr; signal->theData[0] = ZREPORT_MEMORY_USAGE; sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 2000, 1); break; default: ljam(); break; }//switch signal->theData[0] = cownref; sendSignal(cndbcntrRef, GSN_NDB_STTORRY, signal, 1, JBB);}//Dbtup::execNDB_STTOR()void Dbtup::startphase3Lab(Signal* signal, Uint32 config1, Uint32 config2) { clblPageCounter = clblPagesPerTick; signal->theData[0] = ZLOAD_BAL_LCP_TIMER; sendSignalWithDelay(cownref, GSN_CONTINUEB, signal, 100, 1);}//Dbtup::startphase3Lab()void Dbtup::initializeAttrbufrec()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -