⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ndbcntrmain.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/* 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 */#define NDBCNTR_C#include "Ndbcntr.hpp"#include <ndb_limits.h>#include <ndb_version.h>#include <SimpleProperties.hpp>#include <signaldata/DictTabInfo.hpp>#include <signaldata/CreateTable.hpp>#include <signaldata/ReadNodesConf.hpp>#include <signaldata/NodeFailRep.hpp>#include <signaldata/TcKeyReq.hpp>#include <signaldata/TcKeyConf.hpp>#include <signaldata/EventReport.hpp>#include <signaldata/NodeStateSignalData.hpp>#include <signaldata/StopPerm.hpp>#include <signaldata/StopMe.hpp>#include <signaldata/WaitGCP.hpp>#include <signaldata/CheckNodeGroups.hpp>#include <signaldata/StartOrd.hpp>#include <signaldata/AbortAll.hpp>#include <signaldata/SystemError.hpp>#include <signaldata/NdbSttor.hpp>#include <signaldata/CntrStart.hpp>#include <signaldata/DumpStateOrd.hpp>#include <signaldata/FsRemoveReq.hpp>#include <signaldata/ReadConfig.hpp>#include <signaldata/FailRep.hpp>#include <AttributeHeader.hpp>#include <Configuration.hpp>#include <DebuggerNames.hpp>#include <NdbOut.hpp>#include <NdbTick.h>// used during shutdown for reporting current startphase// accessed from Emulator.cpp, NdbShutdown()Uint32 g_currentStartPhase;/** * ALL_BLOCKS Used during start phases and while changing node state * * NDBFS_REF Has to be before NDBCNTR_REF (due to "ndb -i" stuff) */struct BlockInfo {  BlockReference Ref; // BlockReference  Uint32 NextSP;            // Next start phase  Uint32 ErrorInsertStart;  Uint32 ErrorInsertStop;};static BlockInfo ALL_BLOCKS[] = {   { DBTC_REF,    1 ,  8000,  8035 },  { DBDIH_REF,   1 ,  7000,  7173 },  { DBLQH_REF,   1 ,  5000,  5030 },  { DBACC_REF,   1 ,  3000,  3999 },  { DBTUP_REF,   1 ,  4000,  4007 },  { DBDICT_REF,  1 ,  6000,  6003 },  { NDBFS_REF,   0 ,  2000,  2999 },  { NDBCNTR_REF, 0 ,  1000,  1999 },  { QMGR_REF,    1 ,     1,   999 },  { CMVMI_REF,   1 ,  9000,  9999 },  { TRIX_REF,    1 ,     0,     0 },  { BACKUP_REF,  1 , 10000, 10999 },  { DBUTIL_REF,  1 , 11000, 11999 },  { SUMA_REF,    1 , 13000, 13999 },  { DBTUX_REF,   1 , 12000, 12999 }};static const Uint32 ALL_BLOCKS_SZ = sizeof(ALL_BLOCKS)/sizeof(BlockInfo);static BlockReference readConfigOrder[ALL_BLOCKS_SZ] = {  DBTUP_REF,  DBACC_REF,  DBTC_REF,  DBLQH_REF,  DBTUX_REF,  DBDICT_REF,  DBDIH_REF,  NDBFS_REF,  NDBCNTR_REF,  QMGR_REF,  CMVMI_REF,  TRIX_REF,  BACKUP_REF,  DBUTIL_REF,  SUMA_REF};/*******************************//*  CONTINUEB                  *//*******************************/void Ndbcntr::execCONTINUEB(Signal* signal) {  jamEntry();  UintR Ttemp1 = signal->theData[0];  switch (Ttemp1) {  case ZSTARTUP:{    if(getNodeState().startLevel == NodeState::SL_STARTED){      jam();      return;    }        if(cmasterNodeId == getOwnNodeId() && c_start.m_starting.isclear()){      jam();      trySystemRestart(signal);      // Fall-through    }        Uint64 now = NdbTick_CurrentMillisecond();    if(now > c_start.m_startFailureTimeout)    {      jam();      Uint32 to_3= 0;      const ndb_mgm_configuration_iterator * p = 	theConfiguration.getOwnConfigIterator();      ndb_mgm_get_int_parameter(p, CFG_DB_START_FAILURE_TIMEOUT, &to_3);      BaseString tmp;      tmp.append("Shutting down node as total restart time exceeds "		 " StartFailureTimeout as set in config file ");      if(to_3 == 0)	tmp.append(" 0 (inifinite)");      else	tmp.appfmt(" %d", to_3);            progError(__LINE__, NDBD_EXIT_RESTART_TIMEOUT, tmp.c_str());    }        signal->theData[0] = ZSTARTUP;    sendSignalWithDelay(reference(), GSN_CONTINUEB, signal, 1000, 1);    break;  }  case ZSHUTDOWN:    jam();    c_stopRec.checkTimeout(signal);    break;  default:    jam();    systemErrorLab(signal, __LINE__);    return;    break;  }//switch}//Ndbcntr::execCONTINUEB()/*******************************//*  SYSTEM_ERROR               *//*******************************/void Ndbcntr::execSYSTEM_ERROR(Signal* signal) {  const SystemError * const sysErr = (SystemError *)signal->getDataPtr();  char buf[100];  int killingNode = refToNode(sysErr->errorRef);  Uint32 data1 = sysErr->data1;    jamEntry();  switch (sysErr->errorCode){  case SystemError::GCPStopDetected:    BaseString::snprintf(buf, sizeof(buf), 	     "Node %d killed this node because "	     "GCP stop was detected",     	     killingNode);    break;  case SystemError::CopyFragRefError:    BaseString::snprintf(buf, sizeof(buf), 	     "Node %d killed this node because "	     "it could not copy a fragment during node restart. "	     "Copy fragment error code: %u.",	     killingNode, data1);    break;  default:    BaseString::snprintf(buf, sizeof(buf), "System error %d, "	     " this node was killed by node %d", 	     sysErr->errorCode, killingNode);    break;  }  progError(__LINE__, NDBD_EXIT_SYSTEM_ERROR, buf);  return;}//Ndbcntr::execSYSTEM_ERROR()void Ndbcntr::execREAD_CONFIG_REQ(Signal* signal){  jamEntry();  const ReadConfigReq * req = (ReadConfigReq*)signal->getDataPtr();  Uint32 ref = req->senderRef;  Uint32 senderData = req->senderData;  const ndb_mgm_configuration_iterator * p =     theConfiguration.getOwnConfigIterator();  ndbrequire(p != 0);  ReadConfigConf * conf = (ReadConfigConf*)signal->getDataPtrSend();  conf->senderRef = reference();  conf->senderData = senderData;  sendSignal(ref, GSN_READ_CONFIG_CONF, signal, 	     ReadConfigConf::SignalLength, JBB);}void Ndbcntr::execSTTOR(Signal* signal) {  jamEntry();  cstartPhase = signal->theData[1];  NodeState newState(NodeState::SL_STARTING, cstartPhase, 		     (NodeState::StartType)ctypeOfStart);  updateNodeState(signal, newState);    cndbBlocksCount = 0;  cinternalStartphase = cstartPhase - 1;  switch (cstartPhase) {  case 0:    if(theConfiguration.getInitialStart()){      jam();      c_fsRemoveCount = 0;      clearFilesystem(signal);      return;    }    sendSttorry(signal);    break;  case ZSTART_PHASE_1:    jam();    startPhase1Lab(signal);    break;  case ZSTART_PHASE_2:    jam();    startPhase2Lab(signal);    break;  case ZSTART_PHASE_3:    jam();    startPhase3Lab(signal);    break;  case ZSTART_PHASE_4:    jam();    startPhase4Lab(signal);    break;  case ZSTART_PHASE_5:    jam();    startPhase5Lab(signal);    break;  case 6:    jam();    getNodeGroup(signal);    // Fall through    break;  case ZSTART_PHASE_8:    jam();    startPhase8Lab(signal);    break;  case ZSTART_PHASE_9:    jam();    startPhase9Lab(signal);    break;  default:    jam();    sendSttorry(signal);    break;  }//switch}//Ndbcntr::execSTTOR()voidNdbcntr::getNodeGroup(Signal* signal){  jam();  CheckNodeGroups * sd = (CheckNodeGroups*)signal->getDataPtrSend();  sd->requestType = CheckNodeGroups::Direct | CheckNodeGroups::GetNodeGroup;  EXECUTE_DIRECT(DBDIH, GSN_CHECKNODEGROUPSREQ, signal, 		 CheckNodeGroups::SignalLength);  jamEntry();  c_nodeGroup = sd->output;  sendSttorry(signal);}/*******************************//*  NDB_STTORRY                *//*******************************/void Ndbcntr::execNDB_STTORRY(Signal* signal) {  jamEntry();  switch (cstartPhase) {  case ZSTART_PHASE_2:    jam();    ph2GLab(signal);    return;    break;  case ZSTART_PHASE_3:    jam();    ph3ALab(signal);    return;    break;  case ZSTART_PHASE_4:    jam();    ph4BLab(signal);    return;    break;  case ZSTART_PHASE_5:    jam();    ph5ALab(signal);    return;    break;  case ZSTART_PHASE_6:    jam();    ph6ALab(signal);    return;    break;  case ZSTART_PHASE_7:    jam();    ph6BLab(signal);    return;    break;  case ZSTART_PHASE_8:    jam();    ph7ALab(signal);    return;    break;  case ZSTART_PHASE_9:    jam();    ph8ALab(signal);    return;    break;  default:    jam();    systemErrorLab(signal, __LINE__);    return;    break;  }//switch}//Ndbcntr::execNDB_STTORRY()void Ndbcntr::startPhase1Lab(Signal* signal) {  jamEntry();  initData(signal);  cdynamicNodeId = 0;  NdbBlocksRecPtr ndbBlocksPtr;  ndbBlocksPtr.i = 0;  ptrAss(ndbBlocksPtr, ndbBlocksRec);  ndbBlocksPtr.p->blockref = DBLQH_REF;  ndbBlocksPtr.i = 1;  ptrAss(ndbBlocksPtr, ndbBlocksRec);  ndbBlocksPtr.p->blockref = DBDICT_REF;  ndbBlocksPtr.i = 2;  ptrAss(ndbBlocksPtr, ndbBlocksRec);  ndbBlocksPtr.p->blockref = DBTUP_REF;  ndbBlocksPtr.i = 3;  ptrAss(ndbBlocksPtr, ndbBlocksRec);  ndbBlocksPtr.p->blockref = DBACC_REF;  ndbBlocksPtr.i = 4;  ptrAss(ndbBlocksPtr, ndbBlocksRec);  ndbBlocksPtr.p->blockref = DBTC_REF;  ndbBlocksPtr.i = 5;  ptrAss(ndbBlocksPtr, ndbBlocksRec);  ndbBlocksPtr.p->blockref = DBDIH_REF;  sendSttorry(signal);  return;}void Ndbcntr::execREAD_NODESREF(Signal* signal) {  jamEntry();  systemErrorLab(signal, __LINE__);  return;}//Ndbcntr::execREAD_NODESREF()/*******************************//*  NDB_STARTREF               *//*******************************/void Ndbcntr::execNDB_STARTREF(Signal* signal) {  jamEntry();  systemErrorLab(signal, __LINE__);  return;}//Ndbcntr::execNDB_STARTREF()/*******************************//*  STTOR                      *//*******************************/void Ndbcntr::startPhase2Lab(Signal* signal) {  c_start.m_lastGci = 0;  c_start.m_lastGciNodeId = getOwnNodeId();    signal->theData[0] = reference();  sendSignal(DBDIH_REF, GSN_DIH_RESTARTREQ, signal, 1, JBB);  return;}//Ndbcntr::startPhase2Lab()/*******************************//*  DIH_RESTARTCONF            *//*******************************/void Ndbcntr::execDIH_RESTARTCONF(Signal* signal) {  jamEntry();  //cmasterDihId = signal->theData[0];  c_start.m_lastGci = signal->theData[1];  ctypeOfStart = NodeState::ST_SYSTEM_RESTART;  ph2ALab(signal);  return;}//Ndbcntr::execDIH_RESTARTCONF()/*******************************//*  DIH_RESTARTREF             *//*******************************/void Ndbcntr::execDIH_RESTARTREF(Signal* signal) {  jamEntry();  ctypeOfStart = NodeState::ST_INITIAL_START;  ph2ALab(signal);  return;}//Ndbcntr::execDIH_RESTARTREF()void Ndbcntr::ph2ALab(Signal* signal) {  /******************************/  /* request configured nodes   */  /* from QMGR                  */  /*  READ_NODESREQ             */  /******************************/  signal->theData[0] = reference();  sendSignal(QMGR_REF, GSN_READ_NODESREQ, signal, 1, JBB);  return;}//Ndbcntr::ph2ALab()inlineUint64setTimeout(Uint64 time, Uint32 timeoutValue){  if(timeoutValue == 0)    return ~(Uint64)0;  return time + timeoutValue;}/*******************************//*  READ_NODESCONF             *//*******************************/void Ndbcntr::execREAD_NODESCONF(Signal* signal) 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -