BackupInit.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. //****************************************************************************
  14. // 
  15. // NAME
  16. //      Backup - Database backup / restore
  17. //
  18. //===========================================================================
  19. #include "Backup.hpp"
  20. #include <Properties.hpp>
  21. #include <Configuration.hpp>
  22. //extern const unsigned Ndbcntr::g_sysTableCount;
  23. Backup::Backup(const Configuration & conf) :
  24.   SimulatedBlock(BACKUP, conf),
  25.   c_nodes(c_nodePool),
  26.   c_backups(c_backupPool)
  27. {
  28.   BLOCK_CONSTRUCTOR(Backup);
  29.   
  30.   c_nodePool.setSize(MAX_NDB_NODES);
  31.   c_masterNodeId = getOwnNodeId();
  32.   
  33.   const ndb_mgm_configuration_iterator * p = conf.getOwnConfigIterator();
  34.   ndbrequire(p != 0);
  35.   Uint32 noBackups = 0, noTables = 0, noAttribs = 0;
  36.   ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_DB_DISCLESS, &m_diskless));
  37.   ndb_mgm_get_int_parameter(p, CFG_DB_PARALLEL_BACKUPS, &noBackups);
  38.   //  ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_DB_NO_TABLES, &noTables));
  39.   ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_DICT_TABLE, &noTables));
  40.   ndbrequire(!ndb_mgm_get_int_parameter(p, CFG_DB_NO_ATTRIBUTES, &noAttribs));
  41.   noAttribs++; //RT 527 bug fix
  42.   c_backupPool.setSize(noBackups);
  43.   c_backupFilePool.setSize(3 * noBackups);
  44.   c_tablePool.setSize(noBackups * noTables);
  45.   c_attributePool.setSize(noBackups * noAttribs);
  46.   c_triggerPool.setSize(noBackups * 3 * noTables);
  47.   // 2 = no of replicas
  48.   c_fragmentPool.setSize(noBackups * 2 * NO_OF_FRAG_PER_NODE * noTables);
  49.   
  50.   Uint32 szMem = 0;
  51.   ndb_mgm_get_int_parameter(p, CFG_DB_BACKUP_MEM, &szMem);
  52.   Uint32 noPages = (szMem + sizeof(Page32) - 1) / sizeof(Page32);
  53.   // We need to allocate an additional of 2 pages. 1 page because of a bug in
  54.   // ArrayPool and another one for DICTTAINFO.
  55.   c_pagePool.setSize(noPages + NO_OF_PAGES_META_FILE + 2); 
  56.   Uint32 szDataBuf = (2 * 1024 * 1024);
  57.   Uint32 szLogBuf = (2 * 1024 * 1024);
  58.   Uint32 szWrite = 32768;
  59.   ndb_mgm_get_int_parameter(p, CFG_DB_BACKUP_DATA_BUFFER_MEM, &szDataBuf);
  60.   ndb_mgm_get_int_parameter(p, CFG_DB_BACKUP_LOG_BUFFER_MEM, &szLogBuf);
  61.   ndb_mgm_get_int_parameter(p, CFG_DB_BACKUP_WRITE_SIZE, &szWrite);
  62.   
  63.   c_defaults.m_logBufferSize = szLogBuf;
  64.   c_defaults.m_dataBufferSize = szDataBuf;
  65.   c_defaults.m_minWriteSize = szWrite;
  66.   c_defaults.m_maxWriteSize = szWrite;
  67.   
  68.   { // Init all tables
  69.     ArrayList<Table> tables(c_tablePool);
  70.     TablePtr ptr;
  71.     while(tables.seize(ptr)){
  72.       new (ptr.p) Table(c_attributePool, c_fragmentPool);
  73.     }
  74.     tables.release();
  75.   }
  76.   {
  77.     ArrayList<BackupFile> ops(c_backupFilePool);
  78.     BackupFilePtr ptr;
  79.     while(ops.seize(ptr)){
  80.       new (ptr.p) BackupFile(* this, c_pagePool);
  81.     }
  82.     ops.release();
  83.   }
  84.   
  85.   {
  86.     ArrayList<BackupRecord> recs(c_backupPool);
  87.     BackupRecordPtr ptr;
  88.     while(recs.seize(ptr)){
  89.       new (ptr.p) BackupRecord(* this, c_pagePool, c_tablePool, 
  90.        c_backupFilePool, c_triggerPool);
  91.     }
  92.     recs.release();
  93.   }
  94.   // Initialize BAT for interface to file system
  95.   {
  96.     Page32Ptr p;
  97.     ndbrequire(c_pagePool.seizeId(p, 0));
  98.     c_startOfPages = (Uint32 *)p.p;
  99.     c_pagePool.release(p);
  100.     
  101.     NewVARIABLE* bat = allocateBat(1);
  102.     bat[0].WA = c_startOfPages;
  103.     bat[0].nrr = c_pagePool.getSize()*sizeof(Page32)/sizeof(Uint32);
  104.   }
  105.   
  106.   // Add received signals
  107.   addRecSignal(GSN_STTOR, &Backup::execSTTOR);
  108.   addRecSignal(GSN_DUMP_STATE_ORD, &Backup::execDUMP_STATE_ORD);
  109.   addRecSignal(GSN_READ_NODESCONF, &Backup::execREAD_NODESCONF);
  110.   addRecSignal(GSN_NODE_FAILREP, &Backup::execNODE_FAILREP);
  111.   addRecSignal(GSN_INCL_NODEREQ, &Backup::execINCL_NODEREQ);
  112.   addRecSignal(GSN_CONTINUEB, &Backup::execCONTINUEB);
  113.   
  114.   addRecSignal(GSN_SCAN_HBREP, &Backup::execSCAN_HBREP);
  115.   addRecSignal(GSN_TRANSID_AI, &Backup::execTRANSID_AI);
  116.   addRecSignal(GSN_SCAN_FRAGREF, &Backup::execSCAN_FRAGREF);
  117.   addRecSignal(GSN_SCAN_FRAGCONF, &Backup::execSCAN_FRAGCONF);
  118.   addRecSignal(GSN_BACKUP_TRIG_REQ, &Backup::execBACKUP_TRIG_REQ);
  119.   addRecSignal(GSN_TRIG_ATTRINFO, &Backup::execTRIG_ATTRINFO);
  120.   addRecSignal(GSN_FIRE_TRIG_ORD, &Backup::execFIRE_TRIG_ORD);
  121.   addRecSignal(GSN_LIST_TABLES_CONF, &Backup::execLIST_TABLES_CONF);
  122.   addRecSignal(GSN_GET_TABINFOREF, &Backup::execGET_TABINFOREF);
  123.   addRecSignal(GSN_GET_TABINFO_CONF, &Backup::execGET_TABINFO_CONF);
  124.   addRecSignal(GSN_CREATE_TRIG_REF, &Backup::execCREATE_TRIG_REF);
  125.   addRecSignal(GSN_CREATE_TRIG_CONF, &Backup::execCREATE_TRIG_CONF);
  126.   addRecSignal(GSN_ALTER_TRIG_REF, &Backup::execALTER_TRIG_REF);
  127.   addRecSignal(GSN_ALTER_TRIG_CONF, &Backup::execALTER_TRIG_CONF);
  128.   
  129.   addRecSignal(GSN_DROP_TRIG_REF, &Backup::execDROP_TRIG_REF);
  130.   addRecSignal(GSN_DROP_TRIG_CONF, &Backup::execDROP_TRIG_CONF);
  131.   addRecSignal(GSN_DI_FCOUNTCONF, &Backup::execDI_FCOUNTCONF);
  132.   addRecSignal(GSN_DIGETPRIMCONF, &Backup::execDIGETPRIMCONF);
  133.   addRecSignal(GSN_FSOPENREF, &Backup::execFSOPENREF, true);
  134.   addRecSignal(GSN_FSOPENCONF, &Backup::execFSOPENCONF);
  135.   addRecSignal(GSN_FSCLOSEREF, &Backup::execFSCLOSEREF, true);
  136.   addRecSignal(GSN_FSCLOSECONF, &Backup::execFSCLOSECONF);
  137.   addRecSignal(GSN_FSAPPENDREF, &Backup::execFSAPPENDREF, true);
  138.   addRecSignal(GSN_FSAPPENDCONF, &Backup::execFSAPPENDCONF);
  139.   addRecSignal(GSN_FSREMOVEREF, &Backup::execFSREMOVEREF, true);
  140.   addRecSignal(GSN_FSREMOVECONF, &Backup::execFSREMOVECONF);
  141.   /*****/
  142.   addRecSignal(GSN_BACKUP_REQ, &Backup::execBACKUP_REQ);
  143.   addRecSignal(GSN_ABORT_BACKUP_ORD, &Backup::execABORT_BACKUP_ORD);
  144.   addRecSignal(GSN_DEFINE_BACKUP_REQ, &Backup::execDEFINE_BACKUP_REQ);
  145.   addRecSignal(GSN_DEFINE_BACKUP_REF, &Backup::execDEFINE_BACKUP_REF);
  146.   addRecSignal(GSN_DEFINE_BACKUP_CONF, &Backup::execDEFINE_BACKUP_CONF);
  147.   addRecSignal(GSN_START_BACKUP_REQ, &Backup::execSTART_BACKUP_REQ);
  148.   addRecSignal(GSN_START_BACKUP_REF, &Backup::execSTART_BACKUP_REF);
  149.   addRecSignal(GSN_START_BACKUP_CONF, &Backup::execSTART_BACKUP_CONF);
  150.   
  151.   addRecSignal(GSN_BACKUP_FRAGMENT_REQ, &Backup::execBACKUP_FRAGMENT_REQ);
  152.   addRecSignal(GSN_BACKUP_FRAGMENT_REF, &Backup::execBACKUP_FRAGMENT_REF);
  153.   addRecSignal(GSN_BACKUP_FRAGMENT_CONF, &Backup::execBACKUP_FRAGMENT_CONF);
  154.   
  155.   addRecSignal(GSN_STOP_BACKUP_REQ, &Backup::execSTOP_BACKUP_REQ);
  156.   addRecSignal(GSN_STOP_BACKUP_REF, &Backup::execSTOP_BACKUP_REF);
  157.   addRecSignal(GSN_STOP_BACKUP_CONF, &Backup::execSTOP_BACKUP_CONF);
  158.   
  159.   //addRecSignal(GSN_BACKUP_STATUS_REQ, &Backup::execBACKUP_STATUS_REQ);
  160.   //addRecSignal(GSN_BACKUP_STATUS_CONF, &Backup::execBACKUP_STATUS_CONF);
  161.   
  162.   addRecSignal(GSN_UTIL_SEQUENCE_REF, &Backup::execUTIL_SEQUENCE_REF);
  163.   addRecSignal(GSN_UTIL_SEQUENCE_CONF, &Backup::execUTIL_SEQUENCE_CONF);
  164.   addRecSignal(GSN_WAIT_GCP_REF, &Backup::execWAIT_GCP_REF);
  165.   addRecSignal(GSN_WAIT_GCP_CONF, &Backup::execWAIT_GCP_CONF);
  166.   /**
  167.    * Testing
  168.    */
  169.   addRecSignal(GSN_BACKUP_REF, &Backup::execBACKUP_REF);
  170.   addRecSignal(GSN_BACKUP_CONF, &Backup::execBACKUP_CONF);
  171.   addRecSignal(GSN_BACKUP_ABORT_REP, &Backup::execBACKUP_ABORT_REP);
  172.   addRecSignal(GSN_BACKUP_COMPLETE_REP, &Backup::execBACKUP_COMPLETE_REP);
  173. }
  174.   
  175. Backup::~Backup()
  176. {
  177. }
  178. BLOCK_FUNCTIONS(Backup)
  179. template class ArrayPool<Backup::Page32>;
  180. template class ArrayPool<Backup::Attribute>;
  181. template class ArrayPool<Backup::Fragment>;