📄 dbdih.hpp
字号:
Uint8 lcpStatus[MAX_LCP_STORED]; /* -------------------------------------------------------------------- */ /* THE NEXT LOCAL CHECKPOINT TO EXECUTE IN THIS FRAGMENT REPLICA. */ /* -------------------------------------------------------------------- */ Uint8 nextLcp; /* -------------------------------------------------------------------- */ /* THE NUMBER OF CRASHED REPLICAS IN THIS REPLICAS SO FAR. */ /* -------------------------------------------------------------------- */ Uint8 noCrashedReplicas; /** * Is a LCP currently ongoing on fragment */ Uint8 lcpOngoingFlag; }; typedef Ptr<ReplicaRecord> ReplicaRecordPtr; /************************************************************************* * TAB_DESCRIPTOR IS A DESCRIPTOR OF THE LOCATION OF THE FRAGMENTS BELONGING * TO THE TABLE.THE INFORMATION ABOUT FRAGMENTS OF A TABLE ARE STORED IN * CHUNKS OF FRAGMENTSTORE RECORDS. * THIS RECORD ALSO HAS THE NECESSARY INFORMATION TO LOCATE A FRAGMENT AND * TO LOCATE A FRAGMENT AND TO TRANSLATE A KEY OF A TUPLE TO THE FRAGMENT IT * BELONGS */ struct TabRecord { /** * State for copying table description into pages */ enum CopyStatus { CS_IDLE, CS_SR_PHASE1_READ_PAGES, CS_SR_PHASE2_READ_TABLE, CS_SR_PHASE3_COPY_TABLE, CS_REMOVE_NODE, CS_LCP_READ_TABLE, CS_COPY_TAB_REQ, CS_COPY_NODE_STATE, CS_ADD_TABLE_MASTER, CS_ADD_TABLE_SLAVE, CS_INVALIDATE_NODE_LCP }; /** * State for copying pages to disk */ enum UpdateState { US_IDLE, US_LOCAL_CHECKPOINT, US_REMOVE_NODE, US_COPY_TAB_REQ, US_ADD_TABLE_MASTER, US_ADD_TABLE_SLAVE, US_INVALIDATE_NODE_LCP }; enum TabLcpStatus { TLS_ACTIVE = 1, TLS_WRITING_TO_FILE = 2, TLS_COMPLETED = 3 }; enum TabStatus { TS_IDLE = 0, TS_ACTIVE = 1, TS_CREATING = 2, TS_DROPPING = 3 }; enum Method { HASH = 0, NOTDEFINED = 1 }; CopyStatus tabCopyStatus; UpdateState tabUpdateState; TabLcpStatus tabLcpStatus; TabStatus tabStatus; Method method; Uint32 pageRef[8];//-----------------------------------------------------------------------------// Each entry in this array contains a reference to 16 fragment records in a// row. Thus finding the correct record is very quick provided the fragment id.//----------------------------------------------------------------------------- Uint32 startFid[MAX_NDB_NODES]; Uint32 tabFile[2]; Uint32 connectrec; Uint32 hashpointer; Uint32 mask; Uint32 noOfWords; Uint32 schemaVersion; Uint32 tabRemoveNode; Uint32 totalfragments; Uint32 noOfFragChunks; Uint32 tabErrorCode; struct { Uint32 tabUserRef; Uint32 tabUserPtr; } m_dropTab; struct DropTable { Uint32 senderRef; Uint32 senderData; SignalCounter waitDropTabCount; } m_prepDropTab; Uint8 kvalue; Uint8 noOfBackups; Uint8 noPages; Uint8 storedTable; /* 0 IF THE TABLE IS A TEMPORARY TABLE */ Uint16 tableType; Uint16 primaryTableId; }; typedef Ptr<TabRecord> TabRecordPtr; /***************************************************************************/ /* THIS RECORD IS USED TO KEEP TRACK OF TAKE OVER AND STARTING A NODE. */ /* WE KEEP IT IN A RECORD TO ENABLE IT TO BE PARALLELISED IN THE FUTURE. */ /**************************************************************************/ struct TakeOverRecord { enum ToMasterStatus { IDLE = 0, TO_WAIT_START_TAKE_OVER = 1, TO_START_COPY = 2, TO_START_COPY_ONGOING = 3, TO_WAIT_START = 4, STARTING = 5, SELECTING_NEXT = 6, TO_WAIT_PREPARE_CREATE = 9, PREPARE_CREATE = 10, COPY_FRAG = 11, TO_WAIT_UPDATE_TO = 12, TO_UPDATE_TO = 13, COPY_ACTIVE = 14, TO_WAIT_COMMIT_CREATE = 15, LOCK_MUTEX = 23, COMMIT_CREATE = 16, TO_COPY_COMPLETED = 17, WAIT_LCP = 18, TO_END_COPY = 19, TO_END_COPY_ONGOING = 20, TO_WAIT_ENDING = 21, ENDING = 22 }; enum ToSlaveStatus { TO_SLAVE_IDLE = 0, TO_SLAVE_STARTED = 1, TO_SLAVE_CREATE_PREPARE = 2, TO_SLAVE_COPY_FRAG_COMPLETED = 3, TO_SLAVE_CREATE_COMMIT = 4, TO_SLAVE_COPY_COMPLETED = 5 }; Uint32 startGci; Uint32 toCopyNode; Uint32 toCurrentFragid; Uint32 toCurrentReplica; Uint32 toCurrentTabref; Uint32 toFailedNode; Uint32 toStartingNode; Uint32 nextTakeOver; Uint32 prevTakeOver; bool toNodeRestart; ToMasterStatus toMasterStatus; ToSlaveStatus toSlaveStatus; MutexHandle2<DIH_SWITCH_PRIMARY_MUTEX> m_switchPrimaryMutexHandle; }; typedef Ptr<TakeOverRecord> TakeOverRecordPtr; public: Dbdih(const class Configuration &); virtual ~Dbdih(); struct RWFragment { Uint32 pageIndex; Uint32 wordIndex; Uint32 fragId; TabRecordPtr rwfTabPtr; PageRecordPtr rwfPageptr; }; struct CopyTableNode { Uint32 pageIndex; Uint32 wordIndex; Uint32 noOfWords; TabRecordPtr ctnTabPtr; PageRecordPtr ctnPageptr; }; private: BLOCK_DEFINES(Dbdih); void execDUMP_STATE_ORD(Signal *); void execNDB_TAMPER(Signal *); void execDEBUG_SIG(Signal *); void execEMPTY_LCP_CONF(Signal *); void execMASTER_GCPREF(Signal *); void execMASTER_GCPREQ(Signal *); void execMASTER_GCPCONF(Signal *); void execMASTER_LCPREF(Signal *); void execMASTER_LCPREQ(Signal *); void execMASTER_LCPCONF(Signal *); void execNF_COMPLETEREP(Signal *); void execSTART_PERMREQ(Signal *); void execSTART_PERMCONF(Signal *); void execSTART_PERMREF(Signal *); void execINCL_NODEREQ(Signal *); void execINCL_NODECONF(Signal *); void execEND_TOREQ(Signal *); void execEND_TOCONF(Signal *); void execSTART_TOREQ(Signal *); void execSTART_TOCONF(Signal *); void execSTART_MEREQ(Signal *); void execSTART_MECONF(Signal *); void execSTART_MEREF(Signal *); void execSTART_COPYREQ(Signal *); void execSTART_COPYCONF(Signal *); void execSTART_COPYREF(Signal *); void execCREATE_FRAGREQ(Signal *); void execCREATE_FRAGCONF(Signal *); void execDIVERIFYREQ(Signal *); void execGCP_SAVECONF(Signal *); void execGCP_PREPARECONF(Signal *); void execGCP_PREPARE(Signal *); void execGCP_NODEFINISH(Signal *); void execGCP_COMMIT(Signal *); void execDIHNDBTAMPER(Signal *); void execCONTINUEB(Signal *); void execCOPY_GCIREQ(Signal *); void execCOPY_GCICONF(Signal *); void execCOPY_TABREQ(Signal *); void execCOPY_TABCONF(Signal *); void execTCGETOPSIZECONF(Signal *); void execTC_CLOPSIZECONF(Signal *); void execLCP_FRAG_REP(Signal *); void execLCP_COMPLETE_REP(Signal *); void execSTART_LCP_REQ(Signal *); void execSTART_LCP_CONF(Signal *); MutexHandle2<DIH_START_LCP_MUTEX> c_startLcpMutexHandle; void startLcpMutex_locked(Signal* signal, Uint32, Uint32); void startLcpMutex_unlocked(Signal* signal, Uint32, Uint32); MutexHandle2<DIH_SWITCH_PRIMARY_MUTEX> c_switchPrimaryMutexHandle; void switchPrimaryMutex_locked(Signal* signal, Uint32, Uint32); void switchPrimaryMutex_unlocked(Signal* signal, Uint32, Uint32); void switch_primary_stop_node(Signal* signal, Uint32, Uint32); void execBLOCK_COMMIT_ORD(Signal *); void execUNBLOCK_COMMIT_ORD(Signal *); void execDIH_SWITCH_REPLICA_REQ(Signal *); void execDIH_SWITCH_REPLICA_REF(Signal *); void execDIH_SWITCH_REPLICA_CONF(Signal *); void execSTOP_PERM_REQ(Signal *); void execSTOP_PERM_REF(Signal *); void execSTOP_PERM_CONF(Signal *); void execSTOP_ME_REQ(Signal *); void execSTOP_ME_REF(Signal *); void execSTOP_ME_CONF(Signal *); void execREAD_CONFIG_REQ(Signal *); void execUNBLO_DICTCONF(Signal *); void execCOPY_ACTIVECONF(Signal *); void execTAB_COMMITREQ(Signal *); void execNODE_FAILREP(Signal *); void execCOPY_FRAGCONF(Signal *); void execCOPY_FRAGREF(Signal *); void execDIADDTABREQ(Signal *); void execDIGETNODESREQ(Signal *); void execDIRELEASEREQ(Signal *); void execDISEIZEREQ(Signal *); void execSTTOR(Signal *); void execDI_FCOUNTREQ(Signal *); void execDIGETPRIMREQ(Signal *); void execGCP_SAVEREF(Signal *); void execGCP_TCFINISHED(Signal *); void execREAD_NODESCONF(Signal *); void execNDB_STTOR(Signal *); void execDICTSTARTCONF(Signal *); void execNDB_STARTREQ(Signal *); void execGETGCIREQ(Signal *); void execDIH_RESTARTREQ(Signal *); void execSTART_RECCONF(Signal *); void execSTART_FRAGCONF(Signal *); void execADD_FRAGCONF(Signal *); void execADD_FRAGREF(Signal *); void execFSOPENCONF(Signal *); void execFSOPENREF(Signal *); void execFSCLOSECONF(Signal *); void execFSCLOSEREF(Signal *); void execFSREADCONF(Signal *); void execFSREADREF(Signal *); void execFSWRITECONF(Signal *); void execFSWRITEREF(Signal *); void execSET_VAR_REQ(Signal *); void execCHECKNODEGROUPSREQ(Signal *); void execSTART_INFOREQ(Signal*); void execSTART_INFOREF(Signal*); void execSTART_INFOCONF(Signal*); void execWAIT_GCP_REQ(Signal* signal); void execWAIT_GCP_REF(Signal* signal); void execWAIT_GCP_CONF(Signal* signal); void execUPDATE_TOREQ(Signal* signal); void execUPDATE_TOCONF(Signal* signal); void execPREP_DROP_TAB_REQ(Signal* signal); void execWAIT_DROP_TAB_REF(Signal* signal); void execWAIT_DROP_TAB_CONF(Signal* signal); void execDROP_TAB_REQ(Signal* signal); void execALTER_TAB_REQ(Signal* signal); void execCREATE_FRAGMENTATION_REQ(Signal*); void waitDropTabWritingToFile(Signal *, TabRecordPtr tabPtr); void checkPrepDropTabComplete(Signal *, TabRecordPtr tabPtr); void checkWaitDropTabFailedLqh(Signal *, Uint32 nodeId, Uint32 tableId); // Statement blocks//------------------------------------// Methods that send signals//------------------------------------ void nullRoutine(Signal *, Uint32 nodeId); void sendCOPY_GCIREQ(Signal *, Uint32 nodeId); void sendDIH_SWITCH_REPLICA_REQ(Signal *, Uint32 nodeId); void sendEMPTY_LCP_REQ(Signal *, Uint32 nodeId); void sendEND_TOREQ(Signal *, Uint32 nodeId); void sendGCP_COMMIT(Signal *, Uint32 nodeId); void sendGCP_PREPARE(Signal *, Uint32 nodeId); void sendGCP_SAVEREQ(Signal *, Uint32 nodeId); void sendINCL_NODEREQ(Signal *, Uint32 nodeId); void sendMASTER_GCPREQ(Signal *, Uint32 nodeId); void sendMASTER_LCPREQ(Signal *, Uint32 nodeId); void sendMASTER_LCPCONF(Signal * signal); void sendSTART_RECREQ(Signal *, Uint32 nodeId); void sendSTART_INFOREQ(Signal *, Uint32 nodeId); void sendSTART_TOREQ(Signal *, Uint32 nodeId); void sendSTOP_ME_REQ(Signal *, Uint32 nodeId); void sendTC_CLOPSIZEREQ(Signal *, Uint32 nodeId); void sendTCGETOPSIZEREQ(Signal *, Uint32 nodeId); void sendUPDATE_TOREQ(Signal *, Uint32 nodeId); void sendSTART_LCP_REQ(Signal *, Uint32 nodeId); void sendLCP_FRAG_ORD(Signal*, NodeRecord::FragmentCheckpointInfo info); void sendLastLCP_FRAG_ORD(Signal *); void sendCopyTable(Signal *, CopyTableNode* ctn, BlockReference ref, Uint32 reqinfo); void sendCreateFragReq(Signal *, Uint32 startGci, Uint32 storedType, Uint32 takeOverPtr); void sendDihfragreq(Signal *, TabRecordPtr regTabPtr, Uint32 fragId); void sendStartFragreq(Signal *, TabRecordPtr regTabPtr, Uint32 fragId); void sendHOT_SPAREREP(Signal *); void sendAddFragreq(Signal *, TabRecordPtr regTabPtr, Uint32 fragId, Uint32 lcpNo, Uint32 param); void sendAddFragreq(Signal*, ConnectRecordPtr, TabRecordPtr, Uint32 fragId); void addTable_closeConf(Signal* signal, Uint32 tabPtrI); void resetReplicaSr(TabRecordPtr tabPtr); void resetReplicaLcp(ReplicaRecord * replicaP, Uint32 stopGci);//------------------------------------// Methods for LCP functionality//------------------------------------ void checkKeepGci(TabRecordPtr, Uint32, Fragmentstore*, Uint32); void checkLcpStart(Signal *, Uint32 lineNo); void checkStartMoreLcp(Signal *, Uint32 nodeId); bool reportLcpCompletion(const class LcpFragRep *); void sendLCP_COMPLETE_REP(Signal *);//------------------------------------// Methods for Delete Table Files//------------------------------------ void startDeleteFile(Signal* signal, TabRecordPtr tabPtr); void openTableFileForDelete(Signal* signal, Uint32 fileIndex); void tableOpenLab(Signal* signal, FileRecordPtr regFilePtr); void tableDeleteLab(Signal* signal, FileRecordPtr regFilePtr);//------------------------------------// File Record specific methods//------------------------------------ void closeFile(Signal *, FileRecordPtr regFilePtr); void closeFileDelete(Signal *, FileRecordPtr regFilePtr); void createFileRw(Signal *, FileRecordPtr regFilePtr); void openFileRw(Signal *, FileRecordPtr regFilePtr); void openFileRo(Signal *, FileRecordPtr regFilePtr); void seizeFile(FileRecordPtr& regFilePtr); void releaseFile(Uint32 fileIndex);//------------------------------------// Methods called when completing file// operation.//------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -