📄 dbtc.hpp
字号:
// State of this scan ScanState scanState; DLList<ScanFragRec>::Head m_running_scan_frags; // Currently in LQH union { Uint32 m_queued_count; Uint32 scanReceivedOperations; }; DLList<ScanFragRec>::Head m_queued_scan_frags; // In TC !sent to API DLList<ScanFragRec>::Head m_delivered_scan_frags;// Delivered to API // Id of the next fragment to be scanned. Used by scan fragment // processes when they are ready for the next fragment Uint32 scanNextFragId; // Total number of fragments in the table we are scanning Uint32 scanNoFrag; // Index of next ScanRecords when in free list Uint32 nextScan; // Length of expected attribute information union { Uint32 scanAiLength; Uint32 m_booked_fragments_count; }; Uint32 scanKeyLen; // Reference to ApiConnectRecord Uint32 scanApiRec; // Reference to TcConnectRecord Uint32 scanTcrec; // Number of scan frag processes that belong to this scan Uint32 scanParallel; // Schema version used by this scan Uint32 scanSchemaVersion; // Index of stored procedure belonging to this scan Uint32 scanStoredProcId; // The index of table that is scanned Uint32 scanTableref; // Number of operation records per scanned fragment // Number of operations in first batch // Max number of bytes per batch union { Uint16 first_batch_size_rows; Uint16 batch_size_rows; }; Uint32 batch_byte_size; Uint32 scanRequestInfo; // ScanFrag format // Close is ordered bool m_close_scan_req; }; typedef Ptr<ScanRecord> ScanRecordPtr; /* **********************************************************************$ */ /* ******$ DATA BUFFER ******$ */ /* */ /* THIS BUFFER IS USED AS A GENERAL DATA STORAGE. */ /* **********************************************************************$ */ struct DatabufRecord { UintR data[4]; /* 4 * 1 WORD = 4 WORD */ UintR nextDatabuf; }; /* p2c: size = 20 bytes */ typedef Ptr<DatabufRecord> DatabufRecordPtr; /* **********************************************************************$ */ /* ******$ ATTRIBUTE INFORMATION RECORD ******$ */ /* * CAN CONTAIN ONE (1) ATTRINFO SIGNAL. ONE SIGNAL CONTAINS 24 ATTR. * INFO WORDS. BUT 32 ELEMENTS ARE USED TO MAKE PLEX HAPPY. * SOME OF THE ELEMENTS ARE USED TO THE FOLLOWING THINGS: * DATA LENGHT IN THIS RECORD IS STORED IN THE ELEMENT INDEXED BY * ZINBUF_DATA_LEN. * NEXT FREE ATTRBUF IS POINTED OUT BY THE ELEMENT INDEXED BY * PREVIOUS ATTRBUF IS POINTED OUT BY THE ELEMENT INDEXED BY ZINBUF_PREV * (NOT USED YET). * NEXT ATTRBUF IS POINTED OUT BY THE ELEMENT INDEXED BY ZINBUF_NEXT. */ /* ******************************************************************** */ struct AttrbufRecord { UintR attrbuf[32]; }; /* p2c: size = 128 bytes */ typedef Ptr<AttrbufRecord> AttrbufRecordPtr; /*************************************************************************>*/ /* GLOBAL CHECKPOINT INFORMATION RECORD */ /* */ /* THIS RECORD IS USED TO STORE THE GLOBALCHECKPOINT NUMBER AND A * COUNTER DURING THE COMPLETION PHASE OF THE TRANSACTION */ /*************************************************************************>*/ /* */ /* GCP RECORD ALIGNED TO BE 32 BYTES */ /*************************************************************************>*/ struct GcpRecord { UintR gcpUnused1[2]; /* p2c: Not used */ UintR firstApiConnect; UintR lastApiConnect; UintR gcpId; UintR nextGcp; UintR gcpUnused2; /* p2c: Not used */ Uint16 gcpNomoretransRec; }; /* p2c: size = 32 bytes */ typedef Ptr<GcpRecord> GcpRecordPtr; /*************************************************************************>*/ /* TC_FAIL_RECORD */ /* THIS RECORD IS USED WHEN HANDLING TAKE OVER OF ANOTHER FAILED * TC NODE. */ /*************************************************************************>*/ struct TcFailRecord { Uint16 queueList[MAX_NDB_NODES]; Uint8 takeOverProcState[MAX_NDB_NODES]; UintR completedTakeOver; UintR currentHashIndexTakeOver; FailState failStatus; Uint16 queueIndex; Uint16 takeOverNode; }; /* p2c: size = 64 bytes */ typedef Ptr<TcFailRecord> TcFailRecordPtr;public: Dbtc(const class Configuration &); virtual ~Dbtc();private: BLOCK_DEFINES(Dbtc); // Transit signals void execPACKED_SIGNAL(Signal* signal); void execABORTED(Signal* signal); void execATTRINFO(Signal* signal); void execCONTINUEB(Signal* signal); void execKEYINFO(Signal* signal); void execSCAN_NEXTREQ(Signal* signal); void execSCAN_PROCREQ(Signal* signal); void execSCAN_PROCCONF(Signal* signal); void execTAKE_OVERTCREQ(Signal* signal); void execTAKE_OVERTCCONF(Signal* signal); void execLQHKEYREF(Signal* signal); void execTRANSID_AI_R(Signal* signal); void execKEYINFO20_R(Signal* signal); // Received signals void execDUMP_STATE_ORD(Signal* signal); void execSEND_PACKED(Signal* signal); void execCOMPLETED(Signal* signal); void execCOMMITTED(Signal* signal); void execDIGETNODESREF(Signal* signal); void execDIGETPRIMCONF(Signal* signal); void execDIGETPRIMREF(Signal* signal); void execDISEIZECONF(Signal* signal); void execDIVERIFYCONF(Signal* signal); void execDI_FCOUNTCONF(Signal* signal); void execDI_FCOUNTREF(Signal* signal); void execGCP_NOMORETRANS(Signal* signal); void execLQHKEYCONF(Signal* signal); void execNDB_STTOR(Signal* signal); void execREAD_NODESCONF(Signal* signal); void execREAD_NODESREF(Signal* signal); void execSTTOR(Signal* signal); void execTC_COMMITREQ(Signal* signal); void execTC_CLOPSIZEREQ(Signal* signal); void execTCGETOPSIZEREQ(Signal* signal); void execTCKEYREQ(Signal* signal); void execTCRELEASEREQ(Signal* signal); void execTCSEIZEREQ(Signal* signal); void execTCROLLBACKREQ(Signal* signal); void execTC_HBREP(Signal* signal); void execTC_SCHVERREQ(Signal* signal); void execSCAN_TABREQ(Signal* signal); void execSCAN_TABINFO(Signal* signal); void execSCAN_FRAGCONF(Signal* signal); void execSCAN_FRAGREF(Signal* signal); void execREAD_CONFIG_REQ(Signal* signal); void execLQH_TRANSCONF(Signal* signal); void execCOMPLETECONF(Signal* signal); void execCOMMITCONF(Signal* signal); void execABORTCONF(Signal* signal); void execNODE_FAILREP(Signal* signal); void execINCL_NODEREQ(Signal* signal); void execTIME_SIGNAL(Signal* signal); void execAPI_FAILREQ(Signal* signal); void execSCAN_HBREP(Signal* signal); void execSET_VAR_REQ(Signal* signal); void execABORT_ALL_REQ(Signal* signal); void execCREATE_TRIG_REQ(Signal* signal); void execDROP_TRIG_REQ(Signal* signal); void execFIRE_TRIG_ORD(Signal* signal); void execTRIG_ATTRINFO(Signal* signal); void execCREATE_INDX_REQ(Signal* signal); void execDROP_INDX_REQ(Signal* signal); void execTCINDXREQ(Signal* signal); void execINDXKEYINFO(Signal* signal); void execINDXATTRINFO(Signal* signal); void execALTER_INDX_REQ(Signal* signal); // Index table lookup void execTCKEYCONF(Signal* signal); void execTCKEYREF(Signal* signal); void execTRANSID_AI(Signal* signal); void execTCROLLBACKREP(Signal* signal); void execCREATE_TAB_REQ(Signal* signal); void execPREP_DROP_TAB_REQ(Signal* signal); void execDROP_TAB_REQ(Signal* signal); void execWAIT_DROP_TAB_REF(Signal* signal); void execWAIT_DROP_TAB_CONF(Signal* signal); void checkWaitDropTabFailedLqh(Signal*, Uint32 nodeId, Uint32 tableId); void execALTER_TAB_REQ(Signal* signal); void set_timeout_value(Uint32 timeOut); void set_appl_timeout_value(Uint32 timeOut); void set_no_parallel_takeover(Uint32); void updateBuddyTimer(ApiConnectRecordPtr); // Statement blocks void updatePackedList(Signal* signal, HostRecord* ahostptr, Uint16 ahostIndex); void clearTcNodeData(Signal* signal, UintR TLastLqhIndicator, UintR Tstart); void errorReport(Signal* signal, int place); void warningReport(Signal* signal, int place); void printState(Signal* signal, int place); int seizeTcRecord(Signal* signal); int seizeCacheRecord(Signal* signal); void TCKEY_abort(Signal* signal, int place); void copyFromToLen(UintR* sourceBuffer, UintR* destBuffer, UintR copyLen); void reportNodeFailed(Signal* signal, Uint32 nodeId); void sendPackedTCKEYCONF(Signal* signal, HostRecord * ahostptr, UintR hostId); void sendPackedTCINDXCONF(Signal* signal, HostRecord * ahostptr, UintR hostId); void sendPackedSignalLqh(Signal* signal, HostRecord * ahostptr); void sendCommitLqh(Signal* signal, TcConnectRecord * const regTcPtr); void sendCompleteLqh(Signal* signal, TcConnectRecord * const regTcPtr); void sendTCKEY_FAILREF(Signal* signal, const ApiConnectRecord *); void sendTCKEY_FAILCONF(Signal* signal, ApiConnectRecord *); void checkStartTimeout(Signal* signal); void checkStartFragTimeout(Signal* signal); void timeOutFoundFragLab(Signal* signal, Uint32 TscanConPtr); void timeOutLoopStartFragLab(Signal* signal, Uint32 TscanConPtr); int releaseAndAbort(Signal* signal); void findApiConnectFail(Signal* signal); void findTcConnectFail(Signal* signal); void initApiConnectFail(Signal* signal); void initTcConnectFail(Signal* signal); void initTcFail(Signal* signal); void releaseTakeOver(Signal* signal); void setupFailData(Signal* signal); void updateApiStateFail(Signal* signal); void updateTcStateFail(Signal* signal); void handleApiFailState(Signal* signal, UintR anApiConnectptr); void handleFailedApiNode(Signal* signal, UintR aFailedNode, UintR anApiConnectPtr); void handleScanStop(Signal* signal, UintR aFailedNode); void initScanTcrec(Signal* signal); void initScanrec(ScanRecordPtr, const class ScanTabReq*, const UintR scanParallel, const UintR noOprecPerFrag); void initScanfragrec(Signal* signal); void releaseScanResources(ScanRecordPtr, bool not_started = false); ScanRecordPtr seizeScanrec(Signal* signal); void sendScanFragReq(Signal*, ScanRecord*, ScanFragRec*); void sendScanTabConf(Signal* signal, ScanRecordPtr); void close_scan_req(Signal*, ScanRecordPtr, bool received_req); void close_scan_req_send_conf(Signal*, ScanRecordPtr); void checkGcp(Signal* signal); void commitGciHandling(Signal* signal, UintR Tgci); void copyApi(Signal* signal); void DIVER_node_fail_handling(Signal* signal, UintR Tgci); void gcpTcfinished(Signal* signal); void handleGcp(Signal* signal); void hash(Signal* signal); bool handle_special_hash(Uint32 dstHash[4], Uint32* src, Uint32 srcLen, Uint32 tabPtrI, bool distr); void initApiConnect(Signal* signal); void initApiConnectRec(Signal* signal, ApiConnectRecord * const regApiPtr, bool releaseIndexOperations = false); void initattrbuf(Signal* signal); void initdatabuf(Signal* signal); void initgcp(Signal* signal); void inithost(Signal* signal); void initialiseScanrec(Signal* signal); void initialiseScanFragrec(Signal* signal); void initialiseScanOprec(Signal* signal); void initTable(Signal* signal); void initialiseTcConnect(Signal* signal); void linkApiToGcp(Signal* signal); void linkGciInGcilist(Signal* signal); void linkKeybuf(Signal* signal); void linkTcInConnectionlist(Signal* signal); void releaseAbortResources(Signal* signal); void releaseApiCon(Signal* signal, UintR aApiConnectPtr); void releaseApiConCopy(Signal* signal); void releaseApiConnectFail(Signal* signal); void releaseAttrinfo(); void releaseGcp(Signal* signal); void releaseKeys(); void releaseSimpleRead(Signal*, ApiConnectRecordPtr, TcConnectRecord*); void releaseDirtyWrite(Signal* signal); void releaseTcCon(); void releaseTcConnectFail(Signal* signal); void releaseTransResources(Signal* signal); void saveAttrbuf(Signal* signal); void seizeApiConnect(Signal* signal); void seizeApiConnectCopy(Signal* signal); void seizeApiConnectFail(Signal* signal); void seizeDatabuf(Signal* signal); void seizeGcp(Signal* signal); void seizeTcConnect(Signal* signal); void seizeTcConnectFail(Signal* signal); void sendApiCommit(Signal* signal); void sendAttrinfo(Signal* signal, UintR TattrinfoPtr, AttrbufRecord * const regAttrPtr, UintR TBref); void sendContinueTimeOutControl(Signal* signal, Uint32 TapiConPtr); void sendKeyinfo(Signal* signal, BlockReference TBRef, Uint32 len); void sendlqhkeyreq(Signal* signal, BlockReference TBRef); void sendSystemError(Signal* signal, int line); void sendtckeyconf(Signal* signal, UintR TcommitFlag); void sendTcIndxConf(Signal* signal, UintR TcommitFlag); void unlinkApiConnect(Signal* signal); void unlinkGcp(Signal* signal); void unlinkReadyTcCon(Signal* signal); void handleFailedOperation(Signal* signal, const LqhKeyRef * const lqhKeyRef, bool gotLqhKeyRef); void markOperationAborted(ApiConnectRecord * const regApiPtr, TcConnectRecord * const regTcPtr); void clearCommitAckMarker(ApiConnectRecord * const regApiPtr, TcConnectRecord * const regTcPtr); // Trigger and index handling bool saveINDXKEYINFO(Signal* signal, TcIndexOperation* indexOp, const Uint32 *src, Uint32 len); bool receivedAllINDXKEYINFO(TcIndexOperation* indexOp); bool saveINDXATTRINFO(Signal* signal, TcIndexOperation* indexOp, const Uint32 *src, Uint32 len); bool receivedAllINDXATTRINFO(TcIndexOperation* indexOp); bool saveTRANSID_AI(Signal* signal, TcIndexOperation* indexOp, const Uint32 *src, Uint32 len); bool receivedAllTRANSID_AI(TcIndexOperation* indexOp); void readIndexTable(Signal* signal, ApiConnectRecord* regApiPtr, TcIndexOperation* indexOp); void executeIndexOperation(Signal* signal, ApiConnectRecord* regApiPtr, TcIndexOperation* indexOp); bool seizeIndexOperation(ApiConnectRecord* regApiPtr, TcIndexOperationPtr& indexOpPtr); void releaseIndexOperation(ApiConnectRecord* regApiPtr, TcIndexOperation* indexOp); void releaseAllSeizedIndexOperations(ApiConnectRecord* regApiPtr);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -