RepComponents.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:3k
- /* 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 */
- #include "RepComponents.hpp"
- RepComponents::RepComponents()
- {
- /**
- * @todo Fix proper reporting of errors
- */
- m_connectStringPS = NULL;
- m_connectStringSS = NULL;
- /**
- * Phase 1: Containers, RepState
- */
- m_gciContainer = new GCIContainer(MAX_NODE_GROUPS);
- if (!m_gciContainer) REPABORT("Could not allocate object");
- m_gciContainerPS = new GCIContainerPS(MAX_NODE_GROUPS);
- if (!m_gciContainerPS) REPABORT("Could not allocate object");
- m_repState = new RepState();
- if (!m_repState) REPABORT("Could not allocate object");
- /**
- * Phase 2: PS
- */
- m_transPS = new TransPS(m_gciContainerPS);
- if (!m_transPS) REPABORT("Could not allocate object");
-
- m_extAPI = new ExtAPI();
- if (!m_extAPI) REPABORT("Could not allocate object");
- m_extNDB = new ExtNDB(m_gciContainerPS, m_extAPI);
- if (!m_extNDB) REPABORT("Could not allocate object");
- /**
- * Phase 3: SS
- */
- m_transSS = new TransSS(m_gciContainer, m_repState);
- if (!m_transSS) REPABORT("Could not allocate object");
- m_appNDB = new AppNDB(m_gciContainer, m_repState);
- if (!m_appNDB) REPABORT("Could not allocate object");
- /**
- * Phase 4: Requestor
- */
- m_requestor = new Requestor(m_gciContainer, m_appNDB, m_repState);
- if (!m_requestor) REPABORT("Could not allocate object");
- /**
- * Phase 5
- */
- m_repState->init(m_transSS->getRepSender());
- m_repState->setApplier(m_appNDB);
- m_repState->setGCIContainer(m_gciContainer);
- m_requestor->setRepSender(m_transSS->getRepSender());
- m_extNDB->setRepSender(m_transPS->getRepSender());
- m_transPS->setGrepSender(m_extNDB->getGrepSender());
- }
- RepComponents::~RepComponents()
- {
- if (m_requestor) delete m_requestor;
- if (m_appNDB) delete m_appNDB;
- if (m_extNDB) delete m_extNDB;
- if (m_extAPI) delete m_extAPI;
-
- if (m_repState) delete m_repState;
- if (m_transPS) delete m_transPS;
- if (m_transSS) delete m_transSS;
- if (m_gciContainer) delete m_gciContainer;
- if (m_gciContainerPS) delete m_gciContainerPS;
- }
- int
- RepComponents::connectPS()
- {
- /**
- * @todo Fix return values of this function
- */
- /**
- * Phase 1: TransporterFacade 1, Block number: 2 (PS)
- */
- if (!m_extNDB->init(m_connectStringPS)) return -1;
-
- /**
- * Phase 2: TransporterFacade 2, Block number: 2 (PS)
- */
- m_transPS->init(m_transSS->getTransporterFacade(), m_connectStringPS);
- return 0;
- }
- int
- RepComponents::connectSS()
- {
- /**
- * @todo Fix return values of this function
- */
- /**
- * Phase 1: TransporterFacade 1, Block number: 1 (SS)
- */
- m_appNDB->init(m_connectStringSS);
-
- /**
- * Phase 2: TransporterFacade 2, Block number: 1 (SS)
- */
- m_transSS->init(m_connectStringSS);
- /**
- * Phase 3: Has no TransporterFacade, just starts thread
- */
- m_requestor->init();
- return 0;
- }