RepComponents.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 "RepComponents.hpp"
  14. RepComponents::RepComponents()
  15. {
  16.   /**
  17.    * @todo  Fix proper reporting of errors
  18.    */
  19.   m_connectStringPS = NULL;
  20.   m_connectStringSS = NULL;
  21.   /**
  22.    * Phase 1: Containers, RepState
  23.    */
  24.   m_gciContainer = new GCIContainer(MAX_NODE_GROUPS);
  25.   if (!m_gciContainer) REPABORT("Could not allocate object");
  26.   m_gciContainerPS = new GCIContainerPS(MAX_NODE_GROUPS);
  27.   if (!m_gciContainerPS) REPABORT("Could not allocate object");
  28.   m_repState = new RepState();
  29.   if (!m_repState) REPABORT("Could not allocate object");
  30.   /**
  31.    * Phase 2: PS 
  32.    */
  33.   m_transPS = new TransPS(m_gciContainerPS);
  34.   if (!m_transPS) REPABORT("Could not allocate object");
  35.   
  36.   m_extAPI = new ExtAPI();
  37.   if (!m_extAPI) REPABORT("Could not allocate object");
  38.   m_extNDB = new ExtNDB(m_gciContainerPS, m_extAPI);
  39.   if (!m_extNDB) REPABORT("Could not allocate object");
  40.   /**
  41.    * Phase 3: SS
  42.    */
  43.   m_transSS = new TransSS(m_gciContainer, m_repState);
  44.   if (!m_transSS) REPABORT("Could not allocate object");
  45.   m_appNDB = new AppNDB(m_gciContainer, m_repState);
  46.   if (!m_appNDB) REPABORT("Could not allocate object");
  47.   /**
  48.    * Phase 4: Requestor 
  49.    */
  50.   m_requestor = new Requestor(m_gciContainer, m_appNDB, m_repState);
  51.   if (!m_requestor) REPABORT("Could not allocate object");
  52.   /**
  53.    * Phase 5
  54.    */
  55.   m_repState->init(m_transSS->getRepSender());
  56.   m_repState->setApplier(m_appNDB);
  57.   m_repState->setGCIContainer(m_gciContainer);
  58.   m_requestor->setRepSender(m_transSS->getRepSender());
  59.   m_extNDB->setRepSender(m_transPS->getRepSender());
  60.   m_transPS->setGrepSender(m_extNDB->getGrepSender());
  61. }
  62. RepComponents::~RepComponents()
  63. {
  64.   if (m_requestor) delete m_requestor;
  65.   if (m_appNDB) delete m_appNDB;
  66.   if (m_extNDB) delete m_extNDB;
  67.   if (m_extAPI) delete m_extAPI;
  68.   
  69.   if (m_repState) delete m_repState;
  70.   if (m_transPS) delete m_transPS;
  71.   if (m_transSS) delete m_transSS;
  72.   if (m_gciContainer) delete m_gciContainer;
  73.   if (m_gciContainerPS) delete m_gciContainerPS;
  74. }
  75. int 
  76. RepComponents::connectPS() 
  77. {
  78.   /**
  79.    * @todo Fix return values of this function
  80.    */
  81.   /**
  82.    * Phase 1: TransporterFacade 1, Block number: 2  (PS)
  83.    */
  84.   if (!m_extNDB->init(m_connectStringPS)) return -1;
  85.   
  86.   /**
  87.    * Phase 2: TransporterFacade 2, Block number: 2  (PS)
  88.    */
  89.   m_transPS->init(m_transSS->getTransporterFacade(), m_connectStringPS);
  90.   return 0;
  91. }
  92. int 
  93. RepComponents::connectSS() 
  94. {
  95.   /**
  96.    * @todo Fix return values of this function
  97.    */
  98.   /**
  99.    * Phase 1: TransporterFacade 1, Block number: 1  (SS)
  100.    */
  101.   m_appNDB->init(m_connectStringSS);
  102.   
  103.   /**
  104.    * Phase 2: TransporterFacade 2, Block number: 1  (SS)
  105.    */
  106.   m_transSS->init(m_connectStringSS);
  107.   /**
  108.    * Phase 3: Has no TransporterFacade, just starts thread
  109.    */
  110.   m_requestor->init();
  111.   return 0;
  112. }