DbdihInit.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:12k
- /* 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 */
- #define DBDIH_C
- #include "Dbdih.hpp"
- #include <ndb_limits.h>
- #define DEBUG(x) { ndbout << "DIH::" << x << endl; }
- void Dbdih::initData()
- {
- cpageFileSize = ZPAGEREC;
- apiConnectRecord = 0;
- connectRecord = 0;
- fileRecord = 0;
- fragmentstore = 0;
- pageRecord = 0;
- replicaRecord = 0;
- tabRecord = 0;
- takeOverRecord = 0;
- createReplicaRecord = 0;
- nodeGroupRecord = 0;
- nodeRecord = 0;
- c_nextNodeGroup = 0;
- // Records with constant sizes
- createReplicaRecord = (CreateReplicaRecord*)
- allocRecord("CreateReplicaRecord", sizeof(CreateReplicaRecord),
- ZCREATE_REPLICA_FILE_SIZE);
- nodeGroupRecord = (NodeGroupRecord*)
- allocRecord("NodeGroupRecord", sizeof(NodeGroupRecord), MAX_NDB_NODES);
- nodeRecord = (NodeRecord*)
- allocRecord("NodeRecord", sizeof(NodeRecord), MAX_NDB_NODES);
- Uint32 i;
- for(i = 0; i<MAX_NDB_NODES; i++){
- new (&nodeRecord[i]) NodeRecord();
- }
-
- takeOverRecord = (TakeOverRecord*)allocRecord("TakeOverRecord",
- sizeof(TakeOverRecord),
- MAX_NDB_NODES);
- for(i = 0; i<MAX_NDB_NODES; i++)
- new (&takeOverRecord[i]) TakeOverRecord();
- for(i = 0; i<MAX_NDB_NODES; i++)
- new (&takeOverRecord[i]) TakeOverRecord();
-
- waitGCPProxyPool.setSize(ZPROXY_FILE_SIZE);
- waitGCPMasterPool.setSize(ZPROXY_MASTER_FILE_SIZE);
- cgcpOrderBlocked = 0;
- c_lcpState.ctcCounter = 0;
- cwaitLcpSr = false;
- c_blockCommit = false;
- c_blockCommitNo = 1;
- }//Dbdih::initData()
- void Dbdih::initRecords()
- {
- // Records with dynamic sizes
- apiConnectRecord = (ApiConnectRecord*)
- allocRecord("ApiConnectRecord",
- sizeof(ApiConnectRecord),
- capiConnectFileSize);
- connectRecord = (ConnectRecord*)allocRecord("ConnectRecord",
- sizeof(ConnectRecord),
- cconnectFileSize);
- fileRecord = (FileRecord*)allocRecord("FileRecord",
- sizeof(FileRecord),
- cfileFileSize);
- fragmentstore = (Fragmentstore*)allocRecord("Fragmentstore",
- sizeof(Fragmentstore),
- cfragstoreFileSize);
- pageRecord = (PageRecord*)allocRecord("PageRecord",
- sizeof(PageRecord),
- cpageFileSize);
- replicaRecord = (ReplicaRecord*)allocRecord("ReplicaRecord",
- sizeof(ReplicaRecord),
- creplicaFileSize);
- tabRecord = (TabRecord*)allocRecord("TabRecord",
- sizeof(TabRecord),
- ctabFileSize);
- // Initialize BAT for interface to file system
- NewVARIABLE* bat = allocateBat(22);
- bat[1].WA = &pageRecord->word[0];
- bat[1].nrr = cpageFileSize;
- bat[1].ClusterSize = sizeof(PageRecord);
- bat[1].bits.q = 11;
- bat[1].bits.v = 5;
- bat[20].WA = &sysfileData[0];
- bat[20].nrr = 1;
- bat[20].ClusterSize = sizeof(sysfileData);
- bat[20].bits.q = 7;
- bat[20].bits.v = 5;
- bat[21].WA = &sysfileDataToFile[0];
- bat[21].nrr = 1;
- bat[21].ClusterSize = sizeof(sysfileDataToFile);
- bat[21].bits.q = 7;
- bat[21].bits.v = 5;
- }//Dbdih::initRecords()
- Dbdih::Dbdih(const class Configuration & config):
- SimulatedBlock(DBDIH, config),
- c_waitGCPProxyList(waitGCPProxyPool),
- c_waitGCPMasterList(waitGCPMasterPool)
- {
- BLOCK_CONSTRUCTOR(Dbdih);
- addRecSignal(GSN_DUMP_STATE_ORD, &Dbdih::execDUMP_STATE_ORD);
- addRecSignal(GSN_NDB_TAMPER, &Dbdih::execNDB_TAMPER, true);
- addRecSignal(GSN_DEBUG_SIG, &Dbdih::execDEBUG_SIG);
- addRecSignal(GSN_MASTER_GCPREQ, &Dbdih::execMASTER_GCPREQ);
- addRecSignal(GSN_MASTER_GCPREF, &Dbdih::execMASTER_GCPREF);
- addRecSignal(GSN_MASTER_GCPCONF, &Dbdih::execMASTER_GCPCONF);
- addRecSignal(GSN_EMPTY_LCP_CONF, &Dbdih::execEMPTY_LCP_CONF);
- addRecSignal(GSN_MASTER_LCPREQ, &Dbdih::execMASTER_LCPREQ);
- addRecSignal(GSN_MASTER_LCPREF, &Dbdih::execMASTER_LCPREF);
- addRecSignal(GSN_MASTER_LCPCONF, &Dbdih::execMASTER_LCPCONF);
- addRecSignal(GSN_NF_COMPLETEREP, &Dbdih::execNF_COMPLETEREP);
- addRecSignal(GSN_START_PERMREQ, &Dbdih::execSTART_PERMREQ);
- addRecSignal(GSN_START_PERMCONF, &Dbdih::execSTART_PERMCONF);
- addRecSignal(GSN_START_PERMREF, &Dbdih::execSTART_PERMREF);
- addRecSignal(GSN_INCL_NODEREQ, &Dbdih::execINCL_NODEREQ);
- addRecSignal(GSN_INCL_NODECONF, &Dbdih::execINCL_NODECONF);
- addRecSignal(GSN_END_TOREQ, &Dbdih::execEND_TOREQ);
- addRecSignal(GSN_END_TOCONF, &Dbdih::execEND_TOCONF);
- addRecSignal(GSN_START_TOREQ, &Dbdih::execSTART_TOREQ);
- addRecSignal(GSN_START_TOCONF, &Dbdih::execSTART_TOCONF);
- addRecSignal(GSN_START_MEREQ, &Dbdih::execSTART_MEREQ);
- addRecSignal(GSN_START_MECONF, &Dbdih::execSTART_MECONF);
- addRecSignal(GSN_START_MEREF, &Dbdih::execSTART_MEREF);
- addRecSignal(GSN_START_COPYREQ, &Dbdih::execSTART_COPYREQ);
- addRecSignal(GSN_START_COPYCONF, &Dbdih::execSTART_COPYCONF);
- addRecSignal(GSN_START_COPYREF, &Dbdih::execSTART_COPYREF);
- addRecSignal(GSN_CREATE_FRAGREQ, &Dbdih::execCREATE_FRAGREQ);
- addRecSignal(GSN_CREATE_FRAGCONF, &Dbdih::execCREATE_FRAGCONF);
- addRecSignal(GSN_DIVERIFYREQ, &Dbdih::execDIVERIFYREQ);
- addRecSignal(GSN_GCP_SAVECONF, &Dbdih::execGCP_SAVECONF);
- addRecSignal(GSN_GCP_PREPARECONF, &Dbdih::execGCP_PREPARECONF);
- addRecSignal(GSN_GCP_PREPARE, &Dbdih::execGCP_PREPARE);
- addRecSignal(GSN_GCP_NODEFINISH, &Dbdih::execGCP_NODEFINISH);
- addRecSignal(GSN_GCP_COMMIT, &Dbdih::execGCP_COMMIT);
- addRecSignal(GSN_DIHNDBTAMPER, &Dbdih::execDIHNDBTAMPER);
- addRecSignal(GSN_CONTINUEB, &Dbdih::execCONTINUEB);
- addRecSignal(GSN_COPY_GCIREQ, &Dbdih::execCOPY_GCIREQ);
- addRecSignal(GSN_COPY_GCICONF, &Dbdih::execCOPY_GCICONF);
- addRecSignal(GSN_COPY_TABREQ, &Dbdih::execCOPY_TABREQ);
- addRecSignal(GSN_COPY_TABCONF, &Dbdih::execCOPY_TABCONF);
- addRecSignal(GSN_TCGETOPSIZECONF, &Dbdih::execTCGETOPSIZECONF);
- addRecSignal(GSN_TC_CLOPSIZECONF, &Dbdih::execTC_CLOPSIZECONF);
- addRecSignal(GSN_LCP_COMPLETE_REP, &Dbdih::execLCP_COMPLETE_REP);
- addRecSignal(GSN_LCP_FRAG_REP, &Dbdih::execLCP_FRAG_REP);
- addRecSignal(GSN_START_LCP_REQ, &Dbdih::execSTART_LCP_REQ);
- addRecSignal(GSN_START_LCP_CONF, &Dbdih::execSTART_LCP_CONF);
-
- addRecSignal(GSN_READ_CONFIG_REQ, &Dbdih::execREAD_CONFIG_REQ, true);
- addRecSignal(GSN_UNBLO_DICTCONF, &Dbdih::execUNBLO_DICTCONF);
- addRecSignal(GSN_COPY_ACTIVECONF, &Dbdih::execCOPY_ACTIVECONF);
- addRecSignal(GSN_TAB_COMMITREQ, &Dbdih::execTAB_COMMITREQ);
- addRecSignal(GSN_NODE_FAILREP, &Dbdih::execNODE_FAILREP);
- addRecSignal(GSN_COPY_FRAGCONF, &Dbdih::execCOPY_FRAGCONF);
- addRecSignal(GSN_COPY_FRAGREF, &Dbdih::execCOPY_FRAGREF);
- addRecSignal(GSN_DIADDTABREQ, &Dbdih::execDIADDTABREQ);
- addRecSignal(GSN_DIGETNODESREQ, &Dbdih::execDIGETNODESREQ);
- addRecSignal(GSN_DIRELEASEREQ, &Dbdih::execDIRELEASEREQ);
- addRecSignal(GSN_DISEIZEREQ, &Dbdih::execDISEIZEREQ);
- addRecSignal(GSN_STTOR, &Dbdih::execSTTOR);
- addRecSignal(GSN_DI_FCOUNTREQ, &Dbdih::execDI_FCOUNTREQ);
- addRecSignal(GSN_DIGETPRIMREQ, &Dbdih::execDIGETPRIMREQ);
- addRecSignal(GSN_GCP_SAVEREF, &Dbdih::execGCP_SAVEREF);
- addRecSignal(GSN_GCP_TCFINISHED, &Dbdih::execGCP_TCFINISHED);
- addRecSignal(GSN_READ_NODESCONF, &Dbdih::execREAD_NODESCONF);
- addRecSignal(GSN_NDB_STTOR, &Dbdih::execNDB_STTOR);
- addRecSignal(GSN_DICTSTARTCONF, &Dbdih::execDICTSTARTCONF);
- addRecSignal(GSN_NDB_STARTREQ, &Dbdih::execNDB_STARTREQ);
- addRecSignal(GSN_GETGCIREQ, &Dbdih::execGETGCIREQ);
- addRecSignal(GSN_DIH_RESTARTREQ, &Dbdih::execDIH_RESTARTREQ);
- addRecSignal(GSN_START_RECCONF, &Dbdih::execSTART_RECCONF);
- addRecSignal(GSN_START_FRAGCONF, &Dbdih::execSTART_FRAGCONF);
- addRecSignal(GSN_ADD_FRAGCONF, &Dbdih::execADD_FRAGCONF);
- addRecSignal(GSN_ADD_FRAGREF, &Dbdih::execADD_FRAGREF);
- addRecSignal(GSN_FSOPENCONF, &Dbdih::execFSOPENCONF);
- addRecSignal(GSN_FSOPENREF, &Dbdih::execFSOPENREF, true);
- addRecSignal(GSN_FSCLOSECONF, &Dbdih::execFSCLOSECONF);
- addRecSignal(GSN_FSCLOSEREF, &Dbdih::execFSCLOSEREF, true);
- addRecSignal(GSN_FSREADCONF, &Dbdih::execFSREADCONF);
- addRecSignal(GSN_FSREADREF, &Dbdih::execFSREADREF, true);
- addRecSignal(GSN_FSWRITECONF, &Dbdih::execFSWRITECONF);
- addRecSignal(GSN_FSWRITEREF, &Dbdih::execFSWRITEREF, true);
- addRecSignal(GSN_SET_VAR_REQ, &Dbdih::execSET_VAR_REQ);
- addRecSignal(GSN_START_INFOREQ,
- &Dbdih::execSTART_INFOREQ);
- addRecSignal(GSN_START_INFOREF,
- &Dbdih::execSTART_INFOREF);
- addRecSignal(GSN_START_INFOCONF,
- &Dbdih::execSTART_INFOCONF);
- addRecSignal(GSN_CHECKNODEGROUPSREQ, &Dbdih::execCHECKNODEGROUPSREQ);
- addRecSignal(GSN_BLOCK_COMMIT_ORD,
- &Dbdih::execBLOCK_COMMIT_ORD);
- addRecSignal(GSN_UNBLOCK_COMMIT_ORD,
- &Dbdih::execUNBLOCK_COMMIT_ORD);
-
- addRecSignal(GSN_DIH_SWITCH_REPLICA_REQ,
- &Dbdih::execDIH_SWITCH_REPLICA_REQ);
-
- addRecSignal(GSN_DIH_SWITCH_REPLICA_REF,
- &Dbdih::execDIH_SWITCH_REPLICA_REF);
-
- addRecSignal(GSN_DIH_SWITCH_REPLICA_CONF,
- &Dbdih::execDIH_SWITCH_REPLICA_CONF);
- addRecSignal(GSN_STOP_PERM_REQ, &Dbdih::execSTOP_PERM_REQ);
- addRecSignal(GSN_STOP_PERM_REF, &Dbdih::execSTOP_PERM_REF);
- addRecSignal(GSN_STOP_PERM_CONF, &Dbdih::execSTOP_PERM_CONF);
- addRecSignal(GSN_STOP_ME_REQ, &Dbdih::execSTOP_ME_REQ);
- addRecSignal(GSN_STOP_ME_REF, &Dbdih::execSTOP_ME_REF);
- addRecSignal(GSN_STOP_ME_CONF, &Dbdih::execSTOP_ME_CONF);
- addRecSignal(GSN_WAIT_GCP_REQ, &Dbdih::execWAIT_GCP_REQ);
- addRecSignal(GSN_WAIT_GCP_REF, &Dbdih::execWAIT_GCP_REF);
- addRecSignal(GSN_WAIT_GCP_CONF, &Dbdih::execWAIT_GCP_CONF);
- addRecSignal(GSN_UPDATE_TOREQ, &Dbdih::execUPDATE_TOREQ);
- addRecSignal(GSN_UPDATE_TOCONF, &Dbdih::execUPDATE_TOCONF);
- addRecSignal(GSN_PREP_DROP_TAB_REQ, &Dbdih::execPREP_DROP_TAB_REQ);
- addRecSignal(GSN_WAIT_DROP_TAB_REF, &Dbdih::execWAIT_DROP_TAB_REF);
- addRecSignal(GSN_WAIT_DROP_TAB_CONF, &Dbdih::execWAIT_DROP_TAB_CONF);
- addRecSignal(GSN_DROP_TAB_REQ, &Dbdih::execDROP_TAB_REQ);
- addRecSignal(GSN_ALTER_TAB_REQ, &Dbdih::execALTER_TAB_REQ);
- addRecSignal(GSN_CREATE_FRAGMENTATION_REQ,
- &Dbdih::execCREATE_FRAGMENTATION_REQ);
-
- initData();
- }//Dbdih::Dbdih()
- Dbdih::~Dbdih()
- {
- deallocRecord((void **)&apiConnectRecord, "ApiConnectRecord",
- sizeof(ApiConnectRecord),
- capiConnectFileSize);
-
- deallocRecord((void **)&connectRecord, "ConnectRecord",
- sizeof(ConnectRecord),
- cconnectFileSize);
-
- deallocRecord((void **)&fileRecord, "FileRecord",
- sizeof(FileRecord),
- cfileFileSize);
-
- deallocRecord((void **)&fragmentstore, "Fragmentstore",
- sizeof(Fragmentstore),
- cfragstoreFileSize);
- deallocRecord((void **)&pageRecord, "PageRecord",
- sizeof(PageRecord),
- cpageFileSize);
-
- deallocRecord((void **)&replicaRecord, "ReplicaRecord",
- sizeof(ReplicaRecord),
- creplicaFileSize);
-
- deallocRecord((void **)&tabRecord, "TabRecord",
- sizeof(TabRecord),
- ctabFileSize);
- // Records with constant sizes
- deallocRecord((void **)&createReplicaRecord,
- "CreateReplicaRecord", sizeof(CreateReplicaRecord),
- ZCREATE_REPLICA_FILE_SIZE);
-
- deallocRecord((void **)&nodeGroupRecord, "NodeGroupRecord",
- sizeof(NodeGroupRecord), MAX_NDB_NODES);
-
- deallocRecord((void **)&nodeRecord, "NodeRecord",
- sizeof(NodeRecord), MAX_NDB_NODES);
- deallocRecord((void **)&takeOverRecord, "TakeOverRecord",
- sizeof(TakeOverRecord),
- MAX_NDB_NODES);
- }//Dbdih::~Dbdih()
- BLOCK_FUNCTIONS(Dbdih)