📄 dbdihmain.cpp
字号:
jam(); break; case FileRecord::TABLE_CLOSE_DELETE: jam(); break; default: jam(); break; }//switch { char msg[100]; sprintf(msg, "File system close failed during FileRecord status %d", (Uint32)status); fsRefError(signal,__LINE__,msg); } return;}//Dbdih::execFSCLOSEREF()void Dbdih::execFSOPENCONF(Signal* signal) { FileRecordPtr filePtr; jamEntry(); filePtr.i = signal->theData[0]; ptrCheckGuard(filePtr, cfileFileSize, fileRecord); filePtr.p->fileRef = signal->theData[1]; filePtr.p->fileStatus = FileRecord::OPEN; FileRecord::ReqStatus status = filePtr.p->reqStatus; filePtr.p->reqStatus = FileRecord::IDLE; switch (status) { case FileRecord::CREATING_GCP: jam(); creatingGcpLab(signal, filePtr); break; case FileRecord::OPENING_COPY_GCI: jam(); openingCopyGciSkipInitLab(signal, filePtr); break; case FileRecord::CREATING_COPY_GCI: jam(); openingCopyGciSkipInitLab(signal, filePtr); break; case FileRecord::OPENING_GCP: jam(); openingGcpLab(signal, filePtr); break; case FileRecord::OPENING_TABLE: jam(); openingTableLab(signal, filePtr); break; case FileRecord::TABLE_CREATE: jam(); tableCreateLab(signal, filePtr); break; case FileRecord::TABLE_OPEN_FOR_DELETE: jam(); tableOpenLab(signal, filePtr); break; default: ndbrequire(false); break; }//switch return;}//Dbdih::execFSOPENCONF()void Dbdih::execFSOPENREF(Signal* signal) { FileRecordPtr filePtr; jamEntry(); filePtr.i = signal->theData[0]; ptrCheckGuard(filePtr, cfileFileSize, fileRecord); FileRecord::ReqStatus status = filePtr.p->reqStatus; filePtr.p->reqStatus = FileRecord::IDLE; switch (status) { case FileRecord::CREATING_GCP: /* --------------------------------------------------------------------- */ /* WE DID NOT MANAGE TO CREATE A GLOBAL CHECKPOINT FILE. SERIOUS ERROR */ /* WHICH CAUSES A SYSTEM RESTART. */ /* --------------------------------------------------------------------- */ jam(); break; case FileRecord::OPENING_COPY_GCI: jam(); openingCopyGciErrorLab(signal, filePtr); return; case FileRecord::CREATING_COPY_GCI: jam(); break; case FileRecord::OPENING_GCP: jam(); openingGcpErrorLab(signal, filePtr); return; case FileRecord::OPENING_TABLE: jam(); openingTableErrorLab(signal, filePtr); return; case FileRecord::TABLE_CREATE: jam(); break; case FileRecord::TABLE_OPEN_FOR_DELETE: jam(); tableDeleteLab(signal, filePtr); return; default: jam(); break; }//switch { char msg[100]; sprintf(msg, "File system open failed during FileRecord status %d", (Uint32)status); fsRefError(signal,__LINE__,msg); } return;}//Dbdih::execFSOPENREF()void Dbdih::execFSREADCONF(Signal* signal) { FileRecordPtr filePtr; jamEntry(); filePtr.i = signal->theData[0]; ptrCheckGuard(filePtr, cfileFileSize, fileRecord); FileRecord::ReqStatus status = filePtr.p->reqStatus; filePtr.p->reqStatus = FileRecord::IDLE; switch (status) { case FileRecord::READING_GCP: jam(); readingGcpLab(signal, filePtr); break; case FileRecord::READING_TABLE: jam(); readingTableLab(signal, filePtr); break; default: ndbrequire(false); break; }//switch return;}//Dbdih::execFSREADCONF()void Dbdih::execFSREADREF(Signal* signal) { FileRecordPtr filePtr; jamEntry(); filePtr.i = signal->theData[0]; ptrCheckGuard(filePtr, cfileFileSize, fileRecord); FileRecord::ReqStatus status = filePtr.p->reqStatus; filePtr.p->reqStatus = FileRecord::IDLE; switch (status) { case FileRecord::READING_GCP: jam(); readingGcpErrorLab(signal, filePtr); return; case FileRecord::READING_TABLE: jam(); readingTableErrorLab(signal, filePtr); return; default: break; }//switch { char msg[100]; sprintf(msg, "File system read failed during FileRecord status %d", (Uint32)status); fsRefError(signal,__LINE__,msg); }}//Dbdih::execFSREADREF()void Dbdih::execFSWRITECONF(Signal* signal) { FileRecordPtr filePtr; jamEntry(); filePtr.i = signal->theData[0]; ptrCheckGuard(filePtr, cfileFileSize, fileRecord); FileRecord::ReqStatus status = filePtr.p->reqStatus; filePtr.p->reqStatus = FileRecord::IDLE; switch (status) { case FileRecord::WRITING_COPY_GCI: jam(); writingCopyGciLab(signal, filePtr); break; case FileRecord::WRITE_INIT_GCP: jam(); writeInitGcpLab(signal, filePtr); break; case FileRecord::TABLE_WRITE: jam(); tableWriteLab(signal, filePtr); break; default: ndbrequire(false); break; }//switch return;}//Dbdih::execFSWRITECONF()void Dbdih::execFSWRITEREF(Signal* signal) { FileRecordPtr filePtr; jamEntry(); filePtr.i = signal->theData[0]; ptrCheckGuard(filePtr, cfileFileSize, fileRecord); FileRecord::ReqStatus status = filePtr.p->reqStatus; filePtr.p->reqStatus = FileRecord::IDLE; switch (status) { case FileRecord::WRITING_COPY_GCI: /* --------------------------------------------------------------------- */ /* EVEN CREATING THE FILE DID NOT WORK. WE WILL THEN CRASH. */ /* ERROR IN WRITING FILE. WE WILL NOT CONTINUE FROM HERE. */ /* --------------------------------------------------------------------- */ jam(); break; case FileRecord::WRITE_INIT_GCP: /* --------------------------------------------------------------------- */ /* AN ERROR OCCURRED IN WRITING A GCI FILE WHICH IS A SERIOUS ERROR */ /* THAT CAUSE A SYSTEM RESTART. */ /* --------------------------------------------------------------------- */ jam(); break; case FileRecord::TABLE_WRITE: jam(); break; default: jam(); break; }//switch { char msg[100]; sprintf(msg, "File system write failed during FileRecord status %d", (Uint32)status); fsRefError(signal,__LINE__,msg); } return;}//Dbdih::execFSWRITEREF()void Dbdih::execGETGCIREQ(Signal* signal) { jamEntry(); Uint32 userPtr = signal->theData[0]; BlockReference userRef = signal->theData[1]; signal->theData[0] = userPtr; signal->theData[1] = SYSFILE->newestRestorableGCI; sendSignal(userRef, GSN_GETGCICONF, signal, 2, JBB);}//Dbdih::execGETGCIREQ()void Dbdih::execREAD_CONFIG_REQ(Signal* signal) { const ReadConfigReq * req = (ReadConfigReq*)signal->getDataPtr(); Uint32 ref = req->senderRef; Uint32 senderData = req->senderData; ndbrequire(req->noOfParameters == 0); jamEntry(); const ndb_mgm_configuration_iterator * p = theConfiguration.getOwnConfigIterator(); ndbrequireErr(p != 0, NDBD_EXIT_INVALID_CONFIG); initData(); ndbrequireErr(!ndb_mgm_get_int_parameter(p, CFG_DIH_API_CONNECT, &capiConnectFileSize), NDBD_EXIT_INVALID_CONFIG); ndbrequireErr(!ndb_mgm_get_int_parameter(p, CFG_DIH_CONNECT, &cconnectFileSize), NDBD_EXIT_INVALID_CONFIG); ndbrequireErr(!ndb_mgm_get_int_parameter(p, CFG_DIH_FRAG_CONNECT, &cfragstoreFileSize), NDBD_EXIT_INVALID_CONFIG); ndbrequireErr(!ndb_mgm_get_int_parameter(p, CFG_DIH_REPLICAS, &creplicaFileSize), NDBD_EXIT_INVALID_CONFIG); ndbrequireErr(!ndb_mgm_get_int_parameter(p, CFG_DIH_TABLE, &ctabFileSize), NDBD_EXIT_INVALID_CONFIG); cfileFileSize = (2 * ctabFileSize) + 2; initRecords(); initialiseRecordsLab(signal, 0, ref, senderData); return;}//Dbdih::execSIZEALT_REP()void Dbdih::execSTART_COPYREF(Signal* signal) { jamEntry(); ndbrequire(false);}//Dbdih::execSTART_COPYREF()void Dbdih::execSTART_FRAGCONF(Signal* signal) { (void)signal; // Don't want compiler warning /* ********************************************************************* */ /* If anyone wants to add functionality in this method, be aware that */ /* for temporary tables no START_FRAGREQ is sent and therefore no */ /* START_FRAGCONF signal will be received for those tables!! */ /* ********************************************************************* */ jamEntry(); return;}//Dbdih::execSTART_FRAGCONF()void Dbdih::execSTART_MEREF(Signal* signal) { jamEntry(); ndbrequire(false);}//Dbdih::execSTART_MEREF()void Dbdih::execTAB_COMMITREQ(Signal* signal) { TabRecordPtr tabPtr; jamEntry(); Uint32 tdictPtr = signal->theData[0]; BlockReference tdictBlockref = signal->theData[1]; tabPtr.i = signal->theData[2]; ptrCheckGuard(tabPtr, ctabFileSize, tabRecord); ndbrequire(tabPtr.p->tabStatus == TabRecord::TS_CREATING); tabPtr.p->tabStatus = TabRecord::TS_ACTIVE; signal->theData[0] = tdictPtr; signal->theData[1] = cownNodeId; signal->theData[2] = tabPtr.i; sendSignal(tdictBlockref, GSN_TAB_COMMITCONF, signal, 3, JBB); return;}//Dbdih::execTAB_COMMITREQ()/* 3.2 S T A N D A R D S U B P R O G R A M S I N P L E X ************************************************************* *//* 3.2.1 S T A R T / R E S T A R T ********************************** *//*****************************************************************************//* ********** START / RESTART MODULE *************//*****************************************************************************//* 3.2.1.1 LOADING O W N B L O C K R E F E R E N C E (ABSOLUTE PHASE 1) ***************************************************************************** */void Dbdih::execDIH_RESTARTREQ(Signal* signal) { jamEntry(); cntrlblockref = signal->theData[0]; if(theConfiguration.getInitialStart()){ sendSignal(cntrlblockref, GSN_DIH_RESTARTREF, signal, 1, JBB); } else { readGciFileLab(signal); } return;}//Dbdih::execDIH_RESTARTREQ()void Dbdih::execSTTOR(Signal* signal) { jamEntry(); signal->theData[0] = 0; signal->theData[1] = 0; signal->theData[2] = 0; signal->theData[3] = 1; // Next start phase signal->theData[4] = 255; // Next start phase sendSignal(NDBCNTR_REF, GSN_STTORRY, signal, 5, JBB); return;}//Dbdih::execSTTOR()void Dbdih::initialStartCompletedLab(Signal* signal) { /*-------------------------------------------------------------------------*/ /* NOW THAT (RE)START IS COMPLETED WE CAN START THE LCP.*/ /*-------------------------------------------------------------------------*/ return;}//Dbdih::initialStartCompletedLab()/* * *************************************************************************** * S E N D I N G R E P L Y T O S T A R T / R E S T A R T R E Q U E S T S * **************************************************************************** */void Dbdih::ndbsttorry10Lab(Signal* signal, Uint32 _line) { /*-------------------------------------------------------------------------*/ // AN NDB START PHASE HAS BEEN COMPLETED. WHEN START PHASE 6 IS COMPLETED WE // RECORD THAT THE SYSTEM IS RUNNING. /*-------------------------------------------------------------------------*/ signal->theData[0] = reference(); sendSignal(cntrlblockref, GSN_NDB_STTORRY, signal, 1, JBB); return;}//Dbdih::ndbsttorry10Lab()/*****************************************I N T E R N A L P H A S E S*****************************************//*---------------------------------------------------------------------------*//*NDB_STTOR START SIGNAL AT START/RESTART *//*---------------------------------------------------------------------------*/void Dbdih::execNDB_STTOR(Signal* signal) { jamEntry(); BlockReference cntrRef = signal->theData[0]; /* SENDERS BLOCK REFERENCE */ Uint32 ownNodeId = signal->theData[1]; /* OWN PROCESSOR ID*/ Uint32 phase = signal->theData[2]; /* INTERNAL START PHASE*/ Uint32 typestart = signal->theData[3];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -