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

📄 ndbcntrmain.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  if (cndbBlocksCount < ZNO_NDB_BLOCKS) {    jam();    sendNdbSttor(signal);    return;  }//if  sendSttorry(signal);  return;}//Ndbcntr::ph3ALab()/*4.5  START PHASE 4      *//*###########################################################################*/// WAIT FOR ALL NODES IN CLUSTER TO CHANGE STATE INTO ZSTART ,// APPL_CHANGEREP IS ALWAYS SENT WHEN SOMEONE HAVE// CHANGED THEIR STATE. APPL_STARTCONF INDICATES THAT ALL NODES ARE IN START // STATE SEND NDB_STARTREQ TO DIH AND THEN WAIT FOR NDB_STARTCONF/*---------------------------------------------------------------------------*//*******************************//*  STTOR                      *//*******************************/void Ndbcntr::startPhase4Lab(Signal* signal) {  ph4ALab(signal);}//Ndbcntr::startPhase4Lab()void Ndbcntr::ph4ALab(Signal* signal) {  ph4BLab(signal);  return;}//Ndbcntr::ph4ALab()/*******************************//*  NDB_STTORRY                *//*******************************/void Ndbcntr::ph4BLab(Signal* signal) {/*--------------------------------------*//* CASE: CSTART_PHASE = ZSTART_PHASE_4  *//*--------------------------------------*/  if (cndbBlocksCount < ZNO_NDB_BLOCKS) {    jam();    sendNdbSttor(signal);    return;  }//if  if ((ctypeOfStart == NodeState::ST_NODE_RESTART) ||      (ctypeOfStart == NodeState::ST_INITIAL_NODE_RESTART)) {    jam();    sendSttorry(signal);    return;  }//if  waitpoint41Lab(signal);  return;}//Ndbcntr::ph4BLab()void Ndbcntr::waitpoint41Lab(Signal* signal) {  if (getOwnNodeId() == cmasterNodeId) {    jam();/*--------------------------------------*//* MASTER WAITS UNTIL ALL SLAVES HAS    *//* SENT THE REPORTS                     *//*--------------------------------------*/    cnoWaitrep++;    if (cnoWaitrep == cnoStartNodes) {      jam();      cnoWaitrep = 0;/*---------------------------------------------------------------------------*/// NDB_STARTREQ STARTS UP ALL SET UP OF DISTRIBUTION INFORMATION IN DIH AND// DICT. AFTER SETTING UP THIS// DATA IT USES THAT DATA TO SET UP WHICH FRAGMENTS THAT ARE TO START AND// WHERE THEY ARE TO START. THEN// IT SETS UP THE FRAGMENTS AND RECOVERS THEM BY://  1) READING A LOCAL CHECKPOINT FROM DISK.//  2) EXECUTING THE UNDO LOG ON INDEX AND DATA.//  3) EXECUTING THE FRAGMENT REDO LOG FROM ONE OR SEVERAL NODES TO//     RESTORE THE RESTART CONFIGURATION OF DATA IN NDB CLUSTER./*---------------------------------------------------------------------------*/      signal->theData[0] = reference();      signal->theData[1] = ctypeOfStart;      sendSignal(DBDIH_REF, GSN_NDB_STARTREQ, signal, 2, JBB);    }//if  } else {    jam();/*--------------------------------------*//* SLAVE NODES WILL PASS HERE ONCE AND  *//* SEND A WAITPOINT REPORT TO MASTER.   *//* SLAVES WONT DO ANYTHING UNTIL THEY   *//* RECEIVE A WAIT REPORT FROM THE MASTER*//*--------------------------------------*/    signal->theData[0] = getOwnNodeId();    signal->theData[1] = ZWAITPOINT_4_1;    sendSignal(calcNdbCntrBlockRef(cmasterNodeId), 	       GSN_CNTR_WAITREP, signal, 2, JBB);  }//if  return;}//Ndbcntr::waitpoint41Lab()/*******************************//*  NDB_STARTCONF              *//*******************************/void Ndbcntr::execNDB_STARTCONF(Signal* signal) {  jamEntry();  NodeReceiverGroup rg(NDBCNTR, c_start.m_starting);  signal->theData[0] = getOwnNodeId();  signal->theData[1] = ZWAITPOINT_4_2;  sendSignal(rg, GSN_CNTR_WAITREP, signal, 2, JBB);  return;}//Ndbcntr::execNDB_STARTCONF()/*4.6  START PHASE 5      *//*###########################################################################*/// SEND APPL_RUN TO THE QMGR IN THIS BLOCK// SEND NDB_STTOR ALL BLOCKS ACC, DICT, DIH, LQH, TC AND TUP THEN WAIT FOR// THEIR NDB_STTORRY/*---------------------------------------------------------------------------*//*******************************//*  STTOR                      *//*******************************/void Ndbcntr::startPhase5Lab(Signal* signal) {  ph5ALab(signal);  return;}//Ndbcntr::startPhase5Lab()/*******************************//*  NDB_STTORRY                *//*******************************//*---------------------------------------------------------------------------*/// THIS IS NDB START PHASE 5./*---------------------------------------------------------------------------*/// IN THIS START PHASE TUP INITIALISES DISK FILES FOR DISK STORAGE IF INITIAL// START. DIH WILL START UP// THE GLOBAL CHECKPOINT PROTOCOL AND WILL CONCLUDE ANY UNFINISHED TAKE OVERS // THAT STARTED BEFORE THE SYSTEM CRASH./*---------------------------------------------------------------------------*/void Ndbcntr::ph5ALab(Signal* signal) {  if (cndbBlocksCount < ZNO_NDB_BLOCKS) {    jam();    sendNdbSttor(signal);    return;  }//if  cstartPhase = cstartPhase + 1;  cinternalStartphase = cstartPhase - 1;  if (getOwnNodeId() == cmasterNodeId) {    switch(ctypeOfStart){    case NodeState::ST_INITIAL_START:      jam();      /*--------------------------------------*/      /* MASTER CNTR IS RESPONSIBLE FOR       */      /* CREATING SYSTEM TABLES               */      /*--------------------------------------*/      createSystableLab(signal, 0);      return;    case NodeState::ST_SYSTEM_RESTART:      jam();      waitpoint52Lab(signal);      return;    case NodeState::ST_NODE_RESTART:    case NodeState::ST_INITIAL_NODE_RESTART:      jam();      break;    case NodeState::ST_ILLEGAL_TYPE:      jam();      break;    }    ndbrequire(false);  }    /**   * Not master   */  NdbSttor * const req = (NdbSttor*)signal->getDataPtrSend();  switch(ctypeOfStart){  case NodeState::ST_NODE_RESTART:  case NodeState::ST_INITIAL_NODE_RESTART:    jam();    /*----------------------------------------------------------------------*/    // SEND NDB START PHASE 5 IN NODE RESTARTS TO COPY DATA TO THE NEWLY    // STARTED NODE.    /*----------------------------------------------------------------------*/    req->senderRef = reference();    req->nodeId = getOwnNodeId();    req->internalStartPhase = cinternalStartphase;    req->typeOfStart = ctypeOfStart;    req->masterNodeId = cmasterNodeId;        //#define TRACE_STTOR#ifdef TRACE_STTOR    ndbout_c("sending NDB_STTOR(%d) to DIH", cinternalStartphase);#endif    sendSignal(DBDIH_REF, GSN_NDB_STTOR, signal, 	       NdbSttor::SignalLength, JBB);    return;  case NodeState::ST_INITIAL_START:  case NodeState::ST_SYSTEM_RESTART:    jam();    /*--------------------------------------*/    /* DURING SYSTEMRESTART AND INITALSTART:*/    /* SLAVE NODES WILL PASS HERE ONCE AND  */    /* SEND A WAITPOINT REPORT TO MASTER.   */    /* SLAVES WONT DO ANYTHING UNTIL THEY   */    /* RECEIVE A WAIT REPORT FROM THE MASTER*/    /* WHEN THE MASTER HAS FINISHED HIS WORK*/    /*--------------------------------------*/    signal->theData[0] = getOwnNodeId();    signal->theData[1] = ZWAITPOINT_5_2;    sendSignal(calcNdbCntrBlockRef(cmasterNodeId), 	       GSN_CNTR_WAITREP, signal, 2, JBB);    return;  default:    ndbrequire(false);  }}//Ndbcntr::ph5ALab()void Ndbcntr::waitpoint52Lab(Signal* signal) {  cnoWaitrep = cnoWaitrep + 1;/*---------------------------------------------------------------------------*/// THIS WAITING POINT IS ONLY USED BY A MASTER NODE. WE WILL EXECUTE NDB START // PHASE 5 FOR DIH IN THE// MASTER. THIS WILL START UP LOCAL CHECKPOINTS AND WILL ALSO CONCLUDE ANY// UNFINISHED LOCAL CHECKPOINTS// BEFORE THE SYSTEM CRASH. THIS WILL ENSURE THAT WE ALWAYS RESTART FROM A// WELL KNOWN STATE./*---------------------------------------------------------------------------*//*--------------------------------------*//* MASTER WAITS UNTIL HE RECEIVED WAIT  *//* REPORTS FROM ALL SLAVE CNTR          *//*--------------------------------------*/  if (cnoWaitrep == cnoStartNodes) {    jam();    cnoWaitrep = 0;    NdbSttor * const req = (NdbSttor*)signal->getDataPtrSend();    req->senderRef = reference();    req->nodeId = getOwnNodeId();    req->internalStartPhase = cinternalStartphase;    req->typeOfStart = ctypeOfStart;    req->masterNodeId = cmasterNodeId;#ifdef TRACE_STTOR    ndbout_c("sending NDB_STTOR(%d) to DIH", cinternalStartphase);#endif    sendSignal(DBDIH_REF, GSN_NDB_STTOR, signal, 	       NdbSttor::SignalLength, JBB);  }//if  return;}//Ndbcntr::waitpoint52Lab()/*******************************//*  NDB_STTORRY                *//*******************************/void Ndbcntr::ph6ALab(Signal* signal) {  if ((ctypeOfStart == NodeState::ST_NODE_RESTART) ||      (ctypeOfStart == NodeState::ST_INITIAL_NODE_RESTART)) {    jam();    waitpoint51Lab(signal);    return;  }//if  NodeReceiverGroup rg(NDBCNTR, c_start.m_starting);  rg.m_nodes.clear(getOwnNodeId());  signal->theData[0] = getOwnNodeId();  signal->theData[1] = ZWAITPOINT_5_1;  sendSignal(rg, GSN_CNTR_WAITREP, signal, 2, JBB);  waitpoint51Lab(signal);  return;}//Ndbcntr::ph6ALab()void Ndbcntr::waitpoint51Lab(Signal* signal) {  cstartPhase = cstartPhase + 1;/*---------------------------------------------------------------------------*/// A FINAL STEP IS NOW TO SEND NDB_STTOR TO TC. THIS MAKES IT POSSIBLE TO // CONNECT TO TC FOR APPLICATIONS.// THIS IS NDB START PHASE 6 WHICH IS FOR ALL BLOCKS IN ALL NODES./*---------------------------------------------------------------------------*/  cinternalStartphase = cstartPhase - 1;  cndbBlocksCount = 0;  ph6BLab(signal);  return;}//Ndbcntr::waitpoint51Lab()void Ndbcntr::ph6BLab(Signal* signal) {  // c_missra.currentStartPhase - cstartPhase - cinternalStartphase =  // 5 - 7 - 6  if (cndbBlocksCount < ZNO_NDB_BLOCKS) {    jam();    sendNdbSttor(signal);    return;  }//if  if ((ctypeOfStart == NodeState::ST_NODE_RESTART) ||      (ctypeOfStart == NodeState::ST_INITIAL_NODE_RESTART)) {    jam();    sendSttorry(signal);    return;  }  waitpoint61Lab(signal);}void Ndbcntr::waitpoint61Lab(Signal* signal){  if (getOwnNodeId() == cmasterNodeId) {    jam();    cnoWaitrep6++;    if (cnoWaitrep6 == cnoStartNodes) {      jam();      NodeReceiverGroup rg(NDBCNTR, c_start.m_starting);      rg.m_nodes.clear(getOwnNodeId());      signal->theData[0] = getOwnNodeId();      signal->theData[1] = ZWAITPOINT_6_2;      sendSignal(rg, GSN_CNTR_WAITREP, signal, 2, JBB);      sendSttorry(signal);    }  } else {    jam();    signal->theData[0] = getOwnNodeId();    signal->theData[1] = ZWAITPOINT_6_1;    sendSignal(calcNdbCntrBlockRef(cmasterNodeId), GSN_CNTR_WAITREP, signal, 2, JBB);  }}// Start phase 8 (internal 7)void Ndbcntr::startPhase8Lab(Signal* signal){  cinternalStartphase = cstartPhase - 1;  cndbBlocksCount = 0;  ph7ALab(signal);}void Ndbcntr::ph7ALab(Signal* signal){  while (cndbBlocksCount < ZNO_NDB_BLOCKS) {    jam();    sendNdbSttor(signal);    return;  }  if ((ctypeOfStart == NodeState::ST_NODE_RESTART) ||      (ctypeOfStart == NodeState::ST_INITIAL_NODE_RESTART)) {    jam();    sendSttorry(signal);    return;  }  waitpoint71Lab(signal);}void Ndbcntr::waitpoint71Lab(Signal* signal){  if (getOwnNodeId() == cmasterNodeId) {    jam();    cnoWaitrep7++;    if (cnoWaitrep7 == cnoStartNodes) {      jam();      NodeReceiverGroup rg(NDBCNTR, c_start.m_starting);      rg.m_nodes.clear(getOwnNodeId());      signal->theData[0] = getOwnNodeId();      signal->theData[1] = ZWAITPOINT_7_2;      sendSignal(rg, GSN_CNTR_WAITREP, signal, 2, JBB);      sendSttorry(signal);    }  } else {    jam();    signal->theData[0] = getOwnNodeId();    signal->theData[1] = ZWAITPOINT_7_1;    sendSignal(calcNdbCntrBlockRef(cmasterNodeId), GSN_CNTR_WAITREP, signal, 2, JBB);  }}// Start phase 9 (internal 8)void Ndbcntr::startPhase9Lab(Signal* signal){  cinternalStartphase = cstartPhase - 1;  cndbBlocksCount = 0;  ph8ALab(signal);}void Ndbcntr::ph8ALab(Signal* signal){/*---------------------------------------------------------------------------*/// NODES WHICH PERFORM A NODE RESTART NEEDS TO GET THE DYNAMIC ID'S// OF THE OTHER NODES HERE./*---------------------------------------------------------------------------*/  sendSttorry(signal);  resetStartVariables(signal);  return;}//Ndbcntr::ph8BLab()/*******************************//*  CNTR_WAITREP               *//*******************************/void Ndbcntr::execCNTR_WAITREP(Signal* signal) {  Uint16 twaitPoint;  jamEntry();  twaitPoint = signal->theData[1];  switch (twaitPoint) {  case ZWAITPOINT_4_1:    jam();    waitpoint41Lab(signal);    break;  case ZWAITPOINT_4_2:    jam();    sendSttorry(signal);    break;  case ZWAITPOINT_5_1:    jam();    waitpoint51Lab(signal);    break;  case ZWAITPOINT_5_2:    jam();    waitpoint52Lab(signal);    break;  case ZWAITPOINT_6_1:    jam();    waitpoint61Lab(signal);    break;  case ZWAITPOINT_6_2:    jam();    sendSttorry(signal);    break;  case ZWAITPOINT_7_1:    jam();    waitpoint71Lab(signal);    break;  case ZWAITPOINT_7_2:    jam();    sendSttorry(signal);    break;  default:    jam();    systemErrorLab(signal, __LINE__);    break;  }//switch}//Ndbcntr::execCNTR_WAITREP()/*******************************//*  NODE_FAILREP               *//*******************************/void Ndbcntr::execNODE_FAILREP(Signal* signal) {  jamEntry();  const NodeFailRep * nodeFail = (NodeFailRep *)&signal->theData[0];  NdbNodeBitmask allFailed;   allFailed.assign(NdbNodeBitmask::Size, nodeFail->theNodes);  NdbNodeBitmask failedStarted = c_startedNodes;  NdbNodeBitmask failedStarting = c_start.m_starting;  NdbNodeBitmask failedWaiting = c_start.m_waiting;

⌨️ 快捷键说明

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