📄 dbdih.hpp
字号:
void creatingGcpLab(Signal *, FileRecordPtr regFilePtr); void openingGcpLab(Signal *, FileRecordPtr regFilePtr); void openingTableLab(Signal *, FileRecordPtr regFilePtr); void tableCreateLab(Signal *, FileRecordPtr regFilePtr); void creatingGcpErrorLab(Signal *, FileRecordPtr regFilePtr); void openingCopyGciErrorLab(Signal *, FileRecordPtr regFilePtr); void creatingCopyGciErrorLab(Signal *, FileRecordPtr regFilePtr); void openingGcpErrorLab(Signal *, FileRecordPtr regFilePtr); void openingTableErrorLab(Signal *, FileRecordPtr regFilePtr); void tableCreateErrorLab(Signal *, FileRecordPtr regFilePtr); void closingGcpLab(Signal *, FileRecordPtr regFilePtr); void closingGcpCrashLab(Signal *, FileRecordPtr regFilePtr); void closingTableCrashLab(Signal *, FileRecordPtr regFilePtr); void closingTableSrLab(Signal *, FileRecordPtr regFilePtr); void tableCloseLab(Signal *, FileRecordPtr regFilePtr); void tableCloseErrorLab(FileRecordPtr regFilePtr); void readingGcpLab(Signal *, FileRecordPtr regFilePtr); void readingTableLab(Signal *, FileRecordPtr regFilePtr); void readingGcpErrorLab(Signal *, FileRecordPtr regFilePtr); void readingTableErrorLab(Signal *, FileRecordPtr regFilePtr); void writingCopyGciLab(Signal *, FileRecordPtr regFilePtr); void writeInitGcpLab(Signal *, FileRecordPtr regFilePtr); void tableWriteLab(Signal *, FileRecordPtr regFilePtr); void writeInitGcpErrorLab(Signal *, FileRecordPtr regFilePtr); void calculateHotSpare(); void checkEscalation(); void clearRestartInfoBits(Signal *); void invalidateLcpInfoAfterSr(); bool isMaster(); bool isActiveMaster(); void emptyverificbuffer(Signal *, bool aContintueB); Uint32 findHotSpare(); void handleGcpStateInMaster(Signal *, NodeRecordPtr failedNodeptr); void initRestartInfo(); void initRestorableGciFiles(); void makeNodeGroups(Uint32 nodeArray[]); void makePrnList(class ReadNodesConf * readNodes, Uint32 nodeArray[]); void nodeResetStart(); void releaseTabPages(Uint32 tableId); void replication(Uint32 noOfReplicas, NodeGroupRecordPtr NGPtr, FragmentstorePtr regFragptr); void selectMasterCandidateAndSend(Signal *); void setInitialActiveStatus(); void setLcpActiveStatusEnd(); void setLcpActiveStatusStart(Signal *); void setNodeActiveStatus(); void setNodeGroups(); void setNodeInfo(Signal *); void setNodeLcpActiveStatus(); void setNodeRestartInfoBits(); void startGcp(Signal *); void readFragment(RWFragment* rf, FragmentstorePtr regFragptr); Uint32 readPageWord(RWFragment* rf); void readReplica(RWFragment* rf, ReplicaRecordPtr readReplicaPtr); void readReplicas(RWFragment* rf, FragmentstorePtr regFragptr); void readRestorableGci(Signal *, FileRecordPtr regFilePtr); void readTabfile(Signal *, TabRecord* tab, FileRecordPtr regFilePtr); void writeFragment(RWFragment* wf, FragmentstorePtr regFragptr); void writePageWord(RWFragment* wf, Uint32 dataWord); void writeReplicas(RWFragment* wf, Uint32 replicaStartIndex); void writeRestorableGci(Signal *, FileRecordPtr regFilePtr); void writeTabfile(Signal *, TabRecord* tab, FileRecordPtr regFilePtr); void copyTabReq_complete(Signal* signal, TabRecordPtr tabPtr); void gcpcommitreqLab(Signal *); void gcpsavereqLab(Signal *); void copyGciLab(Signal *, CopyGCIReq::CopyReason reason); void storeNewLcpIdLab(Signal *); void startLcpRoundLoopLab(Signal *, Uint32 startTableId, Uint32 startFragId); void nodeFailCompletedCheckLab(Signal*, NodeRecordPtr failedNodePtr); /** * */ void setLocalNodefailHandling(Signal*, Uint32 failedNodeId, NodefailHandlingStep step); void checkLocalNodefailComplete(Signal*, Uint32 failedNodeId, NodefailHandlingStep step); void ndbsttorry10Lab(Signal *, Uint32 _line); void createMutexes(Signal* signal, Uint32 no); void createMutex_done(Signal* signal, Uint32 no, Uint32 retVal); void crashSystemAtGcpStop(Signal *); void sendFirstDictfragsreq(Signal *, TabRecordPtr regTabPtr); void addtabrefuseLab(Signal *, ConnectRecordPtr regConnectPtr, Uint32 errorCode); void GCP_SAVEhandling(Signal *, Uint32 nodeId); void packTableIntoPagesLab(Signal *, Uint32 tableId); void readPagesIntoTableLab(Signal *, Uint32 tableId); void readPagesIntoFragLab(Signal *, RWFragment* rf); void readTabDescriptionLab(Signal *, Uint32 tableId); void copyTableLab(Signal *, Uint32 tableId); void breakCopyTableLab(Signal *, TabRecordPtr regTabPtr, Uint32 nodeId); void checkAddfragCompletedLab(Signal *, TabRecordPtr regTabPtr, Uint32 fragId); void completeRestartLab(Signal *); void readTableFromPagesLab(Signal *, TabRecordPtr regTabPtr); void srPhase2ReadTableLab(Signal *, TabRecordPtr regTabPtr); void checkTcCounterLab(Signal *); void calculateKeepGciLab(Signal *, Uint32 tableId, Uint32 fragId); void tableUpdateLab(Signal *, TabRecordPtr regTabPtr); void checkLcpCompletedLab(Signal *); void initLcpLab(Signal *, Uint32 masterRef, Uint32 tableId); void startGcpLab(Signal *, Uint32 aWaitTime); void checkGcpStopLab(Signal *); void MASTER_GCPhandling(Signal *, Uint32 failedNodeId); void MASTER_LCPhandling(Signal *, Uint32 failedNodeId); void rnfTableNotReadyLab(Signal *, TabRecordPtr regTabPtr, Uint32 removeNodeId); void startLcpTakeOverLab(Signal *, Uint32 failedNodeId); void startLcpMasterTakeOver(Signal *, Uint32 failedNodeId); void startGcpMasterTakeOver(Signal *, Uint32 failedNodeId); void checkGcpOutstanding(Signal*, Uint32 failedNodeId); void checkEmptyLcpComplete(Signal *); void lcpBlockedLab(Signal *); void breakCheckTabCompletedLab(Signal *, TabRecordPtr regTabptr); void readGciFileLab(Signal *); void openingCopyGciSkipInitLab(Signal *, FileRecordPtr regFilePtr); void startLcpRoundLab(Signal *); void gcpBlockedLab(Signal *); void initialStartCompletedLab(Signal *); void allNodesLcpCompletedLab(Signal *); void nodeRestartPh2Lab(Signal *); void initGciFilesLab(Signal *); void dictStartConfLab(Signal *); void nodeDictStartConfLab(Signal *); void ndbStartReqLab(Signal *, BlockReference ref); void nodeRestartStartRecConfLab(Signal *); void dihCopyCompletedLab(Signal *); void release_connect(ConnectRecordPtr ptr); void copyTableNode(Signal *, CopyTableNode* ctn, NodeRecordPtr regNodePtr); void startFragment(Signal *, Uint32 tableId, Uint32 fragId); bool checkLcpAllTablesDoneInLqh(); void lcpStateAtNodeFailureLab(Signal *, Uint32 nodeId); void copyNodeLab(Signal *, Uint32 tableId); void copyGciReqLab(Signal *); void allLab(Signal *, ConnectRecordPtr regConnectPtr, TabRecordPtr regTabPtr); void tableCopyNodeLab(Signal *, TabRecordPtr regTabPtr); void removeNodeFromTables(Signal *, Uint32 tableId, Uint32 nodeId); void removeNodeFromTable(Signal *, Uint32 tableId, TabRecordPtr tabPtr); void removeNodeFromTablesComplete(Signal* signal, Uint32 nodeId); void packFragIntoPagesLab(Signal *, RWFragment* wf); void startNextChkpt(Signal *); void failedNodeLcpHandling(Signal*, NodeRecordPtr failedNodePtr); void failedNodeSynchHandling(Signal *, NodeRecordPtr failedNodePtr); void checkCopyTab(NodeRecordPtr failedNodePtr); void initCommonData(); void initialiseRecordsLab(Signal *, Uint32 stepNo, Uint32, Uint32); void findReplica(ReplicaRecordPtr& regReplicaPtr, Fragmentstore* fragPtrP, Uint32 nodeId);//------------------------------------// Node failure handling methods//------------------------------------ void startRemoveFailedNode(Signal *, NodeRecordPtr failedNodePtr); void handleGcpTakeOver(Signal *, NodeRecordPtr failedNodePtr); void handleLcpTakeOver(Signal *, NodeRecordPtr failedNodePtr); void handleNewMaster(Signal *, NodeRecordPtr failedNodePtr); void checkTakeOverInMasterAllNodeFailure(Signal*, NodeRecordPtr failedNode); void checkTakeOverInMasterCopyNodeFailure(Signal*, Uint32 failedNodeId); void checkTakeOverInMasterStartNodeFailure(Signal*, Uint32 takeOverPtr); void checkTakeOverInNonMasterStartNodeFailure(Signal*, Uint32 takeOverPtr); void handleLcpMasterTakeOver(Signal *, Uint32 nodeId);//------------------------------------// Replica record specific methods//------------------------------------ Uint32 findLogInterval(ConstPtr<ReplicaRecord> regReplicaPtr, Uint32 startGci); void findMinGci(ReplicaRecordPtr fmgReplicaPtr, Uint32& keeGci, Uint32& oldestRestorableGci); bool findStartGci(ConstPtr<ReplicaRecord> fstReplicaPtr, Uint32 tfstStopGci, Uint32& tfstStartGci, Uint32& tfstLcp); void newCrashedReplica(Uint32 nodeId, ReplicaRecordPtr ncrReplicaPtr); void packCrashedReplicas(ReplicaRecordPtr pcrReplicaPtr); void releaseReplicas(Uint32 replicaPtr); void removeOldCrashedReplicas(ReplicaRecordPtr rocReplicaPtr); void removeTooNewCrashedReplicas(ReplicaRecordPtr rtnReplicaPtr); void seizeReplicaRec(ReplicaRecordPtr& replicaPtr);//------------------------------------// Methods operating on a fragment and// its connected replicas and nodes.//------------------------------------ void allocStoredReplica(FragmentstorePtr regFragptr, ReplicaRecordPtr& newReplicaPtr, Uint32 nodeId); Uint32 extractNodeInfo(const Fragmentstore * fragPtr, Uint32 nodes[]); bool findBestLogNode(CreateReplicaRecord* createReplica, FragmentstorePtr regFragptr, Uint32 startGci, Uint32 stopGci, Uint32 logNode, Uint32& fblStopGci); bool findLogNodes(CreateReplicaRecord* createReplica, FragmentstorePtr regFragptr, Uint32 startGci, Uint32 stopGci); void findToReplica(TakeOverRecord* regTakeOver, Uint32 replicaType, FragmentstorePtr regFragptr, ReplicaRecordPtr& ftrReplicaPtr); void initFragstore(FragmentstorePtr regFragptr); void insertBackup(FragmentstorePtr regFragptr, Uint32 nodeId); void insertfraginfo(FragmentstorePtr regFragptr, Uint32 noOfBackups, Uint32* nodeArray); void linkOldStoredReplica(FragmentstorePtr regFragptr, ReplicaRecordPtr replicaPtr); void linkStoredReplica(FragmentstorePtr regFragptr, ReplicaRecordPtr replicaPtr); void prepareReplicas(FragmentstorePtr regFragptr); void removeNodeFromStored(Uint32 nodeId, FragmentstorePtr regFragptr, ReplicaRecordPtr replicaPtr, bool temporary); void removeOldStoredReplica(FragmentstorePtr regFragptr, ReplicaRecordPtr replicaPtr); void removeStoredReplica(FragmentstorePtr regFragptr, ReplicaRecordPtr replicaPtr); void searchStoredReplicas(FragmentstorePtr regFragptr); void updateNodeInfo(FragmentstorePtr regFragptr);//------------------------------------// Fragment allocation, deallocation and// find methods//------------------------------------ void allocFragments(Uint32 noOfFragments, TabRecordPtr regTabPtr); void releaseFragments(TabRecordPtr regTabPtr); void getFragstore(TabRecord *, Uint32 fragNo, FragmentstorePtr & ptr); void initialiseFragstore();//------------------------------------// Page Record specific methods//------------------------------------ void allocpage(PageRecordPtr& regPagePtr); void releasePage(Uint32 pageIndex);//------------------------------------// Table Record specific methods//------------------------------------ void initTable(TabRecordPtr regTabPtr); void initTableFile(TabRecordPtr regTabPtr); void releaseTable(TabRecordPtr tabPtr); Uint32 findTakeOver(Uint32 failedNodeId); void handleTakeOverMaster(Signal *, Uint32 takeOverPtr); void handleTakeOverNewMaster(Signal *, Uint32 takeOverPtr);//------------------------------------// TakeOver Record specific methods//------------------------------------ void initTakeOver(TakeOverRecordPtr regTakeOverptr); void seizeTakeOver(TakeOverRecordPtr& regTakeOverptr); void allocateTakeOver(TakeOverRecordPtr& regTakeOverptr); void releaseTakeOver(Uint32 takeOverPtr); bool anyActiveTakeOver(); void checkToCopy(); void checkToCopyCompleted(Signal *); bool checkToInterrupted(TakeOverRecordPtr& regTakeOverptr); Uint32 getStartNode(Uint32 takeOverPtr);//------------------------------------// Methods for take over functionality//------------------------------------ void changeNodeGroups(Uint32 startNode, Uint32 nodeTakenOver); void endTakeOver(Uint32 takeOverPtr); void initStartTakeOver(const class StartToReq *, TakeOverRecordPtr regTakeOverPtr); void nodeRestartTakeOver(Signal *, Uint32 startNodeId); void systemRestartTakeOverLab(Signal *); void startTakeOver(Signal *, Uint32 takeOverPtr, Uint32 startNode, Uint32 toNode); void sendStartTo(Signal *, Uint32 takeOverPtr); void startNextCopyFragment(Signal *, Uint32 takeOverPtr); void toCopyFragLab(Signal *, Uint32 takeOverPtr); void startHsAddFragConfLab(Signal *); void prepareSendCreateFragReq(Signal *, Uint32 takeOverPtr); void sendUpdateTo(Signal *, Uint32 takeOverPtr, Uint32 updateState); void toCopyCompletedLab(Signal *, TakeOverRecordPtr regTakeOverptr); void takeOverCompleted(Uint32 aNodeId); void sendEndTo(Signal *, Uint32 takeOverPtr);//------------------------------------// Node Record specific methods//------------------------------------ void checkStartTakeOver(Signal *); void insertAlive(NodeRecordPtr newNodePtr); void insertDeadNode(NodeRecordPtr removeNodePtr); void removeAlive(NodeRecordPtr removeNodePtr); void removeDeadNode(NodeRecordPtr removeNodePtr); NodeRecord::NodeStatus getNodeStatus(Uint32 nodeId); void setNodeStatus(Uint32 nodeId, NodeRecord::NodeStatus); Sysfile::ActiveStatus getNodeActiveStatus(Uint32 nodeId); void setNodeActiveStatus(Uint32 nodeId, Sysfile::ActiveStatus newStatus); void setNodeLcpActiveStatus(Uint32 nodeId, bool newState); bool getNodeLcpActiveStatus(Uint32 nodeId); bool getAllowNodeStart(Uint32 nodeId); void setAllowNodeStart(Uint32 nodeId, bool newState); bool getNodeCopyCompleted(Uint32 nodeId); void setNodeCopyCompleted(Uint32 nodeId, bool newState); bool checkNodeAlive(Uint32 nodeId); // Initialisation void initData(); void initRecords(); // Variables to support record structures and their free lists ApiConnectRecord *apiConnectRecord; Uint32 capiConnectFileSize; ConnectRecord *connectRecord; Uint32 cfirstconnect; Uint32 cconnectFileSize; CreateReplicaRecord *createReplicaRecord; Uint32 cnoOfCreateReplicas; FileRecord *fileRecord; Uint32 cfirstfreeFile; Uint32 cfileFileSize; Fragmentstore *fragmentstore; Uint32 cfirstfragstore; Uint32 cfragstoreFileSize; Uint32 c_nextNodeGroup; NodeGroupRecord *nodeGroupRecord; NodeRecord *nodeRecord; PageRecord *pageRecord; Uint32 cfirstfreepage; Uint32 cpageFileSize; ReplicaRecord *replicaRecord; Uint32 cfirstfreeReplica; Uint32 cnoFreeReplicaRec; Uint32 creplicaFileSize; TabRecord *tabRecord; Uint32 ctabFileSize; TakeOverRecord *takeOverRecord; Uint32 cfirstfreeTakeOver; /* 2.4 C O M M O N S T O R E D V A R I A B L E S ---------------------------------------------------- */ Uint32 cfirstVerifyQueue; Uint32 clastVerifyQueue; Uint32 cverifyQueueCounter; /*------------------------------------------------------------------------*/ /* THIS VARIABLE KEEPS THE REFERENCES TO FILE RECORDS THAT DESCRIBE */ /* THE TWO FILES THAT ARE USED TO STORE THE VARIABLE CRESTART_INFO */ /* ON DISK. */ /*------------------------------------------------------------------------*/ Uint32 crestartInfoFile[2]; /*------------------------------------------------------------------------*/ /* THIS VARIABLE KEEPS TRACK OF THE STATUS OF A GLOBAL CHECKPOINT */ /* PARTICIPANT. THIS IS NEEDED TO HANDLE A NODE FAILURE. WHEN A NODE*/ /* FAILURE OCCURS IT IS EASY THAT THE PROTOCOL STOPS IF NO ACTION IS*/ /* TAKEN TO PREVENT THIS. THIS VARIABLE ENSURES SUCH ACTION CAN BE */ /* TAKEN. */ /*------------------------------------------------------------------------*/ enum GcpParticipantState { GCP_PARTICIPANT_READY = 0, GCP_PARTICIPANT_PREPARE_RECEIVED = 1, GCP_PARTICIPANT_COMMIT_RECEIVED = 2, GCP_PARTICIPANT_TC_FINISHED = 3, GCP_PARTICIPANT_COPY_GCI_RECEIVED = 4 }; GcpParticipantState cgcpParticipantState; /*------------------------------------------------------------------------*/ /* THESE VARIABLES ARE USED TO CONTROL THAT GCP PROCESSING DO NOT */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -