📄 dbtc.hpp
字号:
void setupIndexOpReturn(ApiConnectRecord* regApiPtr, TcConnectRecord* regTcPtr); void saveTriggeringOpState(Signal* signal, TcConnectRecord* trigOp); void restoreTriggeringOpState(Signal* signal, TcConnectRecord* trigOp); void continueTriggeringOp(Signal* signal, TcConnectRecord* trigOp); void scheduleFiredTrigger(ApiConnectRecordPtr* transPtr, TcConnectRecordPtr* opPtr); void executeTriggers(Signal* signal, ApiConnectRecordPtr* transPtr); void executeTrigger(Signal* signal, TcFiredTriggerData* firedTriggerData, ApiConnectRecordPtr* transPtr, TcConnectRecordPtr* opPtr); void executeIndexTrigger(Signal* signal, TcDefinedTriggerData* definedTriggerData, TcFiredTriggerData* firedTriggerData, ApiConnectRecordPtr* transPtr, TcConnectRecordPtr* opPtr); void insertIntoIndexTable(Signal* signal, TcFiredTriggerData* firedTriggerData, ApiConnectRecordPtr* transPtr, TcConnectRecordPtr* opPtr, TcIndexData* indexData, bool holdOperation = false); void deleteFromIndexTable(Signal* signal, TcFiredTriggerData* firedTriggerData, ApiConnectRecordPtr* transPtr, TcConnectRecordPtr* opPtr, TcIndexData* indexData, bool holdOperation = false); void releaseFiredTriggerData(DLFifoList<TcFiredTriggerData>* triggers); // Generated statement blocks void warningHandlerLab(Signal* signal, int line); void systemErrorLab(Signal* signal, int line); void sendSignalErrorRefuseLab(Signal* signal); void scanTabRefLab(Signal* signal, Uint32 errCode); void diFcountReqLab(Signal* signal, ScanRecordPtr); void signalErrorRefuseLab(Signal* signal); void abort080Lab(Signal* signal); void packKeyData000Lab(Signal* signal, BlockReference TBRef, Uint32 len); void abortScanLab(Signal* signal, ScanRecordPtr, Uint32 errCode, bool not_started = false); void sendAbortedAfterTimeout(Signal* signal, int Tcheck); void abort010Lab(Signal* signal); void abort015Lab(Signal* signal); void packLqhkeyreq(Signal* signal, BlockReference TBRef); void packLqhkeyreq040Lab(Signal* signal, UintR anAttrBufIndex, BlockReference TBRef); void packLqhkeyreq040Lab(Signal* signal); void returnFromQueuedDeliveryLab(Signal* signal); void startTakeOverLab(Signal* signal); void toCompleteHandlingLab(Signal* signal); void toCommitHandlingLab(Signal* signal); void toAbortHandlingLab(Signal* signal); void abortErrorLab(Signal* signal); void nodeTakeOverCompletedLab(Signal* signal); void ndbsttorry010Lab(Signal* signal); void commit020Lab(Signal* signal); void complete010Lab(Signal* signal); void releaseAtErrorLab(Signal* signal); void seizeDatabuferrorLab(Signal* signal); void scanAttrinfoLab(Signal* signal, UintR Tlen); void seizeAttrbuferrorLab(Signal* signal); void attrinfoDihReceivedLab(Signal* signal); void aiErrorLab(Signal* signal); void attrinfo020Lab(Signal* signal); void scanReleaseResourcesLab(Signal* signal); void scanCompletedLab(Signal* signal); void scanError(Signal* signal, ScanRecordPtr, Uint32 errorCode); void diverify010Lab(Signal* signal); void intstartphase2x010Lab(Signal* signal); void intstartphase3x010Lab(Signal* signal); void sttorryLab(Signal* signal); void abortBeginErrorLab(Signal* signal); void tabStateErrorLab(Signal* signal); void wrongSchemaVersionErrorLab(Signal* signal); void noFreeConnectionErrorLab(Signal* signal); void tckeyreq050Lab(Signal* signal); void timeOutFoundLab(Signal* signal, UintR anAdd, Uint32 errCode); void completeTransAtTakeOverLab(Signal* signal, UintR TtakeOverInd); void completeTransAtTakeOverDoLast(Signal* signal, UintR TtakeOverInd); void completeTransAtTakeOverDoOne(Signal* signal, UintR TtakeOverInd); void timeOutLoopStartLab(Signal* signal, Uint32 apiConnectPtr); void initialiseRecordsLab(Signal* signal, UintR Tdata0, Uint32, Uint32); void tckeyreq020Lab(Signal* signal); void intstartphase2x020Lab(Signal* signal); void intstartphase1x010Lab(Signal* signal); void startphase1x010Lab(Signal* signal); void lqhKeyConf_checkTransactionState(Signal * signal, ApiConnectRecord * const regApiPtr); void checkDropTab(Signal* signal); void checkScanActiveInFailedLqh(Signal* signal, Uint32 scanPtrI, Uint32 failedNodeId); void checkScanFragList(Signal*, Uint32 failedNodeId, ScanRecord * scanP, LocalDLList<ScanFragRec>::Head&); void nodeFailCheckTransactions(Signal*,Uint32 transPtrI,Uint32 failedNodeId); void checkNodeFailComplete(Signal* signal, Uint32 failedNodeId, Uint32 bit); // Initialisation void initData(); void initRecords(); // Transit signals ApiConnectRecord *apiConnectRecord; ApiConnectRecordPtr apiConnectptr; UintR capiConnectFilesize; TcConnectRecord *tcConnectRecord; TcConnectRecordPtr tcConnectptr; UintR ctcConnectFilesize; CacheRecord *cacheRecord; CacheRecordPtr cachePtr; UintR ccacheFilesize; AttrbufRecord *attrbufRecord; AttrbufRecordPtr attrbufptr; UintR cattrbufFilesize; HostRecord *hostRecord; HostRecordPtr hostptr; UintR chostFilesize; NdbNodeBitmask c_alive_nodes; GcpRecord *gcpRecord; GcpRecordPtr gcpPtr; UintR cgcpFilesize; TableRecord *tableRecord; UintR ctabrecFilesize; UintR thashValue; UintR tdistrHashValue; UintR ttransid_ptr; UintR cfailure_nr; UintR coperationsize; UintR ctcTimer; ApiConnectRecordPtr tmpApiConnectptr; UintR tcheckGcpId; struct TransCounters { enum { Off, Timer, Started } c_trans_status; UintR cattrinfoCount; UintR ctransCount; UintR ccommitCount; UintR creadCount; UintR csimpleReadCount; UintR cwriteCount; UintR cabortCount; UintR cconcurrentOp; Uint32 c_scan_count; Uint32 c_range_scan_count; void reset () { cattrinfoCount = ctransCount = ccommitCount = creadCount = csimpleReadCount = cwriteCount = cabortCount = c_scan_count = c_range_scan_count = 0; } Uint32 report(Signal* signal){ signal->theData[0] = NDB_LE_TransReportCounters; signal->theData[1] = ctransCount; signal->theData[2] = ccommitCount; signal->theData[3] = creadCount; signal->theData[4] = csimpleReadCount; signal->theData[5] = cwriteCount; signal->theData[6] = cattrinfoCount; signal->theData[7] = cconcurrentOp; signal->theData[8] = cabortCount; signal->theData[9] = c_scan_count; signal->theData[10] = c_range_scan_count; return 11; } } c_counters; Uint16 cownNodeid; Uint16 terrorCode; UintR cfirstfreeAttrbuf; UintR cfirstfreeTcConnect; UintR cfirstfreeApiConnectCopy; UintR cfirstfreeCacheRec; UintR cfirstgcp; UintR clastgcp; UintR cfirstfreeGcp; UintR cfirstfreeScanrec; TableRecordPtr tabptr; UintR cfirstfreeApiConnectFail; UintR cfirstfreeApiConnect; UintR cfirstfreeDatabuf; BlockReference cdihblockref; BlockReference cownref; /* OWN BLOCK REFERENCE */ ApiConnectRecordPtr timeOutptr; ScanRecord *scanRecord; UintR cscanrecFileSize; UnsafeArrayPool<ScanFragRec> c_scan_frag_pool; ScanFragRecPtr scanFragptr; UintR cscanFragrecFileSize; UintR cdatabufFilesize; BlockReference cdictblockref; BlockReference cerrorBlockref; BlockReference clqhblockref; BlockReference cndbcntrblockref; Uint16 csignalKey; Uint16 csystemnodes; Uint16 cnodes[4]; NodeId cmasterNodeId; UintR cnoParallelTakeOver; TimeOutCheckState ctimeOutCheckFragActive; UintR ctimeOutCheckFragCounter; UintR ctimeOutCheckCounter; UintR ctimeOutValue; UintR ctimeOutCheckDelay; Uint32 ctimeOutCheckHeartbeat; Uint32 ctimeOutCheckLastHeartbeat; Uint32 ctimeOutMissedHeartbeats; Uint32 c_appl_timeout_value; SystemStartState csystemStart; TimeOutCheckState ctimeOutCheckActive; BlockReference capiFailRef; UintR cpackedListIndex; Uint16 cpackedList[MAX_NODES]; UintR capiConnectClosing[MAX_NODES]; UintR con_lineNodes; DatabufRecord *databufRecord; DatabufRecordPtr databufptr; DatabufRecordPtr tmpDatabufptr; UintR treqinfo; UintR ttransid1; UintR ttransid2; UintR tabortInd; NodeId tnodeid; BlockReference tblockref; LqhTransConf::OperationStatus ttransStatus; UintR ttcOprec; NodeId tfailedNodeId; Uint8 tcurrentReplicaNo; Uint8 tpad1; UintR tgci; UintR tapplRef; UintR tapplOprec; UintR tindex; UintR tmaxData; UintR tmp; UintR tnodes; BlockReference tusersblkref; UintR tuserpointer; UintR tloadCode; UintR tconfig1; UintR tconfig2; UintR cdata[32]; UintR ctransidFailHash[512]; UintR ctcConnectFailHash[1024]; /** * Commit Ack handling */public: struct CommitAckMarker { Uint32 transid1; Uint32 transid2; union { Uint32 nextPool; Uint32 nextHash; }; Uint32 prevHash; Uint32 apiConnectPtr; Uint16 apiNodeId; Uint16 noOfLqhs; Uint16 lqhNodeId[MAX_REPLICAS]; inline bool equal(const CommitAckMarker & p) const { return ((p.transid1 == transid1) && (p.transid2 == transid2)); } inline Uint32 hashValue() const { return transid1; } };private: typedef Ptr<CommitAckMarker> CommitAckMarkerPtr; typedef DLHashTable<CommitAckMarker>::Iterator CommitAckMarkerIterator; ArrayPool<CommitAckMarker> m_commitAckMarkerPool; DLHashTable<CommitAckMarker> m_commitAckMarkerHash; void execTC_COMMIT_ACK(Signal* signal); void sendRemoveMarkers(Signal*, const CommitAckMarker *); void sendRemoveMarker(Signal* signal, NodeId nodeId, Uint32 transid1, Uint32 transid2); void removeMarkerForFailedAPI(Signal* signal, Uint32 nodeId, Uint32 bucket); bool getAllowStartTransaction() const { if(getNodeState().getSingleUserMode()) return true; return getNodeState().startLevel < NodeState::SL_STOPPING_2; } void checkAbortAllTimeout(Signal* signal, Uint32 sleepTime); struct AbortAllRecord { AbortAllRecord(){ clientRef = 0; } Uint32 clientData; BlockReference clientRef; Uint32 oldTimeOutValue; }; AbortAllRecord c_abortRec; /************************** API CONNECT RECORD ***********************/ /* *******************************************************************/ /* THE API CONNECT RECORD CONTAINS THE CONNECTION RECORD TO WHICH THE*/ /* APPLICATION CONNECTS. THE APPLICATION CAN SEND ONE OPERATION AT A */ /* TIME. IT CAN SEND A NEW OPERATION IMMEDIATELY AFTER SENDING THE */ /* PREVIOUS OPERATION. THEREBY SEVERAL OPERATIONS CAN BE ACTIVE IN */ /* ONE TRANSACTION WITHIN TC. THIS IS ACHIEVED BY USING THE API */ /* CONNECT RECORD. EACH ACTIVE OPERATION IS HANDLED BY THE TC */ /* CONNECT RECORD. AS SOON AS THE TC CONNECT RECORD HAS SENT THE */ /* REQUEST TO THE LQH IT IS READY TO RECEIVE NEW OPERATIONS. THE */ /* LQH CONNECT RECORD TAKES CARE OF WAITING FOR AN OPERATION TO */ /* COMPLETE. WHEN AN OPERATION HAS COMPLETED ON THE LQH CONNECT */ /* RECORD A NEW OPERATION CAN BE STARTED ON THIS LQH CONNECT RECORD. */ /*******************************************************************>*/ /* */ /* API CONNECT RECORD ALIGNED TO BE 256 BYTES */ /*******************************************************************>*/ /************************** TC CONNECT RECORD ************************/ /* *******************************************************************/ /* TC CONNECT RECORD KEEPS ALL INFORMATION TO CARRY OUT A TRANSACTION*/ /* THE TRANSACTION CONTROLLER ESTABLISHES CONNECTIONS TO DIFFERENT */ /* BLOCKS TO CARRY OUT THE TRANSACTION. THERE CAN BE SEVERAL RECORDS */ /* PER ACTIVE TRANSACTION. THE TC CONNECT RECORD COOPERATES WITH THE */ /* API CONNECT RECORD FOR COMMUNICATION WITH THE API AND WITH THE */ /* LQH CONNECT RECORD FOR COMMUNICATION WITH THE LQH'S INVOLVED IN */ /* THE TRANSACTION. TC CONNECT RECORD IS PERMANENTLY CONNECTED TO A */ /* RECORD IN DICT AND ONE IN DIH. IT CONTAINS A LIST OF ACTIVE LQH */ /* CONNECT RECORDS AND A LIST OF STARTED BUT NOT ACTIVE LQH CONNECT */ /* RECORDS. IT DOES ALSO CONTAIN A LIST OF ALL OPERATIONS THAT ARE */ /* EXECUTED WITH THE TC CONNECT RECORD. */ /*******************************************************************>*/ /* TC_CONNECT RECORD ALIGNED TO BE 128 BYTES */ /*******************************************************************>*/ UintR cfirstfreeTcConnectFail; /* POINTER FOR THE LQH RECORD*/ /* ************************ HOS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -