📄 dbtc.hpp
字号:
/* Copyright (C) 2003 MySQL AB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */#ifndef DBTC_H#define DBTC_H#include <ndb_limits.h>#include <pc.hpp>#include <SimulatedBlock.hpp>#include <DLHashTable.hpp>#include <SLList.hpp>#include <DLList.hpp>#include <DLFifoList.hpp>#include <DataBuffer.hpp>#include <Bitmask.hpp>#include <AttributeList.hpp>#include <signaldata/AttrInfo.hpp>#include <signaldata/LqhTransConf.hpp>#include <signaldata/LqhKey.hpp>#include <signaldata/TrigAttrInfo.hpp>#include <signaldata/TcIndx.hpp>#include <signaldata/TransIdAI.hpp>#include <signaldata/EventReport.hpp>#include <trigger_definitions.h>#include <SignalCounter.hpp>#ifdef DBTC_C/* * 2.2 LOCAL SYMBOLS * ----------------- */#define Z8NIL 255#define ZAPI_CONNECT_FILESIZE 20#define ZATTRBUF_FILESIZE 4000#define ZCLOSED 2#define ZCOMMITING 0 /* VALUE FOR TRANSTATUS */#define ZCOMMIT_SETUP 2#define ZCONTINUE_ABORT_080 4#define ZDATABUF_FILESIZE 4000#define ZGCP_FILESIZE 10#define ZINBUF_DATA_LEN 24 /* POSITION OF 'DATA LENGHT'-VARIABLE. */#define ZINBUF_NEXT 27 /* POSITION OF 'NEXT'-VARIABLE. */#define ZINBUF_PREV 26 /* POSITION OF 'PREVIOUS'-VARIABLE. */#define ZINTSPH1 1#define ZINTSPH2 2#define ZINTSPH3 3#define ZINTSPH6 6#define ZLASTPHASE 255#define ZMAX_DATA_IN_LQHKEYREQ 12#define ZNODEBUF_FILESIZE 2000#define ZNR_OF_SEIZE 10#define ZSCANREC_FILE_SIZE 100#define ZSCAN_FRAGREC_FILE_SIZE 400#define ZSCAN_OPREC_FILE_SIZE 400#define ZSEND_ATTRINFO 0#define ZSPH1 1#define ZTABREC_FILESIZE 16#define ZTAKE_OVER_ACTIVE 1#define ZTAKE_OVER_IDLE 0#define ZTC_CONNECT_FILESIZE 200#define ZTCOPCONF_SIZE 6// ----------------------------------------// Error Codes for Scan// ----------------------------------------#define ZNO_CONCURRENCY_ERROR 242#define ZTOO_HIGH_CONCURRENCY_ERROR 244#define ZNO_SCANREC_ERROR 245#define ZNO_FRAGMENT_ERROR 246#define ZSCAN_AI_LEN_ERROR 269#define ZSCAN_LQH_ERROR 270#define ZSCAN_FRAG_LQH_ERROR 274#define ZSCANTIME_OUT_ERROR 296#define ZSCANTIME_OUT_ERROR2 297// ----------------------------------------// Error Codes for transactions// ----------------------------------------#define ZSTATE_ERROR 202#define ZLENGTH_ERROR 207 // Also Scan#define ZERO_KEYLEN_ERROR 208#define ZSIGNAL_ERROR 209#define ZGET_ATTRBUF_ERROR 217 // Also Scan#define ZGET_DATAREC_ERROR 218#define ZMORE_AI_IN_TCKEYREQ_ERROR 220#define ZCOMMITINPROGRESS 230#define ZROLLBACKNOTALLOWED 232#define ZNO_FREE_TC_CONNECTION 233 // Also Scan#define ZABORTINPROGRESS 237#define ZPREPAREINPROGRESS 238#define ZWRONG_SCHEMA_VERSION_ERROR 241 // Also Scan#define ZSCAN_NODE_ERROR 250#define ZTRANS_STATUS_ERROR 253#define ZTIME_OUT_ERROR 266#define ZSIMPLE_READ_WITHOUT_AI 271#define ZNO_AI_WITH_UPDATE 272#define ZSEIZE_API_COPY_ERROR 275#define ZSCANINPROGRESS 276#define ZABORT_ERROR 277#define ZCOMMIT_TYPE_ERROR 278#define ZNO_FREE_TC_MARKER 279#define ZNODE_SHUTDOWN_IN_PROGRESS 280#define ZCLUSTER_SHUTDOWN_IN_PROGRESS 281#define ZWRONG_STATE 282#define ZCLUSTER_IN_SINGLEUSER_MODE 299#define ZDROP_TABLE_IN_PROGRESS 283#define ZNO_SUCH_TABLE 284#define ZUNKNOWN_TABLE_ERROR 285#define ZNODEFAIL_BEFORE_COMMIT 286#define ZINDEX_CORRUPT_ERROR 287// ----------------------------------------// Seize error// ----------------------------------------#define ZNO_FREE_API_CONNECTION 219#define ZSYSTEM_NOT_STARTED_ERROR 203// ----------------------------------------// Release errors// ----------------------------------------#define ZINVALID_CONNECTION 229#define ZNOT_FOUND 626#define ZALREADYEXIST 630#define ZINCONSISTENTHASHINDEX 892#define ZNOTUNIQUE 893#define ZINVALID_KEY 290#endifclass Dbtc: public SimulatedBlock {public: enum ConnectionState { CS_CONNECTED = 0, CS_DISCONNECTED = 1, CS_STARTED = 2, CS_RECEIVING = 3, CS_PREPARED = 4, CS_START_PREPARING = 5, CS_REC_PREPARING = 6, CS_RESTART = 7, CS_ABORTING = 8, CS_COMPLETING = 9, CS_COMPLETE_SENT = 10, CS_PREPARE_TO_COMMIT = 11, CS_COMMIT_SENT = 12, CS_START_COMMITTING = 13, CS_COMMITTING = 14, CS_REC_COMMITTING = 15, CS_WAIT_ABORT_CONF = 16, CS_WAIT_COMPLETE_CONF = 17, CS_WAIT_COMMIT_CONF = 18, CS_FAIL_ABORTING = 19, CS_FAIL_ABORTED = 20, CS_FAIL_PREPARED = 21, CS_FAIL_COMMITTING = 22, CS_FAIL_COMMITTED = 23, CS_FAIL_COMPLETED = 24, CS_START_SCAN = 25 }; enum OperationState { OS_CONNECTING_DICT = 0, OS_CONNECTED = 1, OS_OPERATING = 2, OS_PREPARED = 3, OS_COMMITTING = 4, OS_COMMITTED = 5, OS_COMPLETING = 6, OS_COMPLETED = 7, OS_RESTART = 8, OS_ABORTING = 9, OS_ABORT_SENT = 10, OS_TAKE_OVER = 11, OS_WAIT_DIH = 12, OS_WAIT_KEYINFO = 13, OS_WAIT_ATTR = 14, OS_WAIT_COMMIT_CONF = 15, OS_WAIT_ABORT_CONF = 16, OS_WAIT_COMPLETE_CONF = 17, OS_WAIT_SCAN = 18 }; enum AbortState { AS_IDLE = 0, AS_ACTIVE = 1 }; enum HostState { HS_ALIVE = 0, HS_DEAD = 1 }; enum LqhTransState { LTS_IDLE = 0, LTS_ACTIVE = 1 }; enum FailState { FS_IDLE = 0, FS_LISTENING = 1, FS_COMPLETING = 2 }; enum SystemStartState { SSS_TRUE = 0, SSS_FALSE = 1 }; enum TimeOutCheckState { TOCS_TRUE = 0, TOCS_FALSE = 1 }; enum ReturnSignal { RS_NO_RETURN = 0, RS_TCKEYCONF = 1, RS_TC_COMMITCONF = 3, RS_TCROLLBACKCONF = 4, RS_TCROLLBACKREP = 5 }; enum IndexOperationState { IOS_NOOP = 0, IOS_INDEX_ACCESS = 1, IOS_INDEX_ACCESS_WAIT_FOR_TCKEYCONF = 2, IOS_INDEX_ACCESS_WAIT_FOR_TRANSID_AI = 3, IOS_INDEX_OPERATION = 4 }; enum IndexState { IS_BUILDING = 0, // build in progress, start state at create IS_ONLINE = 1 // ready to use }; /**-------------------------------------------------------------------------- * LOCAL SYMBOLS PER 'SYMBOL-VALUED' VARIABLE * * * NSYMB ZAPI_CONNECT_FILESIZE = 20 * NSYMB ZTC_CONNECT_FILESIZE = 200 * NSYMB ZHOST_FILESIZE = 16 * NSYMB ZDATABUF_FILESIZE = 4000 * NSYMB ZATTRBUF_FILESIZE = 4000 * NSYMB ZGCP_FILESIZE = 10 * * * ABORTED CODES * TPHASE NSYMB ZSPH1 = 1 * NSYMB ZLASTPHASE = 255 * * * LQH_TRANS * NSYMB ZTRANS_ABORTED = 1 * NSYMB ZTRANS_PREPARED = 2 * NSYMB ZTRANS_COMMITTED = 3 * NSYMB ZCOMPLETED_LQH_TRANS = 4 * NSYMB ZTRANS_COMPLETED = 5 * * * TAKE OVER * NSYMB ZTAKE_OVER_IDLE = 0 * NSYMB ZTAKE_OVER_ACTIVE = 1 * * ATTRBUF (ATTRBUF_RECORD) * NSYMB ZINBUF_DATA_LEN = 24 * NSYMB ZINBUF_NEXTFREE = 25 (NOT USED ) * NSYMB ZINBUF_PREV = 26 * NSYMB ZINBUF_NEXT = 27 -------------------------------------------------------------------------*/ /* 2.3 RECORDS AND FILESIZES ------------------------- */ /* **************************************************************** */ /* ---------------------------------------------------------------- */ /* ------------------- TRIGGER AND INDEX DATA --------------------- */ /* ---------------------------------------------------------------- */ /* **************************************************************** */ /* ********* DEFINED TRIGGER DATA ********* */ /* THIS RECORD FORMS LISTS OF ACTIVE */ /* TRIGGERS FOR EACH TABLE. */ /* THE RECORDS ARE MANAGED BY A TRIGGER */ /* POOL WHERE A TRIGGER RECORD IS SEIZED */ /* WHEN A TRIGGER IS ACTIVATED AND RELEASED */ /* WHEN THE TRIGGER IS DEACTIVATED. */ /* **************************************** */ struct TcDefinedTriggerData { /** * Trigger id, used to identify the trigger */ UintR triggerId; /** * Trigger type, defines what the trigger is used for */ TriggerType::Value triggerType; /** * Trigger type, defines what the trigger is used for */ TriggerEvent::Value triggerEvent; /** * Attribute mask, defines what attributes are to be monitored * Can be seen as a compact representation of SQL column name list */ Bitmask<MAXNROFATTRIBUTESINWORDS> attributeMask; /** * Next ptr (used in pool/list) */ union { Uint32 nextPool; Uint32 nextList; }; /** * Index id, only used by secondary_index triggers. This is same as * index table id in DICT. **/ Uint32 indexId; /** * Prev pointer (used in list) */ Uint32 prevList; inline void print(NdbOut & s) const { s << "[DefinedTriggerData = " << triggerId << "]"; } }; typedef Ptr<TcDefinedTriggerData> DefinedTriggerPtr; /** * Pool of trigger data record */ ArrayPool<TcDefinedTriggerData> c_theDefinedTriggerPool; /** * The list of active triggers */ DLList<TcDefinedTriggerData> c_theDefinedTriggers; typedef DataBuffer<11> AttributeBuffer; AttributeBuffer::DataBufferPool c_theAttributeBufferPool; UintR c_transactionBufferSpace; /* ********** FIRED TRIGGER DATA ********** */ /* THIS RECORD FORMS LISTS OF FIRED */ /* TRIGGERS FOR A TRANSACTION. */ /* THE RECORDS ARE MANAGED BY A TRIGGER */ /* POOL WHERE A TRIGGER RECORD IS SEIZED */ /* WHEN A TRIGGER IS ACTIVATED AND RELEASED */ /* WHEN THE TRIGGER IS DEACTIVATED. */ /* **************************************** */ struct TcFiredTriggerData {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -