DbaccInit.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:8k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #define DBACC_C
  14. #include "Dbacc.hpp"
  15. #define DEBUG(x) { ndbout << "ACC::" << x << endl; }
  16. void Dbacc::initData() 
  17. {
  18.   cdirarraysize = ZDIRARRAY;
  19.   coprecsize = ZOPRECSIZE;
  20.   cpagesize = ZPAGESIZE;
  21.   clcpConnectsize = ZLCP_CONNECTSIZE;
  22.   ctablesize = ZTABLESIZE;
  23.   cfragmentsize = ZFRAGMENTSIZE;
  24.   crootfragmentsize = ZROOTFRAGMENTSIZE;
  25.   cdirrangesize = ZDIRRANGESIZE;
  26.   coverflowrecsize = ZOVERFLOWRECSIZE;
  27.   cfsConnectsize = ZFS_CONNECTSIZE;
  28.   cfsOpsize = ZFS_OPSIZE;
  29.   cscanRecSize = ZSCAN_REC_SIZE;
  30.   csrVersionRecSize = ZSR_VERSION_REC_SIZE;
  31.   
  32.   dirRange = 0;
  33.   directoryarray = 0;
  34.   fragmentrec = 0;
  35.   fsConnectrec = 0;
  36.   fsOprec = 0;
  37.   lcpConnectrec = 0;
  38.   operationrec = 0;
  39.   overflowRecord = 0;
  40.   page8 = 0;
  41.   rootfragmentrec = 0;
  42.   scanRec = 0;
  43.   srVersionRec = 0;
  44.   tabrec = 0;
  45.   undopage = 0;
  46.   // Records with constant sizes
  47. }//Dbacc::initData()
  48. void Dbacc::initRecords() 
  49. {
  50.   // Records with dynamic sizes
  51.   dirRange = (DirRange*)allocRecord("DirRange",
  52.     sizeof(DirRange), 
  53.     cdirrangesize);
  54.   directoryarray = (Directoryarray*)allocRecord("Directoryarray",
  55. sizeof(Directoryarray), 
  56. cdirarraysize);
  57.   fragmentrec = (Fragmentrec*)allocRecord("Fragmentrec",
  58.   sizeof(Fragmentrec), 
  59.   cfragmentsize);
  60.   fsConnectrec = (FsConnectrec*)allocRecord("FsConnectrec",
  61.     sizeof(FsConnectrec), 
  62.     cfsConnectsize);
  63.   fsOprec = (FsOprec*)allocRecord("FsOprec",
  64.   sizeof(FsOprec), 
  65.   cfsOpsize);
  66.   lcpConnectrec = (LcpConnectrec*)allocRecord("LcpConnectrec",
  67.       sizeof(LcpConnectrec),
  68.       clcpConnectsize);
  69.   operationrec = (Operationrec*)allocRecord("Operationrec",
  70.     sizeof(Operationrec),
  71.     coprecsize);
  72.   overflowRecord = (OverflowRecord*)allocRecord("OverflowRecord",
  73. sizeof(OverflowRecord),
  74. coverflowrecsize);
  75.   page8 = (Page8*)allocRecord("Page8",
  76.       sizeof(Page8), 
  77.       cpagesize,
  78.       false);
  79.   rootfragmentrec = (Rootfragmentrec*)allocRecord("Rootfragmentrec",
  80.   sizeof(Rootfragmentrec), 
  81.   crootfragmentsize);
  82.   scanRec = (ScanRec*)allocRecord("ScanRec",
  83.   sizeof(ScanRec), 
  84.   cscanRecSize);
  85.   srVersionRec = (SrVersionRec*)allocRecord("SrVersionRec",
  86.     sizeof(SrVersionRec), 
  87.     csrVersionRecSize);
  88.   tabrec = (Tabrec*)allocRecord("Tabrec",
  89. sizeof(Tabrec),
  90. ctablesize);
  91.   undopage = (Undopage*)allocRecord("Undopage",
  92.     sizeof(Undopage), 
  93.     cundopagesize,
  94.     false);
  95.   
  96.   // Initialize BAT for interface to file system
  97.   NewVARIABLE* bat = allocateBat(3);
  98.   bat[1].WA = &page8->word32[0];
  99.   bat[1].nrr = cpagesize;
  100.   bat[1].ClusterSize = sizeof(Page8);
  101.   bat[1].bits.q = 11;
  102.   bat[1].bits.v = 5;
  103.   bat[2].WA = &undopage->undoword[0];
  104.   bat[2].nrr = cundopagesize;
  105.   bat[2].ClusterSize = sizeof(Undopage);
  106.   bat[2].bits.q = 13;
  107.   bat[2].bits.v = 5;
  108. }//Dbacc::initRecords()
  109. Dbacc::Dbacc(const class Configuration & conf):
  110.   SimulatedBlock(DBACC, conf)
  111. {
  112.   Uint32 log_page_size= 0;
  113.   BLOCK_CONSTRUCTOR(Dbacc);
  114.   const ndb_mgm_configuration_iterator * p = conf.getOwnConfigIterator();
  115.   ndbrequire(p != 0);
  116.   ndb_mgm_get_int_parameter(p, CFG_DB_UNDO_INDEX_BUFFER,  
  117.     &log_page_size);
  118.   /**
  119.    * Always set page size in half MBytes
  120.    */
  121.   cundopagesize= (log_page_size / sizeof(Undopage));
  122.   Uint32 mega_byte_part= cundopagesize & 15;
  123.   if (mega_byte_part != 0) {
  124.     jam();
  125.     cundopagesize+= (16 - mega_byte_part);
  126.   }
  127.   // Transit signals
  128.   addRecSignal(GSN_DUMP_STATE_ORD, &Dbacc::execDUMP_STATE_ORD);
  129.   addRecSignal(GSN_DEBUG_SIG, &Dbacc::execDEBUG_SIG);
  130.   addRecSignal(GSN_CONTINUEB, &Dbacc::execCONTINUEB);
  131.   addRecSignal(GSN_ACC_CHECK_SCAN, &Dbacc::execACC_CHECK_SCAN);
  132.   addRecSignal(GSN_EXPANDCHECK2, &Dbacc::execEXPANDCHECK2);
  133.   addRecSignal(GSN_SHRINKCHECK2, &Dbacc::execSHRINKCHECK2);
  134.   addRecSignal(GSN_ACC_OVER_REC, &Dbacc::execACC_OVER_REC);
  135.   addRecSignal(GSN_ACC_SAVE_PAGES, &Dbacc::execACC_SAVE_PAGES);
  136.   addRecSignal(GSN_NEXTOPERATION, &Dbacc::execNEXTOPERATION);
  137.   addRecSignal(GSN_READ_PSUEDO_REQ, &Dbacc::execREAD_PSUEDO_REQ);
  138.   // Received signals
  139.   addRecSignal(GSN_STTOR, &Dbacc::execSTTOR);
  140.   addRecSignal(GSN_SR_FRAGIDREQ, &Dbacc::execSR_FRAGIDREQ);
  141.   addRecSignal(GSN_LCP_FRAGIDREQ, &Dbacc::execLCP_FRAGIDREQ);
  142.   addRecSignal(GSN_LCP_HOLDOPREQ, &Dbacc::execLCP_HOLDOPREQ);
  143.   addRecSignal(GSN_END_LCPREQ, &Dbacc::execEND_LCPREQ);
  144.   addRecSignal(GSN_ACC_LCPREQ, &Dbacc::execACC_LCPREQ);
  145.   addRecSignal(GSN_START_RECREQ, &Dbacc::execSTART_RECREQ);
  146.   addRecSignal(GSN_ACC_CONTOPREQ, &Dbacc::execACC_CONTOPREQ);
  147.   addRecSignal(GSN_ACCKEYREQ, &Dbacc::execACCKEYREQ);
  148.   addRecSignal(GSN_ACCSEIZEREQ, &Dbacc::execACCSEIZEREQ);
  149.   addRecSignal(GSN_ACCFRAGREQ, &Dbacc::execACCFRAGREQ);
  150.   addRecSignal(GSN_ACC_SRREQ, &Dbacc::execACC_SRREQ);
  151.   addRecSignal(GSN_NEXT_SCANREQ, &Dbacc::execNEXT_SCANREQ);
  152.   addRecSignal(GSN_ACC_ABORTREQ, &Dbacc::execACC_ABORTREQ);
  153.   addRecSignal(GSN_ACC_SCANREQ, &Dbacc::execACC_SCANREQ);
  154.   addRecSignal(GSN_ACCMINUPDATE, &Dbacc::execACCMINUPDATE);
  155.   addRecSignal(GSN_ACC_COMMITREQ, &Dbacc::execACC_COMMITREQ);
  156.   addRecSignal(GSN_ACC_TO_REQ, &Dbacc::execACC_TO_REQ);
  157.   addRecSignal(GSN_ACC_LOCKREQ, &Dbacc::execACC_LOCKREQ);
  158.   addRecSignal(GSN_FSOPENCONF, &Dbacc::execFSOPENCONF);
  159.   addRecSignal(GSN_FSCLOSECONF, &Dbacc::execFSCLOSECONF);
  160.   addRecSignal(GSN_FSWRITECONF, &Dbacc::execFSWRITECONF);
  161.   addRecSignal(GSN_FSREADCONF, &Dbacc::execFSREADCONF);
  162.   addRecSignal(GSN_NDB_STTOR, &Dbacc::execNDB_STTOR);
  163.   addRecSignal(GSN_DROP_TAB_REQ, &Dbacc::execDROP_TAB_REQ);
  164.   addRecSignal(GSN_FSREMOVECONF, &Dbacc::execFSREMOVECONF);
  165.   addRecSignal(GSN_READ_CONFIG_REQ, &Dbacc::execREAD_CONFIG_REQ, true);
  166.   addRecSignal(GSN_SET_VAR_REQ,  &Dbacc::execSET_VAR_REQ);
  167.   initData();
  168. }//Dbacc::Dbacc()
  169. Dbacc::~Dbacc() 
  170. {
  171.   deallocRecord((void **)&dirRange, "DirRange",
  172. sizeof(DirRange), 
  173. cdirrangesize);
  174.   
  175.   deallocRecord((void **)&directoryarray, "Directoryarray",
  176. sizeof(Directoryarray), 
  177. cdirarraysize);
  178.   
  179.   deallocRecord((void **)&fragmentrec, "Fragmentrec",
  180. sizeof(Fragmentrec), 
  181. cfragmentsize);
  182.   
  183.   deallocRecord((void **)&fsConnectrec, "FsConnectrec",
  184. sizeof(FsConnectrec), 
  185. cfsConnectsize);
  186.   
  187.   deallocRecord((void **)&fsOprec, "FsOprec",
  188. sizeof(FsOprec), 
  189. cfsOpsize);
  190.   
  191.   deallocRecord((void **)&lcpConnectrec, "LcpConnectrec",
  192. sizeof(LcpConnectrec),
  193. clcpConnectsize);
  194.   
  195.   deallocRecord((void **)&operationrec, "Operationrec",
  196. sizeof(Operationrec),
  197. coprecsize);
  198.   
  199.   deallocRecord((void **)&overflowRecord, "OverflowRecord",
  200. sizeof(OverflowRecord),
  201. coverflowrecsize);
  202.   deallocRecord((void **)&page8, "Page8",
  203. sizeof(Page8), 
  204. cpagesize);
  205.   
  206.   deallocRecord((void **)&rootfragmentrec, "Rootfragmentrec",
  207. sizeof(Rootfragmentrec), 
  208. crootfragmentsize);
  209.   
  210.   deallocRecord((void **)&scanRec, "ScanRec",
  211. sizeof(ScanRec), 
  212. cscanRecSize);
  213.   
  214.   deallocRecord((void **)&srVersionRec, "SrVersionRec",
  215. sizeof(SrVersionRec), 
  216. csrVersionRecSize);
  217.   
  218.   deallocRecord((void **)&tabrec, "Tabrec",
  219. sizeof(Tabrec),
  220. ctablesize);
  221.   
  222.   deallocRecord((void **)&undopage, "Undopage",
  223. sizeof(Undopage), 
  224. cundopagesize);
  225. }//Dbacc::~Dbacc()
  226. BLOCK_FUNCTIONS(Dbacc)