diff options
Diffstat (limited to 'ndb/src/rep/RepComponents.cpp')
-rw-r--r-- | ndb/src/rep/RepComponents.cpp | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/ndb/src/rep/RepComponents.cpp b/ndb/src/rep/RepComponents.cpp new file mode 100644 index 00000000000..04b2e0e5fa5 --- /dev/null +++ b/ndb/src/rep/RepComponents.cpp @@ -0,0 +1,138 @@ +/* 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; +} |