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

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. #include "SimBlockList.hpp"
  14. #include <SimulatedBlock.hpp>
  15. #include <Cmvmi.hpp>
  16. #include <Ndbfs.hpp>
  17. #include <Dbacc.hpp>
  18. #include <Dbdict.hpp>
  19. #include <Dbdih.hpp>
  20. #include <Dblqh.hpp>
  21. #include <Dbtc.hpp>
  22. #include <Dbtup.hpp>
  23. #include <Ndbcntr.hpp>
  24. #include <Qmgr.hpp>
  25. #include <Trix.hpp>
  26. #include <Backup.hpp>
  27. #include <DbUtil.hpp>
  28. #include <Suma.hpp>
  29. #include <Dbtux.hpp>
  30. #include <NdbEnv.h>
  31. #ifndef VM_TRACE
  32. #define NEW_BLOCK(B) new B
  33. #else
  34. enum SIMBLOCKLIST_DUMMY { A_VALUE = 0 };
  35. void * operator new (size_t sz, SIMBLOCKLIST_DUMMY dummy){
  36.   char * tmp = (char *)malloc(sz);
  37. #ifndef NDB_PURIFY
  38. #ifdef VM_TRACE
  39.   const int initValue = 0xf3;
  40. #else
  41.   const int initValue = 0x0;
  42. #endif
  43.   
  44.   const int p = (sz / 4096);
  45.   const int r = (sz % 4096);
  46.   
  47.   for(int i = 0; i<p; i++)
  48.     memset(tmp+(i*4096), initValue, 4096);
  49.   
  50.   if(r > 0)
  51.     memset(tmp+p*4096, initValue, r);
  52. #endif
  53.   
  54.   return tmp;
  55. }
  56. #define NEW_BLOCK(B) new(A_VALUE) B
  57. #endif
  58. void 
  59. SimBlockList::load(const Configuration & conf){
  60.   noOfBlocks = 16;
  61.   theList = new SimulatedBlock * [noOfBlocks];
  62.   Dbdict* dbdict = 0;
  63.   Dbdih* dbdih = 0;
  64.   SimulatedBlock * fs = 0;
  65.   {
  66.     Uint32 dl;
  67.     const ndb_mgm_configuration_iterator * p = conf.getOwnConfigIterator();
  68.     if(p && !ndb_mgm_get_int_parameter(p, CFG_DB_DISCLESS, &dl) && dl){
  69.       fs = NEW_BLOCK(VoidFs)(conf);
  70.     } else { 
  71.       fs = NEW_BLOCK(Ndbfs)(conf);
  72.     }
  73.   }
  74.   
  75.   theList[0]  = NEW_BLOCK(Dbacc)(conf);
  76.   theList[1]  = NEW_BLOCK(Cmvmi)(conf);
  77.   theList[2]  = fs;
  78.   theList[3]  = dbdict = NEW_BLOCK(Dbdict)(conf);
  79.   theList[4]  = dbdih = NEW_BLOCK(Dbdih)(conf);
  80.   theList[5]  = NEW_BLOCK(Dblqh)(conf);
  81.   theList[6]  = NEW_BLOCK(Dbtc)(conf);
  82.   theList[7]  = NEW_BLOCK(Dbtup)(conf);
  83.   theList[8]  = NEW_BLOCK(Ndbcntr)(conf);
  84.   theList[9]  = NEW_BLOCK(Qmgr)(conf);
  85.   theList[10] = NEW_BLOCK(Trix)(conf);
  86.   theList[11] = NEW_BLOCK(Backup)(conf);
  87.   theList[12] = NEW_BLOCK(DbUtil)(conf);
  88.   theList[13] = NEW_BLOCK(Suma)(conf);
  89.   theList[14] = 0; //NEW_BLOCK(Grep)(conf);
  90.   theList[15] = NEW_BLOCK(Dbtux)(conf);
  91.   // Metadata common part shared by block instances
  92.   ptrMetaDataCommon = new MetaData::Common(*dbdict, *dbdih);
  93.   for (int i = 0; i < noOfBlocks; i++)
  94.     if(theList[i])
  95.       theList[i]->setMetaDataCommon(ptrMetaDataCommon);
  96. }
  97. void
  98. SimBlockList::unload(){
  99.   if(theList != 0){
  100.     for(int i = 0; i<noOfBlocks; i++){
  101.       if(theList[i] != 0){
  102. theList[i]->~SimulatedBlock();
  103. free(theList[i]);
  104. theList[i] = 0;
  105.       }
  106.     }
  107.     delete [] theList;
  108.     delete ptrMetaDataCommon;
  109.     theList    = 0;
  110.     noOfBlocks = 0;
  111.     ptrMetaDataCommon = 0;
  112.   }
  113. }